Forum: Mikrocontroller und Digitale Elektronik Bootloader Infos?


von Andreas E. (andrease112)


Lesenswert?

Hallo Leute,
ich habe vor einen Bootloader zu schreiben.
Dafür habe ich folgendes gemacht.
Über meine Applikation wird das gesamte Hex-File in ein externes
EEPROM geladen und danach sollte der Bootloader starten.

Im Bootloader wird nun das EEPROM laut INTEL HEX Definition geparst.

Ich habe nun gelesen, dass das beschreiben des Flashes irgendwie
Seitenweise funktioniert.

Wie bekomme ich denn die Page Nr aus dem Hexfile ? oder kann ich einfach 
sagen
0..63   -> Page 1
64..127 -> Page 2 ... ?

von Andreas E. (andrease112)


Lesenswert?

natürlich die Daten aus dem Hexfile  0..63 und 64..127 ...

von Ralf (Gast)


Lesenswert?

Ich würde schon beim Empfang parsen, da du ansonsten mehr als das 
doppelte an Speicher brauchst. Desweiteren würde ich auf den Umweg des 
externen Speichers verzichten, und direkt ins Flash schreiben.

Ralf

von Andreas E. (andrease112)


Lesenswert?

Ja ich weiss, wenn ich auf den ganzen Scheiss drumherum verzichten 
könnte wär gut.
Das Problem ist folgendes ich bekomme die Daten über CAN und wollte den 
CAN treiber nicht auch noch in den bootloader einbauen, so hab ich nur 
den I2C treiber drin.
Aber trozdem war das von dir keine richtige Antwort ^^

von Gast (Gast)


Lesenswert?

Du bist ja nicht der erste der einen Bottloader schreibt (schreiben 
will). Hast du dir mal ein anderes Projekt angeschaut?

von Andreas E. (andrease112)


Lesenswert?

Ja klar .... aber da ist die meiste Arbeit schon getan PageNr einlesen, 
64 Bytes einlesen , Page löschen , Page schreiben aber wo jetzt das 
alles aus dem Hexfile herkommt habe ich nicht gefunden

von Bernhard M. (boregard)


Lesenswert?

Im HEX-File stehen doch Adressen, die musst Du dann halt selbst auf die 
Page mappen. Und daran denken, daß die Daten im HEX File nicht 
aufeinander folgen müssen (nur innerhalb einer Zeile), d.h. für die Page 
musst Du die Daten evtl. noch sortieren (normalerweise machen das die PC 
Programme zu den Bootloadern....)

von Peter D. (peda)


Lesenswert?

Ein Hex-File parsen ist nix für nen MC.
Die Recordlänge hat nix mit der Pagegröße zu tun und kann 0 ... 255 Byte 
betragen.
Die Record-Reihenfolge ist so, wie der Linker gerade lustig ist, als 
nicht in aufsteigenden Adressen.

Du mußt also einen Zwischenspeicher (SRAM) haben mit der maximalen Größe 
des Binärfiles und darin werden dann alle Records eingeschrieben. Danach 
kannst Du diesen Puffer in die Pages flashen.


Peter

von Purzel H. (hacky)


Lesenswert?

Ein Hexfile zu parsen ist megatrivial. Man kann's eigentlich direkt in 
das Flash schreiben. Falls noetig kann man ja im PC das HexFile ordnen. 
Auch das ist nicht schwierig.

von Peter D. (peda)


Lesenswert?

Schoener Tag heute schrieb:
> Ein Hexfile zu parsen ist megatrivial. Man kann's eigentlich direkt in
> das Flash schreiben.

Ne, das ist recht tricky.
Ein Hexrecord muß nicht an Pagegrenzen beginnen, d.h. er kann 2 Pages 
beinhalten.
Man muß dann eine Page auslesen, den zu ändernden Teil mit dem passenden 
Teil des Hexrecords überschreiben, zurückflashen und mit dem restlichen 
Teil des Hexrecords das Ganze nochmal.


> Falls noetig kann man ja im PC das HexFile ordnen.

Warum dann nicht gleich als Binärfile schreiben?


Peter

von Andreas E. (andrease112)


Lesenswert?

Wenn ich mir einen Teil des Hex Files so anschaue :
1000000019C033C032C034C630C01EC52EC02DC08A
100010002CC02BC02AC029C028C027C026C025C09C
10002000ABC523C022C021C020C01FC01EC01DC040
100030001CC01BC011241FBECFEFD4E0DEBFCDBF5C
1000400011E0A0E0B1E0EAE8F1E102C005900D9214
10005000A430B107D9F711E0A4E0B1E001C01D92CE
10006000A33BB107E1F75CD28EC8CACF9C01F999D6
10007000FECF1FBA32BD21BD60BD0FB6F894FA9A0B
10008000F99A0FBE08959F92AF92BF92CF92DF92DE
10009000EF92FF920F931F93DF93CF93CDB7DEB70D
1000A00028970FB6F894DEBF0FBECDBF80917401C4
1000B000882309F4AAC1909068018FEF981609F07F
1000C00047C0809169018F3F09F09DC18093320143
1000D00080933301F999FECF81E190E092BD81BD1B
1000E000F89A80B580933401F999FECF82E190E0CF
1000F00092BD81BDF89A80B580933501F999FECF04
1001000083E190E092BD81BDF89A80B5809336017D
100110008EE291E065D290916A0180913401981746
1001200009F071C190916B0180913501981709F028
100130006AC190916C0180913601981709F063C1F2
1001400080916D01813009F05EC1809305015BC132

sieht die Adresse linear aus. d.h ich kann doch nun 64 byte weise die 
pages von 0 - ende beschreiben ?

von Andreas E. (andrease112)


Lesenswert?

Also wenn ich das richtig verstehe,
sollte ich anhand der Adressen zusammenhängende 64 Byte große Pages
erstellen (auf der PC SEITE )  bevor ich diese ins EEPROM hau, welche 
ich dann nach dem EEPROM einfach in den Flash schreibe ?

von Bernhard M. (boregard)


Lesenswert?

Andreas Engler schrieb:
> Wenn ich mir einen Teil des Hex Files so anschaue :
> ...
> sieht die Adresse linear aus. d.h ich kann doch nun 64 byte weise die
> pages von 0 - ende beschreiben ?

dieses ja, da das aber nicht so spezifiziert ist, kann das jedes 
Programm schreiben wie es will...

von Andreas E. (andrease112)


Lesenswert?

wie kann ich denn im AVR Studio die FlashAdresse einstellen, damit der 
BL auch an die richtige stelle kommt ?

von MeinerEiner (Gast)


Lesenswert?

Lass dir mal von nem grösseren Projekt z.B. aus Keil µVision ne .hex 
raus... da is nix mehr mit linear.

von Andreas E. (andrease112)


Lesenswert?

okay das problem ist ja längst gelöst, nurwenn ich im AVR Studio Memory 
options type= flash, name .hex und adress 0xc00, einstelle fängt die 
Adresse im  Hexfile trotzdem bei 0 an kann ja wohl nicht ist oder ?

von Andreas E. (andrease112)


Lesenswert?

ok das prob iss gelöst nicht .hex-> .text,
aber wie komme ich vom BTL in die Application ??

von klaus (Gast)


Lesenswert?

Im Intel Hex Format gibt es verschiedenen Record-Typen. Ein Record-Typ 
wird verwendet um den Entry-Point der Anwendung zu speichern. Diesen 
Record must du beim bootloaden auswerten und dir die Adresse (den 
Entry-Point) merken. In deinem Bootloader kannst du dann nachdem alles 
geladen wurde einen Sprung an diese Adresse ausführen (z.B. über 
Dereferenzieren eines Funktionspointers, in den du die gewünschte 
Adresse schreibst).

von Andreas E. (andrease112)


Lesenswert?

bzw umgekehrt? kann ich über watchdog reset in den btl ?

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.