mikrocontroller.net

Forum: Projekte & Code Python Script: LPC810 flashen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Axel H. (axelh)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
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

Autor: Axel H. (axelh)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.
$ 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):
typedef void (*IAP)(uint32_t*, uint32_t*);
#define IAP_ENTRY ((IAP)0x1fff1ff1)

void intHdl_UART0(void) 
{
  if (0 != (LPC8xx_UART->stat & UART_STAT_RXRDY))
  {
    char c = (char)(LPC8xx_UART->rxDat)
    switch (c)
    {
      case 'r': // reset
        LPC8xx_SCS->AIRCR = 0x05fa0004;
        for(;;) { } // Loop forever as fail safe option
        break;

      case 'i': // reset into ISP
        { uint32_t cmd = 57;
          IAP_ENTRY( &cmd, NULL); }
       break;
    }
  }
}

: Bearbeitet durch User
Autor: Marc P. (marcvonwindscooting)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Peter Z. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Marc P. (marcvonwindscooting)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;-)

Autor: Axel H. (axelh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Marc P. (marcvonwindscooting)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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 ?

Autor: Axel H. (axelh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Der Unlaut(ere) mit den Ga"nsef"usschen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Axel H. (axelh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Axel H. (axelh)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Marc P. (marcvonwindscooting)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Axel H. (axelh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nächste Version bekommt dann noch einen "-b BAUDRATE" Parameter, mit dem 
sich das anpassen lässt.

Antwort schreiben

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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.