Forum: Mikrocontroller und Digitale Elektronik STM32 + IAP + Dateiformat?


von Sven K. (Gast)


Lesenswert?

Hallo!

Ich würde gerne eine FW-Update Funktion realisieren.
Das ich das mit IAP machen muss habe ich schon rausgefunden.
Nur das zu verwendende Dateiformat ist mir noch nicht klar.
Nimmt man besser das bin-file, oder hex-file?


Danke & Grüße
Sven

von ui (Gast)


Lesenswert?

Ich hab mir jetzt schon bestimmt 10 verschiedene Bootloader geschrieben, 
von IAP hab ich aber noch nix gehört.

Hab bis jetzt immer mit Intels hex format gearbeitet. Hat den Vorteil 
einer eingebauten und gut dokumentierten Integritätsprüfung.

von Georg (Gast)


Lesenswert?

Sven K. schrieb:
> Nimmt man besser das bin-file, oder hex-file?

Ein BIN-File ist eigentlich nur sinnvoll, wenn:

1. alles am Stück ist (trifft bei einem Bootloader wohl zu)
2. Die Daten in sich abgesichert sind, z.B. mit einer Checksumme (sollte 
bei einem Bootloader zutreffen)

Zu IAP fällt nicht mal Google was passendes ein, soll das vielleicht IAR 
heissen?

Georg

von Johannes S. (Gast)


Lesenswert?

IAP steht soweit ich weiss für In-Application Programming. Und das hat 
erstmal noch nichts mit einem Dateiformat zu tun. Der µC muss irgendwie 
die Programmierdaten übermittelt bekommen über eine irgendeine 
Schnittstelle wie UART, SPI, CAN oder andere. Und die Daten können 
wiederum aus einer Datei gelesen werden dessen Format auch völlig 
unabhängig vom IAP ist.

von W.S. (Gast)


Lesenswert?

Sven K. schrieb:
> Ich würde gerne eine FW-Update Funktion realisieren.
> Das ich das mit IAP machen muss habe ich schon rausgefunden.
> Nur das zu verwendende Dateiformat ist mir noch nicht klar.
> Nimmt man besser das bin-file, oder hex-file?

Das ist eher zweitrangig.

Was hingegen weitaus wichtiger ist, ist die Gestaltung deiner 
eigentlichen Firmware. Einen Teil mußt du resident machen, d.h. daß er 
NIEMALS geändert oder überschrieben werden soll. Und dieser Teil muß 
auch dann noch funktionieren, wenn bei einem FW-Update etwas schief 
gelaufen ist. Eben damit man das Gerät nicht "gebrickt", also 
unbrauchbar gemacht hat, sondern damit man das Update wiederholen oder 
das Wieder-Aufspielen des Originals tun kann. Deshalb muß dieser Teil 
auch durch irgendwas (gedrückte Taste, gesteckter Jumper o.ä.) am 
Systemstart erreichbar sein - könnte ja sein, daß das Update zwar 
gelaufen ist, aber die neue FW Mist ist.

Ansonsten hast du beim übertragenen Format (sowas willst du ja 
sicherlich über irgend eine Strippe tun, also seriell oder USB oder so) 
die freie Wahl. Ich habe sowas bei meinen Geräten blockweise gemacht, 
die Blöcke so groß, daß sie bequem neben dem lademodul ins RAM passen. 
Selbige dann versehen mit: Adreßangabe, Blocklänge, Adler32. Das reicht 
eigentlich.

W.S.

von Sven K. (Gast)


Lesenswert?

ui schrieb:
> Ich hab mir jetzt schon bestimmt 10 verschiedene Bootloader geschrieben,
> von IAP hab ich aber noch nix gehört.

Hi!

Klingt interessant! Auch für einen STM32?

ui schrieb:
> Hab bis jetzt immer mit Intels hex format gearbeitet. Hat den Vorteil
> einer eingebauten und gut dokumentierten Integritätsprüfung.

Also ist hex zu bevorzugen?

Georg schrieb:
> 1. alles am Stück ist (trifft bei einem Bootloader wohl zu)
> 2. Die Daten in sich abgesichert sind, z.B. mit einer Checksumme (sollte
> bei einem Bootloader zutreffen)

Zweimal Ja.

Georg schrieb:
> Zu IAP fällt nicht mal Google was passendes ein, soll das vielleicht IAR
> heissen?

https://developer.mbed.org/users/okano/notebook/iap-in-application-programming-internal-flash-eras/
http://www.st.com/en/embedded-software/stsw-stm32067.html

Johannes S. schrieb:
> Der µC muss irgendwie
> die Programmierdaten übermittelt bekommen über eine irgendeine
> Schnittstelle wie UART, SPI, CAN oder andere.

Ja. Aber muss bei mir im Flash zwischengespeichert werden, da die Daten 
nicht "nativ" sondern in einem Protokoll verpackt kommen.

Geht dann IAP nicht mehr!?

Grüße
Sven

von ui (Gast)


Lesenswert?

Sven K. schrieb:
> Klingt interessant! Auch für einen STM32?

Ja.

Sven K. schrieb:
> Also ist hex zu bevorzugen?

Wie schon gesagt wurde: Es gibt keine Standardlösung. Mal kann das 
besser sein, mal das andere. Ich habs halt bis jetzt immer mit hex 
gemacht.

Sven K. schrieb:
> Ja. Aber muss bei mir im Flash zwischengespeichert werden, da die Daten
> nicht "nativ" sondern in einem Protokoll verpackt kommen.

Das hat nix mit dem Flash zu tun. Den Protokollinhalt (also die binary) 
extrahierst du beim Empfang. Und zwischenspeichern macht ja wohl auch 
keinen Sinn. Du kannst ja sofort blockweise in den flash schreiben (dein 
Bootloader muss/sollte sich dafür vollständig im RAM befinden, ist 
einfacher). Also warum zwischenspeichern?

von Johannes S. (Gast)


Lesenswert?

Sven K. schrieb:
> Ja. Aber muss bei mir im Flash zwischengespeichert werden, da die Daten
> nicht "nativ" sondern in einem Protokoll verpackt kommen.

Die Daten pufferst du geschickterweise binär, Intel Hex  Co. wäre da 
sehr verschwenderisch und dann müsste ja der µC das Zeug dekodieren.
Ablauf wäre also eher: Datei lesen (auf dem Host) - binär extrahieren - 
in Blöcken an µC übertragen (wie von W.S. beschrieben) - im µC die 
empfangenen Daten verifizieren und dann ins Flash schreiben (mit den IAP 
Funktionen).

von Sven K. (Gast)


Lesenswert?

ui schrieb:
> Das hat nix mit dem Flash zu tun. Den Protokollinhalt (also die binary)
> extrahierst du beim Empfang. Und zwischenspeichern macht ja wohl auch
> keinen Sinn. Du kannst ja sofort blockweise in den flash schreiben (dein
> Bootloader muss/sollte sich dafür vollständig im RAM befinden, ist
> einfacher). Also warum zwischenspeichern?

!?!?!?

Wie soll ich denn das ganze Protokollhandling machen, wenn ich die 
dazugehörigen Sourcecode früher oder Später durch das FW-Update 
überschreiben würde!?
habe gedacht das Image eben in einen anderen Flashbereich 
zwischenzuspeichern. Und dann dieses Image umkopieren. Die ganzen 
Sprung-
 bzw. Funktionsadressen müssen ja auch stimmen...

von Adib (Gast)


Lesenswert?

Hallo Leute,

auch ich habe schon mehrere Bootloader geschrieben.

Leider bietet das Hex-Format keine Integritätsprüfung für das gesamte 
Image. Immer nur blockweise.
Binär Formate haben weder Information über Startaddresse noch 
Integrität.

Bei meiner Implementierung benutze ich ein Binärformat, wo Startaddress 
und Image-Checksumme in dem Dateinamen sind.

Das war aber alles ganz viel Arbeit.

Der STM hat integrierte Bootloader, die per Pin beim Booten aktiviert 
werden. Es gibt seriell oder/und USB Kommunikation. ST bietet auch die 
PC Programme an.

Falls also deine Schaltung einen Button hat, nur für diesen Zweck - am 
richtigen Pin, kannst du das STM32 eingebaute IAP Schema benutzen.

Adib.
--

von eagle user (Gast)


Lesenswert?

Sven K. schrieb:
> ui schrieb:
>> Also warum zwischenspeichern?
>
> !?!?!?
>
> Wie soll ich denn das ganze Protokollhandling machen, wenn ich die
> dazugehörigen Sourcecode früher oder Später durch das FW-Update
> überschreiben würde!?
> habe gedacht das Image eben in einen anderen Flashbereich
> zwischenzuspeichern. Und dann dieses Image umkopieren.

Bonus beim Umkopieren: man hat mehrere Versuche. Die alte Applikation 
wird nicht zerstört solange es kein gutes neues Image gibt. Selbst wenn 
beim Umkopieren der Strom ausfällt, ist nichts kaputt.

Der Bootloader kann nach jedem Reset prüfen, ob er die Applikation 
starten kann oder ob er ein gutes neues Image umkopieren kann. Notfalls 
könnte er noch auf einen neuen Download warten, aber das kann eigentlich 
nur bei defektem Speicher passieren. Trotzdem kann der Bootloader 
ziemlich einfach bleiben.

Und das Umkopieren geht dann so schnell, wie das Flash schreiben kann. 
Der Download durch die Applikation darf deshalb auch per Akustik-Koppler 
passieren ;)

von Sven K. (Gast)


Lesenswert?

eagle user schrieb:
> Der Bootloader kann nach jedem Reset prüfen, ob er die Applikation
> starten kann oder ob er ein gutes neues Image umkopieren kann. Notfalls
> könnte er noch auf einen neuen Download warten, aber das kann eigentlich
> nur bei defektem Speicher passieren. Trotzdem kann der Bootloader
> ziemlich einfach bleiben.
>
> Und das Umkopieren geht dann so schnell, wie das Flash schreiben kann.
> Der Download durch die Applikation darf deshalb auch per Akustik-Koppler
> passieren ;)

Das ist das, was ich benötige! ;-)
Gibt es eine Empfehlung, welchen Bootloader ich mir da anschauen kann!?

von Sven K. (Gast)


Lesenswert?

Wie? Hat keiner eine Empfehlung?

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.