hallo zusammen, ich bin neu hier und hoffe ich kann hier antworten zu meinen fragen finden. ich arbeite momentan mit dem evk1101 und versuche schon seit einiger zeit einen hex bootloader zu schreiben. ich habe schon einen hex parser der ein hex file in seine einzelnen teile zerlegt. ich habe auch schon mit dem befehl flashc_erase_page(i, TRUE) den Flash gelöscht. jetzt mein problem: Wenn ich es richtig verstanden habe, muss ich den Flash pageweise schreiben. ich dacht ich kann die Adresse aus dem hex file auch als startadresse zum schreiben nehmen. hier läuft was bei mir schief. das alte Programm ist zwar fort aber das board startet nicht mehr richtig (led 0,1,3 nicht 2 leuchten). hat jemand schon Erfahrung mit dem schreiben eines hex bootloaders gemacht und kann mir weiter helfen? ich habe zwar schon Beiträge zum thema hex bootloader gefunden aber nicht speziell zum evk1101 bzw zum avr32uc3b. danke
mal als Beispiel : #define AVR32_FLASHC_PAGE_SIZE 512 // aus uc3a0512.h im FRAMEWORK findet man in d:\avr_32_work\test_flash\src\SOFTWARE_FRAMEWORK\DRIVERS\FLASHC\flashc.c d:\avr_32_work\test_flash\src\SOFTWARE_FRAMEWORK\DRIVERS\FLASHC\flashc.h volatile void *flashc_memcpy( volatile void * dst, const void * src, size_t nbytes, Bool erase ) so schreibt man z.B. 512 Byte in den Flash unsigned char buffer[ AVR32_FLASHC_PAGE_SIZE ]; volatile int ptr; // Zieladresse im Programmspeicher // ptr = 0x80008000; // 512 Byte in den Programmspeicher schreiben // flashc_memcpy( (char*)ptr, &buffer2, AVR32_FLASHC_PAGE_SIZE, TRUE ); ptr += AVR32_FLASHC_PAGE_SIZE;
hallo tom und vielen dank für deine schnelle Antwort. ich habe den code nach deinem Vorschlag angepasst und den flashc mal ausgelesen. ich wollte einfach mal ein hex file von einem programm mit dem Inhalt des flashc vergleichen. ich dachte immer ein hex Programm wird von ab der stelle 8000 eins zu eins auf den flashc geschrieben. beide Dateien sehen aber verschieden aus. weißt du was mit dem hex code beim schreiben auf den flashc passiert bzw warum dieser anders aussieht?
Hallo Marvin, Wenn ich Deine Antwort so lese habe ich den Eindruck Dir fehlen ein paar Infos zu HEX-Files. Hier mal das wichtigste in kürze : Len Adr Type Len[ Data ] CRC :02 0000 04 8000 7A <1 :08 0000 00 481F000080000024 ED <2 :10 0024 00 3007495A5BFAF40D1710494B494C183B F9 <3 :10 0008 00 EBCD404048261E26C04800007FFFFFF6 83 <4 :0C 0018 00 F0160001F0160000E3CD8040 5F :00 0000 01 FF <5 Das Hex-Format kann nur 64KB adressieren (Adr = 0x0000..0xFFFF) Um das zu umgehen wurde der Type 04 eingeführt. Zeile (<1) im Beispiel, er stellt eine Adresserweiterung bis zur naächsten Type 04 Zeile dar. ( z.B. oben 0x8000 + 0x0000 => 0x8000_0000 ) Das entspricht beim UC3 der Startadresse im internen Flash. Zeile (<2) mit den Daten 0x48 0x1F 0x00 usw. sind die Daten die im Flash landen sollen. Eine weitere Gemeinheit vom HEX-Dateien ist das die Adressen nicht der größe nach sortiert sein müßen, siehe Zeile (<3 == 0x8000_0024 und <4 == 0x8000_0008). Mit Zeile <5 endet eine HEX-Datei. ich hoffe das hilft weiter Tom
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.