Programmieren Sie LPC1343 über den USB-Bootloader mit dem richtigen Dateiformat

Es fällt mir wirklich schwer, meinen LPC1343 mit der in dieser Frage erwähnten Methode zu programmieren ( Kann ein LPC1343 sein ursprüngliches Programm über USB akzeptieren? ).

Ich verwende eine Linux-Maschine und arm-none-eabi-gcc. Ich habe meinen Code erfolgreich kompiliert, um eine LED zu blinken, und dann bekomme ich meine .elf-Datei und verwende arm-none-eabi-objcopy, um sie in das endgültige Format zu konvertieren. Dann bekomme ich diese Datei auf einen USB-Stick und in eine Windows-Maschine, und dort kopiere ich sie über die USB-Schnittstelle auf meinen LPC1343.

Mein Problem ist, dass, nachdem ich den Chip ausschalte und in den Run-Modus gehe, er automatisch wieder in den USB-Bootloader-Modus zurückkehrt, was bedeutet, dass er die Datei nicht erkannt hat. Folgende Formate habe ich probiert:

  • elf32-littlearm
  • elf32-bigarm
  • elf32-klein
  • elf32-groß
  • Plugin
  • srec
  • Symbolerec
  • Verilog
  • Techhex
  • binär
  • ihex.

Hat jemand diesen Chip erfolgreich über USB vorprogrammiert? Wenn ja, welches Dateiformat wurde verwendet?

Nicht als "Antwort" auf Ihre Frage gedacht, aber obwohl der von Ihnen beschriebene Prozess für die endgültige Bereitstellung sinnvoll sein könnte, gibt es sicherlich ein effizienteres Schema für die Entwicklung - z. B. die native Ausführung unter Linux, die Verwendung von SWD oder eines UART-Bootloaders oder Windows sogar in einer virtuellen Maschine mit freigegebenen Ordnern ausführen?
Ich war zu genervt von diesem USB-Tanz (es funktionierte, war aber ziemlich unzuverlässig), also fügte ich meinem eine serielle Schnittstelle hinzu ( olimex.com/Products/ARM/NXP/LPC-P1343 ).
Muito Obrigado @Ricardo .
@Electropepper - Für die Bearbeitung? Kein Problem! Ich sehe, dass du deine Antwort bekommen hast. Cool!
@starblue wir müssen uns definitiv unterhalten, aber die serielle Schnittstelle lässt das ROM des Chips sowieso nicht programmieren, oder doch?

Antworten (1)

Die Datei ist eine reine Binärdatei. Die ersten vier Bytes sind also der anfängliche Stapelzeigerwert, die nächsten vier Bytes sind der anfängliche Programmzähler, und die Interrupt-Vektoren folgen. Als Beispiel sind hier die ersten 32 Bytes einer bekanntermaßen funktionierenden Datei:

00 08 00 10 99 3c 00 00 21 40 00 00 25 40 00 00
29 40 00 00 2d 40 00 00 31 40 00 00 9a 7a fe ef

Das an Adresse 0x1C (siebtes Wort) gespeicherte Wort ist eine Prüfsumme der ersten sechs Wörter. Siehe Abschnitt 21.7 im LPC13xx-Benutzerhandbuch für Einzelheiten. Beim LPC1343 hat die Datei genau die gleiche Größe wie der Flash: 32768 Bytes.

[Shameless Plug] Ich habe dafür ein triviales C-Programm geschrieben: bitbucket.org/jpc/nxpsum . Sie können es nützlich finden.
Ich habe dieses Board von Olimex gekauft und habe nur USB-Bootloader oder SWD, aber nach dem, was ich gelesen habe, kann ich es nicht mit SWD programmieren. Was ist also das Format, das ich zum Konvertieren der Datei benötige, um sie in den USB-Ordner kopieren zu können? Liegt es vielleicht nicht am Format, sondern an meinem Code, der nicht funktioniert? Ps - Ich verwende eine virtuelle Maschine mit freigegebenen Ordnern, um die Datei auf das Windows-System zu verschieben.
@Electropepper Ich verstehe Ihre Folgefrage zum Format nicht. Das Format ist einfach binär und jpc hat ein Programm angeboten, um es zu generieren. Ich glaube nicht, dass Sie SWD nicht verwenden können, aber es stimmt, dass Sie JTAG nicht mit einem LPC1343 verwenden können. Welches Board verwendest du?
Vielen Dank, jpc und Joe Hass, diese Prüfsumme war in der Tat alles, was mir gefehlt hat. Ich kann jetzt endlich mit diesem Gerät arbeiten, obwohl ich weiß, dass ich so viel verstehe, was @starblue über den USB-Tanz sprach.