Hallo, ich verwende einen STM32F303 und habe einen Code geschrieben, indem einfach nur eine LED eingeschaltet wird. Aus diesem Code habe ich ein File erstellt, welches 1160 Hex-Zahlen beinhaltet. Weiters habe ich ein Programm geschrieben, welches mit dem Bootloader über die UART kommuniziert und alle Commands (Get, Read Memory, Write Memory,..) wie im Datenblatt AN3155 beschrieben, beinhaltet. Nun bräuchte ich Hilfe, da ich nicht genau weiß, wie ich den STM32F303 mittels dem File programmieren soll. Zwei Dinge sind mir dabei etwas unklar: 1) Wenn ich es richtig verstanden habe, sollte es mit dem "Write Memory"-Command funktionieren. Nur leider kann ich mit diesem Befehl nur bis zu 256 Bytes in den RAM oder Flash-Speicher schreiben. Aber wie bereits erwähnt, hat das eine erstellte File aber 1160 Hex-Zahlen... 2) Kann mir jemand allgemein die Vorgehensweise zum flashen erklären? Muss ich einfach den "Write Memory"- und anschließend den "Go"-Befehl ausführen und das war's dann? Noch ein Hinweis: Ich weiß, dass es bereits Programme zum runterladen gibt, die das machen, was ich nun versuche zu ertellen. Ich möchte das aber gerne selber schaffen... Danke für eure Hilfe!
>Nur leider kann ich mit diesem Befehl nur >bis zu 256 Bytes in den RAM oder Flash-Speicher schreiben. Immerhin! Dieses "write mem" hat sicher einen Parameter, der die Zieladresse definiert. Was hältst Du davon, den geeignet zu setzen? Damit n Blöcke a 256Bytes + einen Block mit dem Rest schreiben. Zu dem Thema gibt es bei ST App-Note(s). Hast Du die konsultiert? >Ich möchte das aber gerne selber schaffen... Das ist löblich, schliesst aber nicht aus bei einem solchen Programm in den Source-Code zu spicken, wenn man nicht mehr weiter weiss.
har schrieb: > 1) Wenn ich es richtig verstanden habe, sollte es mit dem "Write > Memory"-Command funktionieren. Nur leider kann ich mit diesem Befehl nur > bis zu 256 Bytes in den RAM oder Flash-Speicher schreiben. Aber wie > bereits erwähnt, hat das eine erstellte File aber 1160 Hex-Zahlen... Du programmierst in 256 Byte Blöcken, in deinem Fall also 5 Blöcke (= 1280 Bytes). Im letzten Block füllst du die Bytes nach deiner Firmware mit 0xFF auf. Die Adresse beim Write Memory command inkrementiers du für jeden Block um 256. Der erste Block hat die Adresse 0x08000000. Bevor du einen Block schreiben kannst, musst du den entsprechenden Speicherbereich im Flash erstmal erasen. Es gibt 2 Erase Commands (Erase und Extended Erase), am besten erstmal mit Extended Erase versuchen, manche STM32 verstehen das "normale" Erase-Kommando nicht (wird dann mit einem NACK beantwortet). > 2) Kann mir jemand allgemein die Vorgehensweise zum flashen erklären? > Muss ich einfach den "Write Memory"- und anschließend den "Go"-Befehl > ausführen und das war's dann? Richtig. Du springst nach dem schreiben der Firmware mit dem Go-Command einfach an die Adresse 0x08000000. Wenn man es richtig gut machen will, liest man vor dem Go die geschriebenen Firmware-Blöcke nochmal mit Read Memory aus, um zu prüfen ob alles korrekt geschrieben wurde bevor man mit Go den Bootloader mode verlässt. Wenn ein Fehler passiert ist, könnte die Firmware dann nochmal geschrieben werden.
Vielen Dank, die Tipps haben mir sehr geholfen! Es funktioniert!! Nun hätte ich noch eine Frage: Das ganze funktioniert, wenn ich den Write- sowie Go-Befehl an Adresse 0x08000000 durchführe. Aber leider kann ich die Daten nicht an eine beliebige Adresse schreiben und ausführen. Im Grunde sollte die Vorgehensweise exakt die gleiche sein, nur dass ich halt eine andere Adresse angebe, oder?
Das funktioniert nicht, denn beim Booten erwartet der Bootloader an 0x08000000 (bzw. an 0x08000004) eine Adresse, an der dann ausführbarer Code zu finden ist. Ausserdem muss der Code immer für den entsprechenden Speicherbereich compiliert sein, sonst stimmen die verwendeten Adressen nicht mehr.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.