STM32 serial bootloader flash tool
Verfasst: Mi Feb 05, 2014 11:50 am
Ich muss im Moment Firmware für STM32F2 Mikrocontroller schreiben und bin über das Problem gestolpert, diesen auch über den seriellen Bootloader zu Programmieren.
Dafür gibt es nicht viele Tools und keins wollte bei mir Funktionieren. Bis ich ein Python Script gefunden habe, das zwar für Python 2.6 geschrieben wurde, aber immerhin veränderbar ist. Das Tool stammt von "Ivan A-R" und wurde von mir nur angepasst.
Um meine Bemühungen das Script nach Python 3.3 nicht verlieren zu lassen, will ich es hier mit der Welt teilen.
Bisher habe ich nur das flashen auf einem STM32F207 probiert, es kann und es wird vorkommen, dass es für andere Controller nicht funktioniert.
Ein Knackpunkt ist das Erase-Kommando:
Es gibt in der Protokollbeschreibung(AN3155) den Hinweis, dass es zwei unterschiedliche Kommandos gibt: 0x43 und 0x44, die Exklusiv sind, entweder gibt es das eine, oder das andere.
Wenn man einen Controller mit 0x43 hat, dann muss man das Kommando in der Funktion cmdEraseMemory anpassen sowie die Daten die gesendet werden(Das ist dann nur noch 1 Byte + Prüfsumme)
Es kann passieren, das Lesevorgänge exceptions auslösen, da ungültige Notationen verwendet wurden. Die "map" Funktion hat eine andere Funktionalität bekommen.
Zudem muss ein byte für die serielle Schnittstelle folgendermaßen übertragen werden:
damit es ordnungsgemäß übertragen wird. Andere aufrufe könnten dazu führen, dass 0en Übertragen werden.
Mit freundlichen Grüßen
cloidnerux
Dafür gibt es nicht viele Tools und keins wollte bei mir Funktionieren. Bis ich ein Python Script gefunden habe, das zwar für Python 2.6 geschrieben wurde, aber immerhin veränderbar ist. Das Tool stammt von "Ivan A-R" und wurde von mir nur angepasst.
Um meine Bemühungen das Script nach Python 3.3 nicht verlieren zu lassen, will ich es hier mit der Welt teilen.
Bisher habe ich nur das flashen auf einem STM32F207 probiert, es kann und es wird vorkommen, dass es für andere Controller nicht funktioniert.
Ein Knackpunkt ist das Erase-Kommando:
Es gibt in der Protokollbeschreibung(AN3155) den Hinweis, dass es zwei unterschiedliche Kommandos gibt: 0x43 und 0x44, die Exklusiv sind, entweder gibt es das eine, oder das andere.
Wenn man einen Controller mit 0x43 hat, dann muss man das Kommando in der Funktion cmdEraseMemory anpassen sowie die Daten die gesendet werden(Das ist dann nur noch 1 Byte + Prüfsumme)
Es kann passieren, das Lesevorgänge exceptions auslösen, da ungültige Notationen verwendet wurden. Die "map" Funktion hat eine andere Funktionalität bekommen.
Zudem muss ein byte für die serielle Schnittstelle folgendermaßen übertragen werden:
Code: Alles auswählen
self.sp.write(bytes([c]))
Mit freundlichen Grüßen
cloidnerux