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 ... ?
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
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 ^^
Du bist ja nicht der erste der einen Bottloader schreibt (schreiben will). Hast du dir mal ein anderes Projekt angeschaut?
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
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....)
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
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.
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
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 ?
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 ?
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...
wie kann ich denn im AVR Studio die FlashAdresse einstellen, damit der BL auch an die richtige stelle kommt ?
Lass dir mal von nem grösseren Projekt z.B. aus Keil µVision ne .hex raus... da is nix mehr mit linear.
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 ?
ok das prob iss gelöst nicht .hex-> .text, aber wie komme ich vom BTL in die Application ??
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.