BOOTLOADER aus HEX-File

Gast #2401009
Lesenswert?

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...
Gast #2401032
Lesenswert?

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.
Gast #2401036
Lesenswert?

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 ?
Gast #2401043
Lesenswert?

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
#2401051
Lesenswert?

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?
#2401052
Lesenswert?

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?
Gast #2401066
Lesenswert?

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...
Gast #2401079
Lesenswert?

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...
#2401096
Lesenswert?

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.
#2401123
Lesenswert?

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.
Gast #2401136
Lesenswert?

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 ?
#2401141
Lesenswert?

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.
#2401156
Lesenswert?

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.
#2401170
Lesenswert?

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.
#2401181
Lesenswert?

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.
Gast #2401185
Lesenswert?

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...
#2401193
Lesenswert?

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.
#2401197
Lesenswert?

B.A. schrieb:
> Auf dem LINK kommt nur ne leere Seite...
> Und damit soll man was lernen ???

http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung#Schritt_1_-_Konfiguration_der_Projekteinstellungen

Das ist ja auch nur der Hinweis auf den Link oben. Hättest du schon 
lange angeklickt haben können. Der funktioniert nämlich. Und dieser 
auch.

B.A. schrieb:
> egal, welche Adresse ich reinschreibe,
> in der HEX-Datei fängt es immer bei 0000 an...
Wo schreibst du die Adresse denn hin?

mfg.

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