Forum: Mikrocontroller und Digitale Elektronik Over the Air Programming / Firmware over the Air ?


von No Y. (noy)


Lesenswert?

Hallo Forum,
hat jemand hier Erfahrung mit Over the Air Programming bzw Firmware over 
the Air?

Und könnte mir ein paar Tips geben wie man so etwas anstellt bzw 
anfängt?
Wahrscheinlich ja über einen entsprechenden Bootloader...

Bin noch auf der suche nach Ideen. Überall liest man, dass sowas geht 
aber wie es geht nirgends. Ich möchte so etwas mal in Angriff nehmen. Ob 
WLAN oder GPRS/UMTS oder NRF bzw die 886MHz Module ist erstmal egal. 
Momentan bin ich noch am überlegen ob ich auf einen PIC32MZ (Live Flash 
könnte eventuell behilflich sein) oder STM32F4 jeweils mit einem RTOS 
setze oder aber direkt ein Linux System, wobei es ja dort wohl einfacher 
wird, weil das Grundsystem meist unverändert bleibt und nur das 
ausgeführte Programm geupdatet werden muss.
Achja falls es UMTS wird muss sich ja wahrscheinlich das Device sein 
neues Programm selber erstmal vom Server laden und dann selbst 
einspielen..

Suche nun schon seit einigen Tagen aber so wirklich was brauchbares 
findet man nicht...

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

No y. schrieb:
> Wahrscheinlich ja über einen entsprechenden Bootloader...

Wo ist jetzt die Frage?

Ein bootloader bekommt das zu flashenden Programm irgendwie übertragen, 
und flasht das dann in den Programmspeicher. Wie das Programm genau 
übertragen wird, ist für die Funktion völlig völlig egal.

Lösen musst du zwei Probleme: Wie übertrage ich Daten per Funk (WLAN, 
Bluetooth), und wie starte ich den Booltloadervorgang über Funk.

Das hat mit dem eigentlichen bootloader nichts zu tun. Die Funktionen 
sind unabhängig, die musst du nur richtig zusammenpuzzeln.

Oliver

: Bearbeitet durch User
von No Y. (noy)


Lesenswert?

Gut ich habe es wohl nicht genau genug beschrieben.

Der Chip der umprogrammiert werden soll über Funk ist auch derjenige der 
die Daten über Funk entgegen nimmt. Irgendwie hab ich ja dann das Henne 
Ei Problem...


Ich würde es jetzt so angehen:

Der µC besorgt sich die neue Firmware und speichert diese auf einer 
SD-Card (oder einen Flash-Chip...).

Dann muss er noch selber irgendwie den Startpunkt seines Bootloaders auf 
die neue Firmware legen und anschließend sich reseten. Wenn nun der Chip 
wieder startet ließt er die neue Firmware von der SD-Card und bootet mit 
dem neuen Programm hoch.

Nun muss man ncoh abfangen falls die Firmware nicht läuft...

Sozusagen wenn er die neue Firmware nciht booten kann soll er wieder die 
alte Bootadresse benutzen...

Ist so ungefähr der Ablauf bei OTA?

von Karl H. (kbuchegg)


Lesenswert?

Ein drittes potentielles Problem sollte man allerdings nicht aus den 
Augen lassen: Funkstörung.

D.h. die Übertragung muss bei Funk stärker abgesichert werden, als man 
das bei Kabel machen müsste. Wenn bei einem Kabel die Übertragung erst 
mal steht, dann ies es recht unwahrscheinlich, dass sie mitten drinn 
ausfällt (Obwohl: sag niemals nie). Bei Funk kann sich das aber von 
einer Sekunde auf die andere ändern, und wenn dann der Bootloader steht 
und auf ein Paket wartet, welches nie kommt, oder noch schlimmer den 
Quatsch den er bekommen hat in den Flash brennt, dann ist die Kacke oft 
am dampfen.

von ./. (Gast)


Lesenswert?

> hat jemand hier Erfahrung mit Over the Air Programming bzw Firmware over
> the Air?

Ohne Probleme:
TI Chronos

Man sollte aber nen vollen Karton voller CR2032 haben.

von Karl H. (kbuchegg)


Lesenswert?

No y. schrieb:
> Gut ich habe es wohl nicht genau genug beschrieben.
>
> Der Chip der umprogrammiert werden soll über Funk ist auch derjenige der
> die Daten über Funk entgegen nimmt. Irgendwie hab ich ja dann das Henne
> Ei Problem...

Ähm.
Den ersten Bootloader kannst du natürlich nicht über Funk reinschiessen. 
Der wird ganz konventionell im kabelgebundenen Programmer reingebrannt.

> Der µC besorgt sich die neue Firmware und speichert diese auf einer
> SD-Card (oder einen Flash-Chip...).
>
> Dann muss er noch selber irgendwie den Startpunkt seines Bootloaders auf
> die neue Firmware legen und anschließend sich reseten.

Anders rum.
Der Startpunkt ist immer beim Bootloader. Das erste was der Bootloader 
macht ist auf der SD-Karte nachsehen, ob es ein Update gibt. Wenn ja, 
dann liest er es und brennt es ins Flash. Wenn nein, dann startet er 
gleich die eigentliche Firmware.

Du musst auch für den Fehlerfall mitdenken, wenn etwas schief geht. Wenn 
die Firmware verbockt ist und kein Update mehr holt bzw nicht auf 
Bootloader-Start umschaltet, dann hast du ein massives Problem. Daher: 
du willst haben, dass beim Einschalten IMMER zuerst mal der Bootloader 
drann kommt. Wenn der feststellt, das es für ihn nichts zu tun gibt - 
gut. Aber im Falle eines Falles musst du in der Lage sein, ein völlig 
verbugte Firmware Version gegen eine funktionierende auszutauschen mit 
nicht mehr in der Hand als einem Bootloader und einer SD-Karte mit einer 
als insoweit korrekt bekannten Version.

: Bearbeitet durch User
von No Y. (noy)


Lesenswert?

Ja deswegen würde ich halt erstmal alles holen und zwischenspeichern.

Dann müsste erstmal überprüft werden ob alles da ist und ob es die 
richtige Firmware ist.

Dann wird erst der Bootloader geändert und neu gestartet.

Hier ist dann das Problem, wie komm ich zurück falls die neue Firmware 
nciht gestartet werden kann....

Und vor allem kommt man so leicht aus seinem eigenen Programm an die 
Einsprungadresse des Bootloaders? Und wie baut man etwas, was nach einem 
Reset überprüft ob nicht etwas zurück geändert werden muss??

Bisher habe ich alles direkt über JTAG bzw ISP über einen Programmer 
draufgeschmissen...

Wäre mein erster Ansatz mit Bootloadern...

von No Y. (noy)


Lesenswert?

Ahh,

sozusagen der Bootloader ändert die Firmware im internen Chip Flash nur 
wenn was neues da ist.. (komplett).

Ansonsten läuft er einfach weiter ins alte Programm..

Also wird nciht jedesmal die Firmware vom externen Flash geladen sondern 
nur die interne ausgetauscht...

von Karl H. (kbuchegg)


Lesenswert?

No y. schrieb:

> Dann wird erst der Bootloader geändert und neu gestartet.

Der Einsprungspunkt vom Bootloader wird überhaupt nie geändert!

Nach anlegen der Versorungsspannung kommt immer zunächst der Bootloader 
zum Zug!

Das ist doch beim Starten eines Gerätes völlig wurscht, ob das 2 
Sekunden länger dauert oder nicht, weil der Bootloader erst mal seine 
potentiellen Quellen auf der Suche nach einem Update abklappert.

von Kein Name (Gast)


Lesenswert?

Das Problem ist halt - es wird zu groß für einen klassischen Bootloader. 
Du musst während des Downloads das System am laufen halten. Ganz egal 
was du machst, Schrittweise ersetzen, 2x Programm-Flash, download in 
Ram... alles wird eine Sammlung unschöner Kompromisse.

von No Y. (noy)


Lesenswert?

Daher bin ich auf die neuen PIC32MZ aufmerksam geworden.

2MB Flash. Und das dann sogar mit diesem Live-Flash.

Könnte für so etwas halt extrem interessant werden. Und FreeRTOS geht 
auch schon auf denen..

von Nosnibor (Gast)


Lesenswert?

Normalerweise ist die Datenübertragung mit ihren komplexen Protokollen 
Aufgabe der Firmware; der Booter entscheidet dann beim Neustart, welches 
Firmware-Image gestartet wird, bzw. ob noch irgendetwas umkopiert werden 
muß.
Wenn die Firmware direkt aus dem Flash läuft, ist das natürlich 
knifflig, eine SD-Karte ist da sehr hilfreich. Der Booter muß dann beim 
Start prüfen, ob auf der Karte eine neuere Firmware liegt als im Flash; 
in dem Fall kopiert er die neue Firmware ins Flash, bevor er sie 
startet.

Zu jedem Firmware-Image gehören also noch zusätzliche Informationen:
 - Nummer/Zähler, damit der Booter erkennen kann, welches Image neuer 
ist. Das kann die Versionsnummer sein, oder ein Zähler, der auf jedem 
Gerät individuell weitergezählt wird, z.B. während des Downloads ("Ich 
bin Firmware Nr. 42, also bekommt das, was ich da gerade auf die 
SD-Karte schreibe, die Nummer 43").
 - Prüfsumme. Wenn die Prüfsumme nicht stimmt, ist das Image ungültig 
und gehört auf keinen Fall ins Flash!
 - falls gewünscht, Signatur, damit der Booter nur original-Firmware vom 
Hersteller akzeptiert und keine Hacker/Bastlerfirmware oder 
NSA-manipuliertes Zeug.

Ach so: Einsprung in den Booter nach erfolgreichem Download ist einfach: 
Interrupts sperren und Endlosschleife, den Rest macht der Watchdog.

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.