mikrocontroller.net

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


Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

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

Ralf

Autor: Nico (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

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


Peter

Autor: Dieter Werner (dds5)
Datum:

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

Autor: ArthurDent (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.