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.
Nop schrieb: > Was STM unterstützt, ist CRC in Hardware - allerdings mußt Du dann bei > der Generierung die CRC dazu passend auswählen. Korrekt und hier würde es weitere Infos inklusive Beispielprojekt geben, falls die IAR Embedded Workbench als Toolchain genutzt wird: https://www.iar.com/knowledge/support/technical-notes/general/calculate-crc32-as-in-stm32-hardware-v.5.50-and-later/ Wichtig: Nicht alle STM32 haben das gleiche CRC Peripheral integriert und Seite 13 der folgenden App-Note zeigt die Unterschiede: https://www.st.com/resource/en/application_note/an4187-using-the-crc-peripheral-in-the-stm32-family-stmicroelectronics.pdf Gruß, Michael
Peter schrieb: > über Validierung vor dem Start Dieses Wort "Valididerung" ist wie das Wort "Verifizierung" eines, was die Angelsachsen einen "false friend" nennen. Zitat von https://de.wiktionary.org/wiki/Validierung:
1 | Beim Softwaretesten |
2 | klärt die Verifizierung die Frage, ob das Produkt richtig entwickelt wurde, |
3 | während die Validierung klärt, ob man das richtige Produkt entwickelte. |
Im Grunde machst du mit der Konsistenzprüfung beim Programmstart weder das eine noch das andere... ;-)
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.
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.