Ich scheibe aktuell einen eigenen Bootloader.
Alles ist fertig, aber ein Teil stört mich doch sehr.
Der Auflauf ist etwa so:
Bootloader Start
Pin pb2 auf high, dann starte Firmwareupdate
Sonst lade die Application auf Adresse 0x0800c000
Es kann mal im Leben passieren, das das letzte Update fehlgeschlagen
wurde, und die Application ab der genannten Adresse Schrott ist.
Lässt sich das irgendwie mit dem Stm prüfen?
Im Fall einer korrupten Firmware soll die natürlich nicht gestartet
werden.
Ich kenne das von anderen Cortex uC, dass die FW halbwegs automatisch
per Befehlt validiert werden kann.
Für stm habe ich Nichts gefunden und benötige eine Bestätigung, ob das
wirklich so ist.
Ich rede jetzt nicht von dem Empfang der Daten, sondern über Validierung
vor dem Start.
Dann müsste man sich was eigenes programmieren. Weiß noch nicht wie,
aber wird sich schon was finden.
Peter schrieb:> Ich kenne das von anderen Cortex uC, dass die FW halbwegs automatisch> per Befehlt validiert werden kann.
Wie sollte das gehen?! Die normale Vorgehensweise ist auf jedem µC, daß
Du ein FW-Image mit CRC hast und selbige abprüfst. Dazu nimmst Du
entweder ein Image fester Größe, oder die Länge wird an einem bekannten
Offset gespeichert.
Was STM unterstützt, ist CRC in Hardware - allerdings mußt Du dann bei
der Generierung die CRC dazu passend auswählen.
Hallo,
meist ist es so, der Bootloader überprüft nach dem Download die
Application. Wenn ok, dass wird irgenwo gespeichert. Im Eepromemulation
oder halt im flash selbst. Du kannst zum Beispiel im Flash ein Teil frei
halten, und wenn die App nach der Check Ok ist dann schreibst du da ein
MagicWord rein.
Eeprom emulation ist nicht trivial, denn du musst einen extra
Eepromemulation Treiber im Bootloader haben.
Sonst wenn du nach der Reset sehr viel Zeit hast. Dann kannst du die App
Signieren, und der Bootloader checkt diese. Wenn die Signatur stimmt,
dann ist die App valid.
Andras H. schrieb:> Sonst wenn du nach der Reset sehr viel Zeit hast. Dann kannst du die App> Signieren, und der Bootloader checkt diese. Wenn die Signatur stimmt,> dann ist die App valid.
Signatur geht ebenso wie Checksumme - aber sie schützen vor ganz
unterschiedlichen Dingen. Eine Checksumme nimmt man nur gegen
Übertragungsfehler aller Art, eine Signatur auch gegen gezielte
Manipulation. Daher ergibt eine Signatur nur dann Sinn, wenn es eine
Geräte-Anforderung gibt, daß es nur mit einer vom Hersteller
freigegebenen Firmware betrieben werden darf.
Peter schrieb:> Ich kenne das von anderen Cortex uC, dass die FW halbwegs automatisch> per Befehlt validiert werden kann.
Kommt auf den Umfang deiner "Prüfung" an. Aber grundsätzlich denke ich,
dass dir kein uC dies von Haus aus bieten kann, da jeder etwas anderes
möchte.
Wir haben auf unseren STMs 3 verschiedene Applikationen:
- Bootloader
ist relativ dumm und startet nur Applikationen. Dabei wir zum einen die
jeweilige Applikation mittels CRC geprüft, und zum anderen die
HW-Version auf kompatibilität getestet (alte FW auf neuer HW, neue FW
auf alter HW...). Da Hardware und Firmware sich im Lebenszyklus
unterschiedlich entwickeln können per se Inkompatibilitäten entstehen
(z.B. anderes Pinout, Chip-Wechsel wegen Abkündigung...)
- Golden-Applikation
ist eine Fallback lösung, falls beim Update etwas schief gelaufen ist.
Und im Verbund dir ein einfacher Bootloader z.B. keine
Netzwerk-Anbindung liefern wird.
- Main-Applikation
Eigentliche Applikation
Das alles wird dir kein Standard-Bootloader bieten. Zumal vermutlich pro
Firma mehrere Lösungsansätze für solche Probleme aktiv eingesetzt
werden.
Du könntest nach dem Einspielen der neuen Application und einer
Verifizierung, dass alles korrekt übertragen wurde, an einer bestimmten
Stelle im Flash ein Flag setzen.
Der Bootloader prüft nun immer zuerst diese Stelle auf ein gültiges
Flag. Ist die da, so startet er die Application.
Vor dem Update wird zuerst das gültige Flag gelöscht.