Forum: Mikrocontroller und Digitale Elektronik STM32F1 / Firmware Bootloader


von Greenhorn (Gast)


Lesenswert?

Hallo,

ich bin gerade dabei eine HW mit einem STM32F1 zu designen. Zusätzlich 
mache ich mir Gedanke, wie ich später im eingebauten Zustand die 
Firmware updaten möchte. Ich bin mir bewusst, es gibt die Pins Boot. 
Jedoch möchte ich auf eine externe HW Beschaltung verzichten, wenn es 
geht, und den Bootloader plus die Update-Sequenz per Software auslösen 
lassen.

Gibt es eine Beschreibung, wie ich ausschließlich per Firmware ohne 
Benutzung der Boot Pins, den Controller updaten kann.

Vielen Dank.

von Phantomix X. (phantomix)


Lesenswert?

Hallo!
Du brauchst den Code um den Flash zu Löschen / zu Beschreiben. Schau dir 
dazu die StandardPeripheralLibrary genauer an. Außerdem gibt es eine 
Appnote zum Flash Programming bei ST.

Hinweis: Soweit ich weiß sind bei den F1 die ersten Paar Sektoren 
readonly, solltest du den Firmware-Ausleseschutz aktivieren.

Hinweis: Es wird vermutlich nötig sein, Teile der Flash-Kopierroutinen 
in den RAM zu linken. Schau dazu in dein Linker file und auf Google.

von Greenhorn (Gast)


Lesenswert?

Hallo,

kann ich damit auf eine äussere Beschaltung der Pin's Boot verzichten 
und alles in der Firmware realisieren?

von Phantomix X. (phantomix)


Lesenswert?

Naja viel Arbeit ist es schon, du musst dir einen eigenen Flash Loader 
schreiben, dann musst du deine Firmware in irgend einer Form "zuführen" 
und den Flash Loader aufrufen.

Wenn das alles funktioniert wirst du BOOT0 auf GND lassen können 
(direktes Booten in den User-Flash)

von Greenhorn (Gast)


Lesenswert?

Hallo,

ich habe das Problem, meine Hardware ist in einem Bussystem integriert 
und ich komme aus baulichen Gegebenheiten nicht mehr an die Hardware 
heran.

Jetzt wollte ich den Upload über das Bussystem durchführen.

von Phantomix X. (phantomix)


Lesenswert?

Ist machbar. Du brauchst auf jeden Fall

- Ein Übertragungsprotokoll das dir die Firmware sauber überträgt

- Genug Zwischenspeicher auf / am Mikrocontroller um die gesamte 
Firmware zwischenzuspeichern. Hast du den nicht, riskierst du, dass ein 
abgebrochenes Update zum Ausfall deiner Anwendung führt.

von Phantomix X. (phantomix)


Lesenswert?

Nachtrag zum verfügbaren Speicher:

Vor ein Paar Jahren habe ich noch einen anderen Ansatz ausprobiert:

Wenn es deine Anwendung zulässt, könntest du auch einen Bootloader 
programmieren, der komplett selbständig über deinen Bus auf 
Firmwareupdates wartet.

Das bedeutet allerdings, dass sehr viel Logik im Bootloader sein muss 
(die du dann leider schlecht updaten kannst). Es hat allerdings den 
Reiz, zusammen mit einer CRC-Checksumme das Gerät quasi unkaputtbar zu 
machen (zumindest was Firmwareupdates angeht).
Der Bootloader würde dann immer einen Happen übers Netz empfangen und 
wegschreiben. Die Anwendung wird am Ende (und überhaupt) nur gebootet, 
wenn der CRC stimmt.



Praktikabler ist allerdings die Lösung, die ich dir weiter oben schon 
genannt habe, vorallem weil Speicher recht billig ist (schau mal nach 
SPI flashes, bspw. 
http://www.digikey.de/product-search/de?x=22&y=9&KeyWords=W25Q )

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.