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.
:
Bearbeitet durch User
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 ;)
:
Bearbeitet durch User
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.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.