みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

Raspberry Pi Pico ARM-USB-TINY-H + ARM-JTAG-SWDでデバッグ

はじめに

ツイッターで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に適宜振り分けるアダプタとなっている(はず)。

f:id:mickey_happygolucky:20210224070715p:plain
回路図

接続

下記のように接続する。

Pico ARM-JTAG-SWD
SWDIO SWDIO(7)
SWDCLK SWDCLK(9)
GND GND(4,6,8,10,12,14,16,18,20)
VSYS VCC(1)

PlatformIOのOlimex ARM-USB-TINY-H

デバッグ

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がチカチカした。

f:id:mickey_happygolucky:20210224071249g:plain
Lチカ

まとめ

ARM-USB-TINY-HはARM-JTAG-SWDアダプタを使えばPicoのデバッグができる。

JLinkはまだ対応中のようだ

参考