Forum: Mikrocontroller und Digitale Elektronik EVK1101 Hex Bootloader


von Marvin S. (Gast)


Lesenswert?

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

von tom (Gast)


Lesenswert?

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;

von Marvin S. (Gast)


Lesenswert?

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?

von tom (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.