そこで、正攻法のOpenOCDを使うことにしてみます。
Adafruitのドキュメントを見ながらインストールまで行います。
Raspberry PiのGPIOとターゲットを接続する。
GPIO #18 NRST
GPIO #24 DCLK
GPIO #25 DIO
※PIN番号ではなくGPIO番号
最新のOpenOCDでSTM32のFlash書き込みを行う - 参考になるかもしれないスクリプトを書いている。
Programming ARM Cortex (STM32) under GNU/Linux - telnetでOpenOCDにログインして直接やりとり。
とりあえず、OpenOCDのインストールまでは完了、ターゲットはSTM32F103、blue pillです。
Resetピン以外はすべてまとまっていて楽です。AdafruitのドキュメントによるとResetは別に必要ないかも。とのことで、そこらへんも含めてテストしてみます。
まず、ハマった。
Raspberry Pi A+の取り回しがいいのでリモートでつかえればいいだろうとそちらにOpenOCDを入れた。
OpenOCDを入れるのはPi2かPi3にしたほうが良さそう。まったくHowToが見つからない。
Pi2にOpenOCDをインストール後、またハマる。
STM32のメモリがロックされている。と言われる。
探ってみるとOpenOCDのコマンドで
stm32f2x unlock 0
として解除してやればいいらしい。
Armコミュニティが参考になった。
OpenOCDはスクリプトを書いて簡単に使えるらしいのだけど、ひとまず手動でやってみる。
Adafruitで解説されている通りのopenocd.cfgを書いて一部修正。
今回はターゲットがSTM32F103C8T6なので以下の様に。
set CHIPNAME stm32f103c8t6
source [find target/stm32f1x.cfg]
CHIPNAMEがどういう役割をしているのかよくわからない。
sudo openocdとして起動、うまく接続できていたらtelnetで接続。
同じマシンから作業するので telnet localhost 4444
stm32f1x unlock 0
flash write_image erase firmware.elf
reset halt
reset run
shutdown
platformioで簡単なプログラムを作ってビルドしたものを使ってる。
うまく書き込めた。よしよし。