Forum: Mikrocontroller und Digitale Elektronik Flash-Tool für LPC43xx Mikrocontroller


von Sven B. (scummos)


Lesenswert?

Hallo!

Kennt jemand von euch ein Tool für Linux, mit dem man ein vorhandenes 
hex/bin/elf-Programm auf einen LPC4330-Mikrocontroller flashen kann? Ich 
habe USB und Seriell als Schnittstellen zur Verfügung.

Eine nun schon etwas längere Google-Suche hat leider nur irgendwelchen 
Windows-GUI-Kram zu Tage gefördert.

Danke und Gruß,
Sven

von Sven B. (scummos)


Lesenswert?

Ah, anscheinend kann lpc21isp das seit neuerem. Hat sich somit wohl 
erledigt, sorry :-)

von Sven B. (scummos)


Lesenswert?

Das heißt, theoretisch kann es das, in der Praxis funktioniert das 
irgendwie nicht so. Anscheinend schreibt es auf Adresse 0, der Flash ist 
aber nur bei 0x1A000000 verfügbar. Wenn man das korrigiert geht es im 
Prinzip, mein Code läuft allerdings trotzdem nicht -- weiß jetzt nicht 
ob das am Flash-Tool oder am Code liegt. Es zeigt jedenfalls dass das 
Tool für diesen Zweck nicht besonders gut getestet ist ...
Insofern wäre ich immer noch für Vorschläge anderer Tools dankbar.

von Achim K. (aks)


Lesenswert?

Beim LPC Expresso bzw. "Lab Tool" ist ein Programm "dfu-util" dabei 
(gibt es auch für linux). Versuch es mal damit (bzw. google ob es für 
Dich auch passen könnte).

von Sven B. (scummos)


Lesenswert?

dfu-util tut leider nicht, das sollte den Chip ja erkennen, wenn ich den 
USB-Boot-Modus aktivere durch Setzen der entsprechenden Pins, macht es 
aber nicht. Keine Ahnung, woran das liegt.

von Achim K. (aks)


Lesenswert?

Ist die Schaltung ein "Eigenentwicklung" oder ein "Fertigprodukt"?

Hast Du es (versuchsweise) als linux "su" versucht (manchmal muss man 
mit den USB-rules die Rechte korrigieren und dass dann für beide UIDs)?

Was gibt lsusb bzw. dmesg aus, wenn Du den LPC4330 anschließt?

von Achim K. (aks)


Lesenswert?

Nur für den Fall, meine /etc/udev/rules.d für den LPC4370 (Ubuntu 14)
1
# Allow group plugdev to access the LabTool Hardware (1fc9:0018)
2
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0018", MODE="664", GROUP="plugdev"
3
4
# Allow group plugdev to access the LPC DFU device (1fc9:000c)
5
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="000c", MODE="664", GROUP="plugdev"

Man muss beide product ids (für den LPC4370 / LabTool also 0018 und 
000c) eintragen. Falls Du USB nur zum Programmieren brauchst und Deine 
Applikation USB nicht nutzt, brauchst Du natürlich nur die vom DFU mode.

von Sven B. (scummos)


Lesenswert?

Hi!

Danke für die Hilfe. Bei dem Board handelt es sich um eine 
Eigenentwicklung.

Leider sehe ich den Chip am USB gar nicht; ich ziehe P1_1 und P2_8 auf 
High, P2_7, P2_9 und P1_2 auf Low, und stecke dann den USB-Stecker neu 
(und damit auch die Stromversorgung). lsusb oder dmesg zeigen keine 
Reaktion, dfu-util findet nix.

In dieser Konfiguration funktioniert auch das Programmieren über die 
serielle Schnittstelle nicht, nur wenn ich P1_1 und P2_8 (die schon auf 
der Platine miteinander verbunden sind) auch auf Low ziehe, geht es. Die 
elektrischen Verbindungen für die Boot-Pins scheinen also zu stimmen. 
Bleibt nur ein Problem mit dem USB, oder dass ich einfach zu blöd bin. 
Hmmm...

Grüße,
Sven

von Sven B. (scummos)


Lesenswert?

Gerade nochmal nachgemessen, mein USB ist richtig verkabelt -- DP and 
D+, DM an D-, GND und VCC sind auch richtig herum sonst würde der 
Controller gar nicht laufen. Ich habe zwischen dem Host-Stecker vom 
Kabel und den Pins vom uC gemessen, also das passt auch wirklich alles. 
Mir ist nicht klar, warum das Ding am Computer nicht auftaucht.

Überhaupt finde ich aus dem User Manual auch nicht ersichtlich ob das 
DFU-Zeug im Standard-Bootloader schon drin ist oder ob man sich das 
selber schreiben muss.

: Bearbeitet durch User
von Achim K. (aks)


Lesenswert?

Wenn ich mein LPC-Link2 (LPC4370) einstecke meldet dmesg:
1
usb 1-2: new high-speed USB device number 9 using ehci-pci
2
usb 1-2: New USB device found, idVendor=1fc9, idProduct=000c
3
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
4
usb 1-2: Product: LPC
5
usb 1-2: Manufacturer: NXP
6
usb 1-2: SerialNumber: ABCD

und lsusb
1
Bus 001 Device 009: ID 1fc9:000c NXP Semiconductors


und dfu-tool -l
1
dfu-util 0.7
2
3
Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc.
4
Copyright 2010-2012 Tormod Volden and Stefan Schmidt
5
This program is Free Software and has ABSOLUTELY NO WARRANTY
6
Please report bugs to dfu-util@lists.gnumonks.org
7
8
Found Runtime: [1fc9:000c] devnum=0, cfg=1, intf=0, alt=0, name="DFU"

Ohne das dmesg Dein Board zeigt, wird das dfu-tool auch nichts finden. 
Ob man dazu zuerst ein Boot-Programm flashen muss, weiß ich leider 
nicht. Meine Boards sind keine Eigenentwicklungen.

Tippen würde ich aber auf USB Probleme im "Eigenbau" und, dass das 
Boot-Programm für's dfu-tool im ROM des Prozessors ist.

von Achim K. (aks)


Lesenswert?

In LPC4370.pdf steht unter
1
7.13 Boot ROM
2
...
3
Includes a flexible USB device stack that supports Human Interface Device (HID), Mass Storage Class (MSC), and Device Firmware Upgrade (DFU) drivers.
4
5
Several boot modes are available depending on the values of the OTP bits BOOT_SRC. If the OTP memory is not programmed or the BOOT_SRC bits are all zero, the boot mode is determined by the states of the boot pins P2_9, P2_8, P1_2, and P1_1.
1
Table 5. Boot mode when OPT BOOT_SRC bits are zero
2
Boot mode Pins                 Description
3
          P2_9 P2_8 P1_2 P1_1
4
USART0    LOW  LOW  LOW  LOW   Boot from device connected to USART0 using
5
                               pins P2_0 and P2_1.
6
SPIFI     LOW  LOW  LOW  HIGH  Boot from Quad SPI flash connected to the
7
                               SPIFI interface on P3_3 to P3_8[1].
8
...
9
USB0      LOW  HIGH LOW  HIGH  Boot from USB0
10
USB1      LOW  HIGH HIGH LOW   Boot from USB1.
11
...

Vielleicht findest Du doch auch Angaben in der Doku zu Deinem Prozessor.

von Sven B. (scummos)


Lesenswert?

Ich habe keinen 4370, sondern einen 4333, ich glaube die sind ziemlich 
unterschiedlich, oder? Der 4370 kann viel mehr.

Die Boot-Pins sind soweit aber gleich, ich habe die so gesetzt dass 
"Boot from USB0" erfüllt ist. Und ich bin auch recht sicher, dass das 
elektrisch so passt (also dass tatsächlich die Spannungen für "Boot from 
USB 0" anliegen).

Probleme mit USB sind gut möglich, aber die Initialisierung passiert 
immer im Low-Speed, oder? Das sollte auf jeden Fall hinhauen ... oder 
was kann da schief gehen?

Inzwischen hab ich's immerhin geschafft, dass das Ding Code ausführt dem 
ich ihm über Serial schicke, das ist schonmal gut.

Grüße,
Sven

von Sven B. (scummos)


Lesenswert?

Ah, sieht so aus als ob man das VBUS verbinden muss für den 
USB-Bootloader. Gleich mal probieren.

von Sven B. (scummos)


Lesenswert?

Nö, habe den Pin über 10k an VBUS gehängt, hat nichts geändert. Komisch.

Vielleicht brauche ich noch einen Takt oder so, kann das sein? Ich habe 
nur einen Quarz an den X0 und X1-Pins.

Edit: Ah doch, da ist er:
1
[114822.575298] usb 2-1.1: new full-speed USB device number 9 using ehci-pci
2
[114822.641807] usb 2-1.1: device descriptor read/64, error -32

Mal sehen woran das liegt ;)

: Bearbeitet durch User
von Sven B. (scummos)


Angehängte Dateien:

Lesenswert?

Hab' mal nachgemessen, es kommen ungefähr 90 Frames der Form des ersten 
Bilds -- das sieht ja okay aus -- und danach das sehr merkwürdige Muster 
im zweiten Bild. Die Fehlermeldung ist immer so reproduzierbar. Ich bin 
momentan etwas ratlos woran das liegt, erstmal bisschen nachdenken ;)
Vielleicht hat ja in der Zwischenzeit jemand eine Idee.

von Sven B. (scummos)


Lesenswert?

Ah, USB DFU braucht einen 12 MHz Crystal, meiner hat 4. Ich vermute mal 
deshalb geht es nicht, bzw. das ist zumindest einer der Gründe, aus dem 
es nicht geht :-)

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.