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