(USB)-Bootloader und Anwendung auf einmal schreiben (Henne vs. Ei)

Gast #1149381
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
Gast #1149412
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.
Gast #1149425
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
Gast #1149454
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
Gast #1149604
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren