Verwenden Sie einen Chip mit mehr als der doppelten Menge an Flash-Speicher, die Sie für Ihren Code benötigen. Auf diese Weise können Sie die neue Firmware in diesen Speicher laden, während Sie die alte behalten, falls etwas schief geht.
Nachdem Sie die Prüfsummen der neuen Firmware entschlüsselt und überprüft haben, kann ein Bootloader sie an ihren endgültigen Speicherort kopieren und die alte ersetzen. Wenn während dieses Teils etwas schief geht, sollte der Bootloader nach einem Hard-Reset feststellen, dass die neue Firmware ungültig ist (indem er die Prüfsumme erneut durchführt) und den Kopiervorgang wiederholen.
Dies ist der einfachste und narrensicherste Weg, den ich kenne. Es erfordert auch wenig Code im Bootloader und erfordert keine Duplizierung von Funktionen zwischen dem Hauptprogramm und dem Bootloader (Sie benötigen keine Kommunikationslogik im Bootloader).
Verwenden Sie einen Bootloader und ein paar KB zusätzlichen Flash.
Ein Upgrade wird vom Bootloader ausgeführt, indem ein spezieller Befehl über UART, USB, I2C oder ein anderes Protokoll gesendet wird. Es wird immer nur der Hauptcode aktualisiert - der Bootloader-Code wird nur über einen externen Programmierer (z. B. JTAG / PICkit für PICs usw.) berührt.
Wenn das Update fehlschlägt (Stromausfall, ein Stolperfall oder ein anderer Grund), funktioniert das Widget nicht, der Bootloader ist jedoch weiterhin verfügbar, sodass das Upgrade erneut versucht werden kann.
Irgendwo in einem Byte könnte ein Flag gesetzt werden, das verhindert, dass der Hauptcode falsch ausgeführt wird, da er nicht vollständig aktualisiert wurde.
quelle
Wenn Ihr Gerät vergleichsweise teuer ist und Sie sich die Kosten leisten können (und Ihre Kunden sich für Upgrades interessieren), können Sie dies tun ...
(Im Allgemeinen erfordert diese Technik entweder externe Speicherung oder den umständlichen Einsatz von jtag.)
Habe ein festes Programm-Mikro (wie ein kleines PIC), das das System anhalten und neu programmieren kann.
Da Sie die Firmware des "Upgrade-Prozessors" nicht ändern können, kann niemals ein Fehler auftreten.
1) Der Benutzer kann das Gerät aktualisieren
2) Wenn ein Upgrade fehlschlägt, können sie es immer noch einmal versuchen. Es kann nicht gemauert werden
3) Auch wenn Ihr Zielgerät keinen Bootloader unterstützt (es will nur booten und laufen), können Sie es trotzdem dazu bringen, das zu tun, was Sie wollen.
Funktioniert für FPGA, DSP und andere Oddball-Ziele.
Kann eine sehr ordentliche Benutzeroberfläche haben (sogar ein PIC kann einen Webserver betreiben ...)
quelle
Stellen Sie sicher, dass Ihr Produkt eine einfache serielle Schnittstelle hat, vorzugsweise EIA232. Ein nicht standardmäßiger Anschluss ist in Ordnung, wenn Sie keinen Platz für einen DB-9 haben. Zum Beispiel ist ein Klinkenstecker alles, was Sie für TxD, RxD und Masse benötigen.
Schließen Sie beim ersten Programmieren des Geräts einen Bootloader ein . Dies sollte so einfach wie möglich sein , da Sie früher oder später den Bootloader selbst aktualisieren möchten, wenn er neue Funktionen benötigt. (Sie können es wahrscheinlich nicht einmal aktualisieren)
Dann der Klinkenstecker. Verwenden Sie eine Buchse mit einem Schalter, damit Sie erkennen können, wenn ein Stecker vorhanden ist. Überprüfen Sie einfach den Reset und starten Sie den Bootloader, wenn der Stecker vorhanden ist. Starten Sie andernfalls die Anwendung. Auf diese Weise bleiben Bootloader und Benutzeranwendungsprogramm gut getrennt. (Die Prüfung ist tatsächlich Teil des Bootloaders. Sie wird unabhängig von der Version der Anwendung benötigt, sonst können wir den Bootloader nicht aufrufen!)
quelle
Welche Ausrüstung wird der "Upgrade" zur Verfügung haben? Ein PC, ein USB-Stick, eine Micro-SD-Karte?
Eine Möglichkeit wäre, die Anwendung in einem entfernbaren Objekt (USB-Stick, SD-Karte usw.) zu haben. Der Chip lädt seine Applikation vom Artikel. Ihr Upgrade-Programm tauscht den Artikel einfach aus und startet neu.
Die mir bekannten ARM- und Cortex-Mikrocontroller-Chips (NXP, Atmel) verfügen alle über einen eingebauten seriellen Bootloader. Wenn Ihr Updater also mit einem PC und einem seriellen Kabel ankommt (und Sie eine COM-Port-Schnittstelle eingerichtet haben), kann er einfach Ihren herunterladen aktualisieren.
quelle