Python Script: LPC810 flashen

#3466823
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
Angehängte Dateien:
#3583403
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.
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
}
Angehängte Dateien:
#3585616
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
#3585691
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
#3587404
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren