Forum: Mikrocontroller und Digitale Elektronik LPC1768 über den MCU COM mit neuer Firmware programmieren


von Alex (Gast)


Lesenswert?

Hallo Forum,
ich hab ein Problem.
Ich würde gern mein LPC1768 über den MCU COM mit neuer Firmware 
programmieren können ohne den Pin für den Bootloader auf Masse ziehen zu 
müssen.  Dabei stehen mir nur die Tx/Rx Leitungen zur Verfügung, die DTR 
/RST Leitungen kann ich nicht benutzen. Somit fällt wohl Flash Magic 
weg…

Kennt Ihr Software die dies ermöglicht bzw. die nötigen Funktionen 
bereitstellt?
Oder habt ihr selber schon mal so etwas umgesetzt und könnt es zur 
Verfügung stellen?

von Lothar (Gast)


Lesenswert?

In dem Fall kann die Firmware RX beim Start oder per Interrupt 
überwachen, bei Aktivität einen Terminal-Befehl einlesen (FIRMWARE 
UPDATE) und dann IAP den ROM Bootloader starten. Sobald das passiert ist 
funktioniert auch FlashMagic, auch nur mit TX/RX

Mehr Aufwand wäre eine Firmware mit aktivem Terminal, die sich selbst 
überschreiben kann. Hier wäre dann Segmentierung nötig. Oder die 
Firmware schreibt einen eigenen kleinen Bootloader temporär ins RAM, 
startet diesen IAP, und der liest das neue Binary über Terminal ein und 
schreibt diese IAP in den Flash, und startet neu.

von Alex (Gast)


Lesenswert?

Hallo Lothar,
danke, mir ist klar wie man das macht nur würde ich mir gern die Arbeit 
sparen.
Ich bin bestimmt nicht der erste der so was braucht, da muss es doch 
irgendwo was geben.
Die Suchmaschinen spucken allerdings nichts Vernünftiges raus.

von Lothar (Gast)


Lesenswert?

Vielleicht weil da nicht so viel zu tun ist. Eine UART-Funktion hat doch 
jeder, und falls nicht gibt es Demos z.B. hier:

https://www.olimex.com/Products/ARM/NXP/LPC1766-STK/
simple/uart

Das einfach in Deine Firmware mit rein nehmen. Bei UART IRQ den FIFO 
prüfen, dann die Firmware runterfahren, und ROM Bootloader IAP starten:

#define IAP_LOCATION 0x1FFF1FF1
#define RE_INVOKE_ISP 5710
typedef void (*IAP)(unsigned long[],unsigned long[]);
IAP iap_entry;
iap_entry=(IAP) IAP_LOCATION;
unsigned long command[5];
command[0]=RE_INVOKE_ISP;
unsigned long result[5];
iap_entry(command, result);

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
Noch kein Account? Hier anmelden.