Forum: Mikrocontroller und Digitale Elektronik (USB)-Bootloader und Anwendung auf einmal schreiben (Henne vs. Ei)


von Robert (Gast)


Lesenswert?

Hi!

Ich habe ein etwas kniffliges Problem:

Ich habe einen AT90USB1287 der normalerweise von einem angeschlossenen 
AT86RF230 per CLKM mit einem 8 MHz Takt versorgt wird und dann per USB 
kommuniziert. Dafür muss der RF230 entsprechend programmiert werden, da 
er per default nur 1 MHz ausgibt. Dies funktioniert zuverlässig: 
AT90USB1287 startet mit 1 MHz, konfiguriert den RF230 auf 8 MHz, läuft 
mit 8 MHz und wird dann vom USB-Host enumeriert.

Nun will/muss ich den Atmel USB-Bootloader für Flip benutzen. Die 
Schaltung soll in ein kleines Gehäuse (verpresst!) und nur der USB 
bleibt zugänglich. Eigentlich kein Problem per Bootloader und Flip (das 
Anspringen funktioniert etc). Leider habe ich hier die 
Henne-Ei-Problematik: Wenn ich nur den Bootloader per JTAG programmiere 
läuft der AT90USB1287 nur mit 1 MHz - das reicht nicht um ihn per Flip 
mit der restlichen SW beschreiben zu können! Wie kann ich (einfach, für 
mehrere Stück) sowohl Bootloader als auch die Anwendung gleichzeitig per 
JTAG programmieren? Dann würde jeweils für ein Update das Programm die 8 
MHz setzen und dann in den BL springen können...

Gruß
Robert

von holger (Gast)


Lesenswert?

>Wie kann ich (einfach, für
>mehrere Stück) sowohl Bootloader als auch die Anwendung gleichzeitig per
>JTAG programmieren? Dann würde jeweils für ein Update das Programm die 8
>MHz setzen und dann in den BL springen können...

Bei einem AVR weiss ich es jetzt nicht :(
Bei PIC18 compiliere ich Bootloader und Anwendung
als ein Programm in ein HEX File. Vieleicht musst
du einfach nur deine beiden HEX Files zusammenfügen.

von Ralf (Gast)


Lesenswert?

Ich kapiers nicht ganz, sorry. Also, das Anspringen des Bootloaders aus 
der Applikation funktioniert? Kannst du dann nicht einfach ein 
USB-Kommando in die Applikation implementieren, welches auf 8MHz 
konfiguriert und dann den BL anspringt?

Ralf

von Ralf (Gast)


Lesenswert?

Ach so, vor dem Verpressen müsste dann halt schon die Applikation 
rein...

Ralf

von Nico (Gast)


Lesenswert?

Du kannst eigentlich einfach die hex-dateien von applikation und 
bootloader zusammenkopieren. (Ich glaub die letzte zeile des ersten 
Teiles muss gelöscht werden).

Siehe: Beitrag "Re: Bootloader+Applikation zusammen flashen"

von Ralf (Gast)


Lesenswert?

> Du kannst eigentlich einfach die hex-dateien von applikation und
> bootloader zusammenkopieren. (Ich glaub die letzte zeile des ersten
> Teiles muss gelöscht werden).
Ja, die letzte Zeile einer HEX-Datei ist normalerweise die Endekennung.

Ich hab jetzt leider keine Info gefunden, warum der BL nicht mit 1MHz 
laufen sollte, wo steht das denn?

Ralf

von Robert (Gast)


Lesenswert?

Hi!

Danke für die vielen Antworten.

Nur kurz zur Klärung: Der BL läuft natürlich mit 1 MHz, aber der 
USB-Teil des megas nicht! Und da ich nur per USB programmieren kann...

Gruß
Robert

von Ralf (Gast)


Lesenswert?

> Nur kurz zur Klärung: Der BL läuft natürlich mit 1 MHz, aber der
> USB-Teil des megas nicht! Und da ich nur per USB programmieren kann...
Jepp, habs grad im DB gelesen... Hm... Dann müsste der Vorschlag, die 
beiden HEX-Files zu mischen, eigentlich gehen. Wobei du drauf achten 
musst, dass du über ein USB-Kommando IMMER auf 8MHz schalten und den BL 
starten kannst, wenn das nicht sauber programmiert ist, kann's sonst in 
die Hose gehen...

Aber mir ist grad was aufgefallen im Datenblatt (ich habs aber nur kurz 
überflogen) soweit ich das gesehen habe, ist per Default der interne 
RC-Oscillator mit 8MHz aktiv, und die PreScaler-Fuses auf 8 eingestellt, 
daher die 1MHz. Kann dein Controller die Clock-Sourcen on-the-fly 
umschalten? Dann könntest du die Prescaler-Fuses auf einen Teiler von 1 
einstellen, und dein USB-Part müsste auch laufen, oder? Wie gesagt, habs 
nur kurz überflogen :)

Ralf

von Peter D. (peda)


Lesenswert?

Um welche tausende Stückzahlen geht es denn, daß ein extra 8MHz 
Resonator für den AVR so unverschämt teuer ist?


Peter

von Dieter W. (dds5)


Lesenswert?

Wenn der Bootloader im Quellcode vorliegt könnte man ihn vielleicht um 
die Taktumschaltung erweitern ...

von ArthurDent (Gast)


Lesenswert?

Ich wuerde Bootloader und Applikation mit srec_cat aneinanderhaengen und 
dann ueber JTAG flashen.

z.B.

srec_cat bootloader.hex -Intel application.mot -o mix.hex -Intel

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.