STM32 Bootloader Write Command

OP #3721820
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
Gast #3721855
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...)
OP #3721893
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)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.