Black Magic Probe

aus dem Wiki des Entropia e.V., CCC Karlsruhe
STM8SVLDISCOVERY: JTAG ist über CN5 herausgeführt. Der Pinheader muss selbst bestückt werden.
CN5: JTAG

        JRST/NTRST - (8) (7) - GND
              JTDI - (6) (5) - JTMS/SWDIO
        JTCK/SWCLK - (4) (3) - JTDO
                         (1) - +3v3 (nicht benötigt)
                       
CN7: UART (nach Flashen der BMP firmware)

                 (1) (2) (3) (4)
                      |   |   |
                     RX  GND  TX

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

Die zukünftige BMP z.B. über USB mit Strom versorgen und 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.

Nun sollte sich die BMP per USB melden (idVendor=0x1d50, idProduct=0x6018) und /dev/ttyACM{0,1} bereitstellen.

Herzlichen Glückwunsch!

Updaten

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/SWD an den Chip ranzukommen, am einfachsten geht das an C11).

Sollte das Betreten des Bootloaders aus der regulären Firmware nicht funktionieren kann der Bootloader auch so gestartet werden:

  • BMP stromlos machen
  • Pin 3 und 4 (GND und TX) des UART brücken
  • BMP wieder anstecken

Die LED sollte jetzt blinken und nur das DFU-Device über USB zu sehen sein. Kat3egorie:Projekte:Abgeschlossen