Szenario
Ich möchte ein kostengünstiges IoT-Gerät drahtlos mit einer neuen Firmware aktualisieren, die die Mikrocontroller des Geräts aktualisiert. Der Mikrocontrollerspeicher ist ein Flash-Speicher im Bereich von 32.000 bis 128.000 (jeder Cent zählt). Dieser billige Speicher hat eine wesentliche Einschränkung: Er kann nur blockweise gelöscht werden.
Frage
Bedeutet das, dass ich keine differenziellen ( Delta ) Aktualisierungen vornehmen kann ? Muss ich immer den gesamten Controller-Speicher (oder zumindest wesentliche Teile) aktualisieren?
Ich möchte die Notwendigkeit reduzieren, alles zu flashen, und riskieren, das Gerät so weit wie möglich vollständig zu blockieren. Gibt es Strategien, wenn Mikrocontroller über Funk geblitzt werden?
Antworten:
Die einfache Antwort lautet: Ja, Sie benötigen genügend Flash-Blöcke, um Bootloader- und A / B-Code-Images zu unterstützen, wenn Sie eine hohe Zuverlässigkeit wünschen. Bevor Sie das neue Bild aktivieren, können Sie das Ganze schreiben, überprüfen und möglicherweise erneut versuchen.
Dies ist jedoch eine teure / zuverlässige Strategie, und Sie können den Overhead reduzieren. Low-Level-Unterstützung für OTA-Updates kann auch Teil der Gerätefirmware oder des Betriebssystems sein, sodass Sie vermeiden können, Ihre eigenen zu aktualisieren, es sei denn, Sie möchten etwas lernen. Diese Funktion kann als beschrieben werden
FOTA
.Das Partitionieren Ihrer Codebasis ermöglicht inkrementelle Updates. Im besten Fall kann der Bootloader die Netzwerkverbindung herstellen, Code herunterladen und überprüfen, ohne dass ein Fallback-Benutzercode erforderlich ist. Mit einem lokalen Gateway kann die Verwaltung dieser Aufgabe von den kostengünstigen Endpunkten delegiert werden.
Viele Geräte haben eine kleine Menge von Wort-Lösch - Blitz, und falls dies nicht selbst kann man in der Regel eingestellt Bits ohne einen ganzen Block löschen zu müssen. Diese Funktionen können verwendet werden, um Sprungtabellen zu manipulieren und Code zusammenzufügen, der in Blockgrößenblöcken aktualisiert wird. Selbst wenn Sie ursprünglich einen vollständigen A / B-Codebereich geplant hatten, müssen Sie möglicherweise auf ein komplexeres Schema zurückgreifen, wenn die Codebasis zu stark wächst.
Um die Funktionalität zu verdeutlichen, die mit einer ausgeklügelten Firmware-Over-the-Air-Lösung erreicht werden kann, können der Bootloader und möglicherweise ein primärer Kommunikationsstapel resident bleiben, während der gesamte verbleibende Benutzeranwendungsbereich erneut geflasht wird. Dies erfordert keinen Overhead (insbesondere wenn die Blockpartitionierung weich ist). In dem Szenario, in dem der Kommunikationsstapel aktualisiert werden muss, kann die Region, die im Allgemeinen für den Anwendungscode verwendet wird, vorübergehend während des Herunterladens und der Überprüfung verwendet werden. Um dies zu erreichen, ist eine gewisse Unterstützung im SoC erforderlich, es gibt jedoch bereits Geräte der 2. und 3. Generation, die für diesen Zweck entwickelt wurden.
quelle
Abgesehen von Ihrem Code, der die Aktualisierung vornimmt, die relativ statisch wäre, müssen Sie zwei Images in Ihrem Speicher behalten: ein aktives Image und ein Backup-Image. Wann immer Sie aktualisieren müssen, führen Sie dies in der Sicherung durch und schalten Sie diese dann auf aktiv. Sobald es stabil ist, aktualisieren Sie das alte aktive Image, das jetzt Ihr Backup sein soll.
In diesem Sinne können Sie beim Aktualisieren beider Bilder Abnutzungsalgorithmen verwenden. Der Code für solche Algorithmen nimmt möglicherweise etwa 10 bis 15% des gesamten Speichers ein, aber es lohnt sich, die Lebensdauer des Geräts zu verlängern.
( Techtarget.com: Verschleißnivellierung )
quelle
Freescale Semiconductor beschreibt eine robuste Methode zur drahtlosen Firmware-Aktualisierung für seine Kinetis-Mikrocontroller .
Es heißt: Program Flash Memory Swap .
Sie können Blöcke aktualisieren und dann austauschen.
Das verknüpfte Dokument enthält eine detaillierte Beschreibung.
Es sorgt für sicherere Firmware-Upgrades, kostet aber sicherlich mehr , da es mehr Flash-Speicher erfordert . Gilt auch nicht für Mikrocontrollertypen, sondern nur für solche, die den Austausch interner Blitzblöcke unterstützen.
quelle