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.
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):
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.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang