Hallo,
wie kann ich bei einem STM32 (hier ein STM32F103VB)gleich beim Flashen
des Programms auch die Option Bytes verändern (Setzen der Read Out
Protection)?
Ich stelle mir das so ähnlich skriptgesteuert vor, wie bei den AVRs mit
einer Batchdatei und mehreren AVRDUDE Aufrufen. Zur Verfügung stehen
momentan nur einfache Hilfsmittel wie CoIDE und ST-Link V2. Gibt es für
das ST-Link Utility Tool Kommandozeilenparameter? Eine Batchdatei mit
mehreren Aufrufen zum Programmieren und Setzen der Option Bytes wäre
vollkommen OK.
Wenn ich das richtig verstehe, könnte ich das mit einem J-Link Debugger
oder Falsher ARM von Segger und dem Tool J-Flash bewerkstelligen. Aber
gibt es auch ein Kommandozeilentool für den ST-Link?
Stefan K. schrieb:> Mit dem St-Link und dem STM ST-Link-Utility kannst Du das machen.> Für Scripts gibt es eine Command line Version (CL).
Ah super, danke für die Info. Das war mir nicht bekannt.
Ich habe mir nun eine einfache Batch Datei gebastelt, mit der ich per
ST-Link Adapter und ST-Link_CLI Tool meine Hex Datei programmieren kann.
Es wird auch ein Verify gemacht (-V) und die Readout Protection gesetzt.
Nur das Programm startet danach nicht automatisch. Aber das kann ich
verschmerzen.
Einfach folgendes in eine Textdatei kopieren, anpassen und als .bat
speichern.
Und wie geht das über den ROM-USB Bootloader?
'dfu-util --list' meint:
Found DFU: [0483:df11] ver=2200, devnum=116, cfg=1, intf=0,
path="3-1.4", alt=1, name="@Option Bytes /0x1FFFF800/01*016 e",
serial="FFFFFFFEFFFF"
Found DFU: [0483:df11] ver=2200, devnum=116, cfg=1, intf=0,
path="3-1.4", alt=0, name="@Internal Flash /0x08000000/032*0001Kg",
serial="FFFFFFFEFFFF"
also
'dfu-util -a 1 -i 0' und was dann?
Der Vollständigkeit halber: mit dfu-util geht das relativ einfach, ist
aber alles andere als komfortabel (soweit ich das ausprobiert hab, die
Dokumentation gibt da nicht viel her).
Mit einem STM32L433 zeigt dfu-util
Die Option Bytes sind also bei 0x1FFF7800.
Auslesen ist einfach nur:
1
$ dfu-util -a 1 -s 0x1FFF7800 -U option.bin
2
[...]
3
Limiting upload to end of memory segment, 40 bytes
4
Upload [=========================] 100% 40 bytes
5
Upload done.
Der unkomfortable Teil ist dann das Ändern der Option Bytes, da musste
erstmal der Hexeditor für herhalten.
Anschließend Schreibt man die Option Bytes wieder zurück. Man muss auch
nicht alles neu schreiben sondern kann auch nur ein paar Bytes in die
Datei packen und auch die Adresse anpassen. Die restlichen Bytes bleiben
dabei unverändert.
Zum Beispiel die ersten 4 Byte überschreiben:
1
$ dfu-util -a 1 -s 0x1FFF7800 -D option3.bin
2
[...]
3
Downloading to address = 0x1fff7800, size = 4
4
Download [ ] 0% 0 bytesdfu-util: Error during download get_status
Der Fehler kommt, weil der STM32 nach dem Schreiben einen Reset auslöst,
ist aber trotzdem erfolgreich.
Angeblich gibt es noch die Option :will-reset um das zu umgehen, aber
zumindest mein dfu-util 0.9 kennt das nicht.