Forum: Mikrocontroller und Digitale Elektronik Stm custom Bootloader. Application auf Gültigkeit prüfen


von Peter (Gast)


Lesenswert?

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.

von Nop (Gast)


Lesenswert?

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.

von Michael F. (Firma: IAR Systems) (michael_iar)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...  ;-)

von Andras H. (kyrk)


Lesenswert?

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.

von Nop (Gast)


Lesenswert?

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.

von Patrick B. (p51d)


Lesenswert?

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.

von Jörg (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.