Hallo zusammen,
Nachdem ich einige Boards mit 4MB Flash habe und diese auch verbauen wollte, habe ich mir Gedanken darüber gemacht, wie OTA auf diesen aussehen könnte (WAF Faktor wichtig, da diese Geschenke werden und ich nicht jedes Mal nach Budapest reisen will wenn es ein Update gibt ).
Ich habe die Idee von Tasmota (und Android mit der Recovery Partition) übernommen, die haben ein OTA Lösung mit zwei Asymmetrischen Partitionen implementiert („app0“ mit dem normalen Tasmota und „safeboot“ mit einer minimalen Version). Die safeboot Version ist dann dediziert nur für ein OTA Update verantwortlich.
Aktuell habe ich mich für die folgende Partitionierung für die 4MB Version entschieden:
Hier reserviere ich 800 kB für die OTA Partition, die nach der Haupt-App sitzt.
Ein Proof of Concept ist aktuell hier zu finden (Achtung Spielwiese, force-pushes können hier ohne Vorwarnung kommen):
Der Safeboot OTA ist hier sehr einfach implementiert, es greift auf die SD-Karte zu und schaut, ob da eine Datei „/firmware.bin“ zu finden ist. Wenn ja, wir die ESPuino Partition gesichert und die firmware.bin über das OTA System von espidf geschrieben. Danach wird die neue FW gebootet.
Sollte etwas dabei schief laufen, wir das Backup in „recovery.bin“ umbenannt und ein Reboot wieder zu safeboot ausgeführt. Danach versucht es ein OTA mit der alten SW (noch nicht getestet, ob es wirklich so funktioniert).
Features:
- Speichern einer neuer Firmware auf der SD-Karte und Booten zu Safeboot
- Applikation über OTA update überschreiben
- Backup der bestehenden Firmware
- Recovery nach einem fehlerhaften OTA
- Recovery nach einem Stromausfall beim OTA
- NVS Partition darf nicht verschoben werden
Vorteil von dem System ist, dass auch bei der 4MB Flash Varianten ein OTA möglich ist. Der Safeboot braucht aktuell zwingend eine SD-Karte, aber in Theorie könnte auch ein Webserver mit einer minimalen Website in den Speicher passen.
Nachteil, dass wir (aktuell) 800kB an Speicher für ESPuino verlieren. Diese könnte auf ca 400kB reduziert werden, wenn keine zusätzlichen Features hinzu kommen. Auch ist ein Recovery komplizierter als bei der klassischen OTA-Variante von ESP32 (wo nach einem fehlerhaften OTA einfach die aktuelle Partition gebootet wird). Auch ist ein Rollback nach einem Update aus dem gleichen Grund nicht möglich.
Ideen und Meinungen sind gerne willkommen.
edit:
Haben wir eine Kategorie für die Vorstellung von Features?