Hallo,
ich habe einen Bootloader als HEX-File vorliegen und möchte ihn auf
verschieden ATMEGA's (8, 32, 644) aufspielen.
Die FUSE-Bits sind auf 512 Bytes gesetzt.
Wenn ich mir das HEX-File ansehe, würde ich sagen, der Bootloader wird
ab Adresse 0000 in den Flash geschrieben, oder ???
1
:100000002AC046C145C144C143C142C141C140C1EA
2
:100010003FC13EC13DC13CC13BC13AC139C138C1FC
3
:1000200037C136C135C11DC0FFC00000FFC0000090
Was muß ich beim Flashen der AVR's tun, damit die HEX-Datei immer
automatisch in die Bootloader-Sektion geschrieben wird ?
Es ist gut möglich, dass diese Frage schon mal beantworten wurde, aber
wenn ich im Forum nach BOOTLOADER suche, dann brauche ich ne Woche
Urlaub zum lesen...
Ich habe leider keine Beschreibung gefunden, wie der Bootloader gebrannt
werden muss...
B.A. schrieb:> ich habe einen Bootloader als HEX-File vorliegen und möchte ihn auf> verschieden ATMEGA's (8, 32, 644) aufspielen.
Und das selbe HEX-File (also unveränderter Binär-Code) soll dann auf
unterschiedlichen Controllern laufen? Das bezweifle ich.
Hallo,
Du musst den Bootloader für den jeweiligen AVR kompilieren. Die
Initialisierung verschiedener AVR ist unterschiedlich auch die Register
sind evtl. unterschiedlich. Selbst wenn es aus irgendwelchen Gründen
auch immer irgendwie laufen sollte, weiß der Bootloader nicht, dass er
auf einem AVR mit weniger Speicher ist und überschreibt sich dann
selbst, bzw bricht ab, obwohl noch mehr Platz wäre.
Codes für Bootloader gibt es ausreichend im Netz. Kostenlose Compiler
auch.
Das ist je gerade mein Problem...
Ist es möglich, einen "Standard-Bootloader" auf verschieden AVR zu
brennen ?
Selbst wenn ich den Bootloader kompiliere, ändern sich ja im HEX-File
die Adressen nicht...
Den Bootloader hätte ich auch als Code da...
Aber was muß ich ändern, damit der richtige Speicher genommen wird ?
Mit dem folgenden Linker-Befehl kannst du die Code Section verschieben
lassen:
-Wl,--section-start=.text=0x1800
Wobei 0x1800 die Addresse ist an welcher der Bootloader startet (unter
anderem vom µC der Fusebits abhängig)
Mfg SubZeroX
B.A. schrieb:> Den Bootloader hätte ich auch als Code da...> Aber was muß ich ändern, damit der richtige Speicher genommen wird ?
das macht ja im Normalfall der Compieler, dort sagt man ja für welchen
Atmel er übersetzen soll.
B.A. schrieb:> Ist es möglich, einen "Standard-Bootloader" auf verschieden AVR zu> brennen ?
nur wenn er keine avr-interne peripherie nutzt, denn die kann ja von
modell oder reihe abhängig verschieden sein. oder er informiert sich,
auf welchem avr er denn läuft. das geht aber bei avrs afaik nicht.
ansonsten: keine timer, keine uart. und damit ist dein vorhaben schon
den bach runter.
> Den Bootloader hätte ich auch als Code da...
schon der vernünftigere ansatz.
> Aber was muß ich ändern, damit der richtige Speicher genommen wird ?
zeile 42...
WELCHEN bootloader hast du denn?
B.A. schrieb:> Ist es möglich, einen "Standard-Bootloader" auf verschieden AVR zu> brennen ?
nur wenn er keine avr-interne peripherie nutzt, denn die kann ja von
modell oder reihe abhängig verschieden sein. oder er informiert sich,
auf welchem avr er denn läuft. das geht aber bei avrs afaik nicht.
ansonsten: keine timer, keine uart. und damit ist dein vorhaben schon
den bach runter.
> Den Bootloader hätte ich auch als Code da...
schon der vernünftigere ansatz.
> Aber was muß ich ändern, damit der richtige Speicher genommen wird ?
zeile 42...
WELCHEN bootloader hast du denn?
ich habe den CAN-Bootloader:
http://www.kreatives-chaos.com/artikel/can-bootloader
mein Problem...
Das HEX-Fil von meiner Application läuft (mit ISP aufgespielt)
fehlerfrei.
Wenn ich den BOOTLOADER aufspiele, kann ich per CAN starten, die Daten
übertagen und die Application starten.
Alles verläuft fehlerfrei, aber die Application startet nicht, sondern
wieder der Bootloader.....
Deswegen meine Vermutung: Der Bootloader liegt im falschen Bereich...
Ja, er Haken ist drin.
Leider habe ich keinerlei Möglichkeit, mein Programm zu testen.
Aber Die Rückmeldung des Bootloaders kommt, die Pages wurden angeblich
gespeichert.
Wie kann ich prüfen, ober der Bootloader im richtigen Speicher ist ???
Es gibt aber scheinbar auch kein fertiges CAN-Bootloader-Programm für
Windows...
Ich werde mein Programm mal auf RS232 umschreiben und einen
RS232-Bootloader zum TEST aufspielen...
B.A. schrieb:> ab Adresse 0000 in den Flash geschrieben, oder ???
Da gehört ja nun gar nicht hin.
Sondern dahin:
SubZeroX schrieb:> -Wl,--section-start=.text=0x1800
Das ist aber bei jedem Controller unterschiedlich.
B.A. schrieb:> Ich habe leider keine Beschreibung gefunden, wie der Bootloader gebrannt> werden muss...> Es ist gut möglich, dass diese Frage schon mal beantworten wurde, aber> wenn ich im Forum nach BOOTLOADER suche, dann brauche ich ne Woche> Urlaub zum lesen...
Dann hast du allerdings schon, bevor du angefangen hast zu suchen,
festgestellt, daß du fürs Lesen eine Woche brauchst.
Da steht alles drin, was du wissen musst:
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung
mfg.
Thomas Eckmann schrieb:> Dann hast du allerdings schon, bevor du angefangen hast zu suchen,> festgestellt, daß du fürs Lesen eine Woche brauchst.
Ja, ich hatte 3 Wochen Urlaub geplant und eine Woche war noch übrig... !
Ne, mal langsam... nicht unfreundlich werden... es sind nicht alle so
schlau wie du...
Hast du denn den Bootloader für deinen AVR konfiguriert und compiliert?
Wenn er die Applikation an einer falschen Adresse im Flash vermutet und
diese Adresse dann anspringt, kann auch ein Reset ausgelöst werden. Das
würde erklären, warum sich wieder dein Bootloader meldet.
B.A. schrieb:> Ne, mal langsam... nicht unfreundlich werden... es sind nicht alle so> schlau wie du...
Nun pampel hier mal nicht rum. Schliesslich stehst du hier auf dem
Schlauch.
Michael H. schrieb:> Wenn er die Applikation an einer falschen Adresse im Flash vermutet und> diese Adresse dann anspringt, kann auch ein Reset ausgelöst werden.
Ein Reset wird nicht ausgelöst.
Der rauscht halt einfach durch die FFs des leeren Flash, bis er wieder
beim Bootloader angekommen ist. Startadresse der Applikation ist immer
0.
Aber springt denn der Bootloader auch dahin? Nach einem Reset startet
der Bootloader. Dafür sorgt die Bootloader-Fuse. Dann muß der Bootloader
entscheiden, ob ein Upload erfolgen oder die Applikation starten soll.
mfg.
Sorry, ist mein erster Bootloader... und ich verzweifle schon seit
Tagen...
Nochmal von vorn:
Aktuell habe ich nen ATMEGA8 und nen Bootloader mit 512Words.
Die Fuses sind OK.
Ich habe -Ttext=0x1800 und -Ttext=0x0c00 probiert, leider habe ich keine
Ahnung, wo man die Werte her bekommt.
Ich denke mal Flash-Speicher-Bootloader...
Bei beider Varianten kann ich den Bootloader aufspielen und starten.
Aber mein Programm startet nicht.
Gibt es kein Test-Programm ?
B.A. schrieb:> Aktuell habe ich nen ATMEGA8 und nen Bootloader mit 512Words.>> Ich habe -Ttext=0x1800 und -Ttext=0x0c00 probiert, leider habe ich keine
0x0e00 ist bei 512 Worten korrekt. Siehe Datenblatt.
Passt dein Bootloader in 512 Worte = 1024 byte?
Falls es nicht klappt, lies doch mal das Flash aus, nachdem du erst nur
den Bootloader geladen und dann nochmal, nachdem du deine Applikation
via Bootloader geladen hast.
Thomas Eckmann schrieb:> Michael H. schrieb:>> Wenn er die Applikation an einer falschen Adresse im Flash vermutet und>> diese Adresse dann anspringt, kann auch ein Reset ausgelöst werden.> Ein Reset wird nicht ausgelöst.> Der rauscht halt einfach durch die FFs des leeren Flash, bis er wieder> beim Bootloader angekommen ist. Startadresse der Applikation ist immer> 0.
Da hast du völlig Recht.
B.A. schrieb:> OK, ich probier es mal mit 0x0e00
Probier' das gar nicht erst aus. Das funktioniert so nicht.
Das ist die Word-Adresse, die der Atmega adressiert. Im Linker muß aber
die Byteadresse eingestellt werden: Wordadresse x 2.
Also 0xE00 x 2 = 0x1C00.
Die Befehle zum Beschreiben des Flash funktionieren auch nur im
Bootsektor!
B.A. schrieb:> Ich habe -Ttext=0x1800 und -Ttext=0x0c00 probiert, leider habe ich keine> Ahnung, wo man die Werte her bekommt.
Mit rumprobieren wird das auch nichts.
Das lässt sich auch ganz einfach ausrechnen:
Atmega = 8K Flash = 8192 Bytes
8K Flash -1K Bootsektor = 8192 - 1024 = 7168
macht in Hex 0x1C00
mfg.
ich komme hier irgendwie nicht weiter...
Anbei der gelesene Speicher des ATMEGA8.
Irgendwas stimmt da nicht, oder ?
Muß Ich noch etwas einstellen, um den Bootloader an diese Adresse zu
speichern ?
Thomas Eckmann schrieb:> Das ist die Word-Adresse, die der Atmega adressiert. Im Linker muß aber> die Byteadresse eingestellt werden: Wordadresse x 2.
heute ist nicht mein tag...
B.A. schrieb:> Muß Ich noch etwas einstellen, um den Bootloader an diese Adresse zu> speichern ?
Ja natürlich. Woher soll der Compiler denn wissen, daß das ein
Bootloader ist, der bei 0x1C00 anfängt? Der Compiler muß das auch nicht
wissen, aber der Linker.
Thomas Eckmann schrieb:> Da steht alles drin, was du wissen musst:> http://www.mikrocontroller.net/articles/AVR_Bootlo...
Soll dir das jetzt einer vorlesen?
Da steht,was du machen musst:
Schritt 1 - Konfiguration der Projekteinstellungen
mfg.
Ich bitte vielmals um Entschuldigung für die blöden Fragen...
Aber trotzdem vielen Dank für eure Hilfe ;-)
Wenn man etwas kann, ist es sehr leicht über jemanden zu spotten...
Aber dafür ist dieses Forum ja da.
Ich mache sowas eben nicht jeden Tag und deswegen bin ich froh, dass es
euch hier gibt ...
Vielen DANK...
B.A. schrieb:> Wenn man etwas kann, ist es sehr leicht über jemanden zu spotten...> Aber dafür ist dieses Forum ja da.
Es spottet niemand über dich. Und das Forum ist auch nicht dazu da.
Aber ich habe dir schon um 22.12 den Link geschickt, wo ziemlich am
Anfang genau die Lösung dessen beschrieben ist, was dich seit du damit
angefangen hast, verzweifeln lässt.
Lies' dir das einfach durch. Dann verstehst du das auch.
mfg.