Forum: Mikrocontroller und Digitale Elektronik Unterschiede bei .hex und .bin für LPC812


von Daniel W. (danila)


Angehängte Dateien:

Lesenswert?

Hallo,
ich möchte eine .hex Datei über den in LPC812 eingebauten ISP Bootloader 
einspielen. Dazu konvertiere ich sie vor dem Veschicken in das binäre 
Format. Das Konvertieren und Flashen funktioniert soweit auch ganz gut. 
Das Problem ist, dass der Code nach dem Reset nicht ausgeführt wird.

Also habe ich mir die von LPCXpresso generierten .bin und .hex Dateien 
angeschaut. Das erste, was mir aufgefallen ist, ist der Wert 0x49EDFFEF 
in der .bin Datei bei adress 0x1C. In der .hex Datei ist dieser Bereich 
mit Nullen gefüllt. Wenn ich nur diese Stelle in der hex Datei ändere 
und die Checksumme für die Zeile aktualisiere, wird der Code 
ausgeführt...

Wie bekomme ich diesen Wert aus der Hex Datei raus? Oder ist der Wert 
Hardware-spezifisch für den LPC8xx?
In der Hex Datei gibt es noch in der vorletzten Zeile den "Start Segment 
Address Record", den ich aber wie die meisten hex2bin Konverter 
ignoriere.

von Lothar (Gast)


Lesenswert?

Daniel W. schrieb:
> ich möchte eine .hex Datei über den in LPC812 eingebauten ISP Bootloader
> einspielen. Dazu konvertiere ich sie vor dem Veschicken in das binäre
> Format

Was verwendest Du zum Flashen? http://www.flashmagictool.com/ kann HEX 
direkt runterladen. Zudem kann man checken, ob der Bootloader wirklich 
läuft, und zum Programm einen Verify machen.

von Daniel W. (danila)


Lesenswert?

Ich habe meinen eigenen Flasher geschrieben, weil er direkt in eine 
etwas größere Anwendung integriert wird. Deshalb geht es mir hier eher 
um das Verständnis, woher der Wert aus der Binärdatei kommt...

von Jürgen (jliegner)


Lesenswert?

Die NXP Controller benötigen an der Adresse 0x1C eine CRC ueber die 
ersten Bytes in der Vectortabelle. Wenn das nicht uebereinstimmt, 
springen sie direkt in den Bootloader. Da die IDEs sowas in der Regel 
von allein machen, kriegt man das erst mit wenn man drauf reinfällt. Ich 
kenne den LPC812 zwar nicht, denke aber das ist da auch so. Keil z.B. 
macht das immer beim Flashen von alleine.
Ich benutze Crossworks und die machen das ueber ein tool mit dem Namen 
crossscript.exe. Der JS-Code dazu ist:
1
function patch(filename)
2
{
3
  backupFilename = filename + ".prepatch";
4
  CWSys.removeFile(backupFilename);
5
  CWSys.renameFile(filename, backupFilename);
6
  ElfFile.load(backupFilename);
7
8
  // das ist der Teil der die CRC erzeugt und ins 
9
  // elf-File einbaut
10
  crc = 0;
11
  for (i = 0x00; i < 0x1C; i += 4)
12
    crc += ElfFile.peekUint32(i);
13
  ElfFile.pokeUint32(0x1C, ~crc + 1);
14
15
16
  ElfFile.save(filename);
17
}

Wenn du nur mit hex- und bin-Files umgehst sollte sich das einfach durch 
ein kleines Programm lösen lassen. Vielleicht kennt ja jemand was 
fertiges.

von Daniel W. (danila)


Lesenswert?

Das war des Rätsels Lösung. :) Danke Jürgen

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.