Wir haben einen Satz Black Magic Probes (Homepage, Quellcode) auf Basis von STM8Discovery Eval Boards (Data Sheet, Digikey: 5,70€) gebaut (die Platform im Quellcode heißt swlink
).
Von den Eval Boards wird nur die obere Hälfte (die mit dem USB Connector) verwendet; diese enthält den ST-Link. Die untere Hälfte wird nicht benötigt und kann abgetrennt und fachgerecht entsorgt werden.
Flashen
OpenOCD starten, zum Beispiel (entsprechend des verwendeten Programmers anpassen):
sudo openocd -f interface/olimex-arm-usb-tiny-h.cfg -f target/stm32f1x.cfg
Dann per telnet 4444
verbinden. Zuerst müssen Speicherbank und einzelne Sektoren unlockt werden (nachprüfen über flash info 0
; nur die gesperrten Sektoren entsperren und nicht "alle", sonst schlägt dies warum auch immer fehl). Dann Chip resetten und Bootloader und Firmware flashen (absolute Pfade verwenden!):
> stm32f1x unlock 0 stm32x unlocked. INFO: a reset or power cycle is required for the new settings to take effect. > flash protect 0 0 7 off cleared protection for sectors 0 through 7 on flash bank 0 > reset > flash write_image erase unlock /.../blackmagic/src/blackmagic_dfu.bin 0x08000000 auto erase enabled auto unlock enabled aligned end protect sector to a 4 sector boundary wrote 7168 bytes from file /.../blackmagic/src/blackmagic_dfu.bin in 0.877855s (7.974 KiB/s) > flash write_image erase unlock /.../blackmagic/src/blackmagic.bin 0x08002000 auto erase enabled auto unlock enabled aligned end protect sector to a 4 sector boundary wrote 50176 bytes from file /.../blackmagic/src/blackmagic.bin in 3.347591s (14.637 KiB/s) > reset halt JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3) JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020, part: 0x6410, ver: 0x1) target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x080016b8 msp: 0x20005000
Nach dem Bootloader flashen hätte die Firmware auch über dfu-util
geflasht werden können.
Sobald die BMP-Firmware läuft kann die BMP selbst nicht mehr über JTAG beflasht werden - dann kann nur noch über dfu-util
neue Firmware geflasht werden (es kann natürlich immer noch nRESET während des Poweron auf GND gezogen werden, um das Starten der Firmware zu verhindern und wieder per JTAG an den Chip ranzukommen).
Nun sollte sich die BMP per USB melden (idVendor=0x1d50
, idProduct=0x6018
) und /dev/ttyACM{0,1}
bereitstellen.
Herzlichen Glückwunsch!