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
Ah, anscheinend kann lpc21isp das seit neuerem. Hat sich somit wohl
erledigt, sorry :-)
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.
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).
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.
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?
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.
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
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.
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.
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.
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
Ah, sieht so aus als ob man das VBUS verbinden muss für den
USB-Bootloader. Gleich mal probieren.
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 ;)
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.
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.
|