Hallo Leute, ich habe ein Board mit einem LPC1788 drauf. Im Normalfall benutze ich die LPCxpresso IDE, die ich eigentlich recht schick finde (wäre da nicht das Debuglimit von (mittlerweile) 256k :/ ). Wollte mir mit Eclipse und dem gcc-arm-none-eabi eine IDE selber basteln (hat für den STM32F4 bereits super funktioniert, bis auf ein paar Bugs mit dem Jlink-Plugin). Ich habe mich also eine Weile durch Datenblätter/User Guides gewälzt. Mir ist folgendes aufgefallen: Sowohl bei ARM, also auch in den Dokumenten von NXP steht, dass der interne Bootloader einen Checksum der Vektortabelle überprüft. Diese befindet sich an Adresse 0x1C im Flash. Ohne diese Checksum, wird der Code als invalide eingestuft und der Bootloader startet ihn nicht. Ist das korrekt? Ebenfalls hab ich mich durch die Makefiles von LPCxpresso und durch das Startup- und Linkerskript geklickt. Mir ist aufgefallen, dass im Startup Code die Vektortablle an der Stelle 7 (Adresse 0x1C) auf 0 gesetzt ist mit dem Kommentar "Reserved". Auch im Linkerskript und im Makefile taucht nichts auf, was auf eine Prüfsumme an dieser Stelle hinweist. Ich habe irgendwo im Internet gelesen, dass das ELF/AXF-File nach dem Build noch duch ein extra Programm gejagt wird, welches dann die Prüfsumme "reinpatcht". Das Makefile enthält aber keinen Befehl dazu. Ich finde das sehr merkwürdig und verstehe das nicht. (Der Compiler kann die Prüfsumme ja auch nicht reinmachen, da er nur weiß, dass es sich um einen Cortex M3 handelt und nicht weiß, dass er von NXP ist, oder? Das Projekt kompiliert in LPCXpresso und ist auch funktionsfähig. Mein letzter Ansatz wäre, dass sowohl der interne Bootloader, als auch der Segger Jlink beim programmieren diese Checksum "on the fly" einbauen. Kann mir dazu jemand was sagen? Die Informationen die man so findet sind leider so zerstückelt... Vielen Dank M.H.
M. H. schrieb: > Mein letzter Ansatz wäre, dass sowohl der interne Bootloader, als auch > der Segger Jlink beim programmieren diese Checksum "on the fly" > einbauen. Segger JLink flasher: Ja, Checksumme wird korrigiert. Bootloader: Nein! Für den seriellen Bootloader braucht es aber auch ein Programm zur Steuerung, welches dann normalerweise auch die Checksumme berechnen kann. Wenn man den in einigen NXP LPC vorhandenen USB-Mass Storage ROM Bootloader verwendet (keine Ahnung ob der im LPC1788 vorhanden ist), muss man die Checksumme vorher mit einem Tool berechnen lassen. Ein Beispiel ist im Code der R0ket (https://github.com/r0ket/r0ket) in der tools/bootloader/lpcfix.c Datei.
M. H. schrieb: > OK > > Vielen Dank :) Wenn du mal eine Demoversion von Crossworks installierst, ist da das Programm Crossscript enthalten. Das kann per js elf-Dateien patchen. Dazu habe ich folgenden kurzen js-Code: LPC1000_LinkPatch.js:
1 | function patch(filename) |
2 | {
|
3 | backupFilename = filename + ".prepatch"; |
4 | CWSys.removeFile(backupFilename); |
5 | CWSys.renameFile(filename, backupFilename); |
6 | ElfFile.load(backupFilename); |
7 | crc = 0; |
8 | for (i = 0x00; i < 0x1C; i += 4) |
9 | crc += ElfFile.peekUint32(i); |
10 | ElfFile.pokeUint32(0x1C, ~crc + 1); |
11 | ElfFile.save(filename); |
12 | }
|
und rufe das aus einer patchlpc.bat so auf: call i:\tools\crossscript.exe "load(\"i:/tools/LPC1000_LinkPatch.js\");patch(\"%1\");"
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.