はじめに
ツイッターでRaspberryPi4が無いケースでOpenOCDでデバッグするにはどういう手段があるか。という話題が出た。
ARM-USB-TINY-H + ARM-JTAG-SWD
ARMのMCUのデバッグで安価で使い勝手が良いものとしてはARM-USB-TINY-Hが挙げられる。
しかしこのデバイスはSWDには対応していない。JTAG-SWDは乗っかる信号線はTMSとTCLKだが、JTAGしか理解できないデバッガはTMSにSWDIOが送られてきても理解できない。
ARM-JTAG-SWDはSWDIOで扱う信号をJTAGのTMS、TDI、TDOに適宜振り分けるアダプタとなっている(はず)。
接続
下記のように接続する。
Pico | ARM-JTAG-SWD |
---|---|
SWDIO | SWDIO(7) |
SWDCLK | SWDCLK(9) |
GND | GND(4,6,8,10,12,14,16,18,20) |
VSYS | VCC(1) |
デバッグ
OpenOCD
Pico SDKのOpenSDKを使用する。
${PICO_SDK_PATH}/../openocd/tcl/pico-jtag-swd.cfg
を下記の内容で作成する。
source [find interface/ftdi/olimex-arm-usb-tiny-h.cfg] source [find interface/ftdi/olimex-arm-jtag-swd.cfg] source [find target/rp2040.cfg] adapter speed 1000
クロック設定を忘れるとエラーになる。1000khzに得に根拠は無いので適宜最適値を探してほしい。
また、クロックを設定する際にadapter_khz
を使うとadapter speed
を使えと怒られる。
下記のコマンドで起動する。
$ cd ${PICO_SDK_PATH}/../openocd $ src/openocd -f pico-jtag-swd.cfg -s tcl
blinkを実行
pico-examplesのblinkを実行してみる。
OpenOCDとは別のターミナルで下記を実行する。
$ cd ${PICO_EXAMPLES_PATH}/build/blink $ gdb-multiarch blink.elf (gdb) target remote :3333 (gdb) mon reset init (gdb) load (gdb) c
LEDがチカチカした。
まとめ
ARM-USB-TINY-HはARM-JTAG-SWDアダプタを使えばPicoのデバッグができる。
JLinkはまだ対応中のようだ