Hi, Anbei ein Python Script um den LPC810 über die serielle Schnittstelle bzw einen USB Adapter zu flashen. Die ursprüngliche Version habe ich bei http://midibel.com gefunden und noch ein wenig erweitert. Vielleicht kann es ja der ein oder andere brauchen..... Axel
Hallo, es gibt eine neue Version, mit dem Parameter "-r" wird jetzt am Ende ein Reset ausgeführt. Damit wird dann nach dem Flashen gleich das neue Programmm gestartet und das lästiger drücken des Reset Tasters entfällt.
1 | $ make && flushmagic.py -p /dev/ttyUSB1 -r blink.bin && picocom -b 115200 /dev/ttyUSB1 |
Zusammen mit einem UART Interrupt handler, der ein "r" für Reset und ein "i" für ISP-Reset versteht , lässt sich dann jegliche Interaktion mit der Platine vermeiden (zumindest solange das Programm läuft):
1 | typedef void (*IAP)(uint32_t*, uint32_t*); |
2 | #define IAP_ENTRY ((IAP)0x1fff1ff1) |
3 | |
4 | void intHdl_UART0(void) |
5 | { |
6 | if (0 != (LPC8xx_UART->stat & UART_STAT_RXRDY)) |
7 | { |
8 | char c = (char)(LPC8xx_UART->rxDat) |
9 | switch (c) |
10 | { |
11 | case 'r': // reset |
12 | LPC8xx_SCS->AIRCR = 0x05fa0004; |
13 | for(;;) { } // Loop forever as fail safe option |
14 | break; |
15 | |
16 | case 'i': // reset into ISP |
17 | { uint32_t cmd = 57; |
18 | IAP_ENTRY( &cmd, NULL); } |
19 | break; |
20 | } |
21 | } |
22 | } |
:
Bearbeitet durch User
Irgendwoher kenn ich das... ;-) Tja, deine Frage mit dem halb-schrottigen 'G' Kommando werde ich mir demn"achst auch noch mal ansehen. Warum verwendest Du nicht die RTS und DTR signale, die auf vielen Boards zu finden sind?
Hi, RTS und DTR? Kann der LPC810 das überhaupt <g>? Seit dem FTDI/USB ist doch nur noch RX und TX interessant. Und DTR uns RTS kosten 2 PINs mehr von den 8. Das ist echt teuer dann. So kann man wenigstens den Reset Pin auch nutzen... Peter
Sorry, ich war schlampig. Ich dachte das ist f"ur LPC800 (im Sinne von LPC810/811/812). Bei 8 Pins wird's echt eng. Da muss man RESET ja schon fast "uber power-cycling machen ;-)
Hallo, also lt. LPC81x User Manual Kapitel: * Der LPC81x kennt kein explizites DTR, die Switch Matrix hat neben U0_TXD_O, U0_RXD_I nur noch U0_RTS_O und U0_CTS_I * Im Kapitel "22.3 Pin description" steht nur, dass PIO0_0/U0_RXD und PIO0_4/U0_TXD benutzt wird vom Bootloader. Marc, hast du da noch mehr Doku oder gar den Bootloader mal disassembliert? Unter http://midibel.com/bootrom-4.13.S ist ein dump zu finden, aber so ganz ohne Symbole ist das schon hart und ich hab irgendwann die Lust verloren... Axel
@Axel: nee, vergiss es. Ich meinte ueber Hardware DTR -> /RESET, RTS -> /BOOT. Ich denke zu sehr an die Familie LPC800 als an den expliziten LPC810 (DIP8). Kontextfehler. Bei 16 oder 20 Pins kann man schon mal 2 opfern, bei 8 wohl eher nicht. Geht dein Script auch bei den anderen LPC81X ?
Ahh...klick...das mit dem DTR -> /RESET, RTS -> /BOOT ist eine gute Idee. Werde des das mal notieren und ggf als weitere Option in das Script einbauen. Mir sind nur leider die PIN ausgegangen, so dass ich den Reset als GPIO brauche. Muss mir jetzt doch mal ein paar LPC812 besorgen. Ich hab bisher nur die LPC10 DIP8 da zum testen, es sollte aber mit den anderen auch gehen, da das Protokoll gleich ist. Das Script hat auch keinen Test auf die Flash-Grösse drinnen, sollte also alles nehmen. In getPartName() habe ich nur die ID from LPC810 drinnen, die anderen sind auskommentiert bis die jemand verifiziert hat. Axel
Hi Axel, bei mir gibts Probleme in Zeile 108. Ich hab da mal aus dem Bauch heraus Klammern rum gemacht, scheint dann OK zu sein. Aber wo bekomm ich das Modul 'serial' her? Ich hab wohl eine spartanische Installation...
Siehe http://pyserial.sourceforge.net/pyserial.html#installation oder bei Ubuntu das Packet "python-serial" installieren. Wegen Zeile 108: ggf. ist Pyhton bei dir neuer und mag print() nur noch als funktion? Ist aber eh sauberer mit den Klammern.
Es gab mit Python 3.3 einige Probleme. Anbei eine Version, die damit auch laufen sollte. Leider kann ich das momentan bei mir nicht testen, aber vielleicht könnte mir jemand eine Rückmeldung gehen. Axel
Hi Axel, ich habe mit einem LPC812 getestet (Tim's (cpldcpu) breakout-board). Dabei ist mir eingefallen, dass mit mxli 115200 baud zu schnell sind, sofern echo on (CMD 'A') ist. Ohne echo packt's der LPC. Ich denke das ist diesselbe Sache, die von 'capiman' als Verdacht f"ur zu langsame Antwort des LPC mal in den Raum gestellt wurde.
Nächste Version bekommt dann noch einen "-b BAUDRATE" Parameter, mit dem sich das anpassen lässt.
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.