Forum: Mikrocontroller und Digitale Elektronik STM32 Bootloader Write Command


von Daniel H. (robertcraven)


Lesenswert?

Hallo!

Ich arbeite für ein Uniprojekt mit einem STM32F051 Discovery Kit.
Da dieser später an einer unzugänglichen Stelle sein wird, habe ich mit 
einem Bluetooth-Chip eine UART Kommunkationsschnittstelle zwischen PC 
und STM32 eingerichtet.

Da ich aber gerne nicht nur Daten via BT austauschen will, sondern 
gegebenenfalls das STM32 Programm ändern will habe ich mich (zum ersten 
Mal) in das Thema Bootloader eingelesen.

So sollte es ja möglich sein, über Bluetooth den Bootloader mit der 
UART2 (habe extra die Pins genommen, die der Bootloader auch verwendet) 
anzusprechen und den neuen Programmcode in den Flash Speicher zu 
spielen.

Die Initialisierung des Bootloaders klappt auch bereits und ich bekomme 
ein ACK vom Bootloader, dass er bereit für Befehle ist!

Jetzt würde ich also gerne mein Programm als HEX File in den Flash 
Speicher spielen, was ja mit dem Bootloader Write Memory Command gehen 
sollte.

Da dieser allerdings nur max 256 Byte akzeptiert und davon auch eine 
Checksumme (XOR) haben will, wollte ich mal nachfragen, ob ich hier eh 
am richtigen Weg bin bzw. ob es da ein Tool dafür gibt??
(Kann mir nicht vorstellen, dass ich händisch mein HEX File zerstückeln 
und die Checksummen einzeln berechnen und senden muss)

vielen Dank schon Mal
Robert

von Michael (Gast)


Lesenswert?

Daniel H. schrieb:
> dass ich händisch mein HEX File zerstückeln

Wieso händisch? Du kannst doch programmieren.

von Daniel H. (robertcraven)


Lesenswert?

ich meinte mit "händisch" auch "selbst ein Programm am PC schreiben" ;)

War nur verwundet, dass ich bis jetzt bei meinen Recherchen kein so ein 
Tool gefunden habe und daher besorgt, dass mein Weg der falsche ist.

von Tuxi (Gast)


Lesenswert?

1. Ich würde ein .bin File benutzen, welches genau so groß ist wie dein 
Flash. Gegebenenfalls mit 0xFF oder so auffüllen. Das musst du dann nur 
1:1 einfach ins Flash schreiben. (Bist du dir sicher das der write 
Befehl .hex frisst und du das .hex nicht vorher selber in .bin wandeln 
musst?

2. Da du Flash sowieso nur Pageweise, beschrieben kannst nachdem diese 
vorher gelöscht worden ist, musst du deine Firmware eh in Stücke 
zerteilen.
Am PC liest du das File komplett in ein Array ein sendest dann Pageweise 
die Datei und berechnest dir noch ne CRC über den Teil den du gesendet 
hat und hängt den hinten dran. (Vorrausgesetzt eine Page passt komplett 
in den RAM vom µC, wenn nicht wüsste ich gerade nicht weiter...)

von Daniel H. (robertcraven)


Lesenswert?

Tuxi schrieb:
> 1. Ich würde ein .bin File benutzen, welches genau so groß ist wie
> dein
> Flash. Gegebenenfalls mit 0xFF oder so auffüllen. Das musst du dann nur
> 1:1 einfach ins Flash schreiben. (Bist du dir sicher das der write
> Befehl .hex frisst und du das .hex nicht vorher selber in .bin wandeln
> musst?

Der Bootloader Write Befehl akzeptiert gar keine ganzen Dateien sondern 
nur einzelne Byte via COM Schnittstelle (Ich verwende dazu momentan 
HTerm)

Schaut so aus, dass ich ein Startbyte (z.b. 0x7F) sende, dann ein ACK 
bekommen und dann die Adresse und anschließend max 256 Byte Daten senden 
kann, die an die angegebene Adresse (z.b. Flash) geschrieben werden.

(also nichts mit .hex oder .bin Dateien)


Primär interessiert mich, ob das der richtige Weg ist, oder ob ich da 
ein Tool oder so übersehe, dass diese Arbeit für mich macht...
(Wie gesagt mein erster Bootloader Versuch und in den STM Datenblättern 
steht nur diese grundliegende Kommunikation mit dem Bootloader 
beschrieben)

von Daniel S. (daniel_s)


Lesenswert?

Es gibt dafür bereits ein fertiges Tool von STM. "Flash loader"ist das 
stichwort.

von Daniel H. (robertcraven)


Lesenswert?

Daniel S. schrieb:
> Es gibt dafür bereits ein fertiges Tool von STM. "Flash loader"ist das
> stichwort.

DANKE, genau das hab ich gesucht:)!!

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.