FT232Hの方が最強かもしれない(2) – シリアルデバッグ編

今回は SWD、JTAG を使ってみよう編です。用意するものは抵抗器のみ(SWD の場合)です。

使用するソフト

おなじみ OpenOCD を使います。こちらは On-Chip-Debugger のオープンソース環境を提供してくれるものです。筆者はそれ以上の理解をしていませんのでこれくらいしか説明できません。。。

Mac の方は事前に FTDI 関係のドライバ kext を全て unload しておいてください

SWD

まずは ARM Cortex-M の2線シリアルデバッグ規格、SWD です。

参考サイト

前に FT2232D を用いた時に参考にしたサイトと同じです。リンクを示しておきますのでご参考にどうぞ。

Learn how to make flashing your ARM-based MCU easy by using OpenOCD debugger with an FT2232H adapter.

回路・コマンド

以下の表のようにターゲット(マイコン)と結線をしてください。

FT232HL側ピン ターゲット側ピン 備考
AD0(TCK) SWCLK
AD1(TDO) SWDIO
AD2(TDI) SWDIO 間に抵抗器を挟む

抵抗器の値ですが、上のサイトでは 470ohm です。僕は 390ohm が机の上に転がってましたのでそれを使って通信成功です。おそらく、100〜500 ohm 程度のものであればいいと思います(根拠はない)。
なんとこれだけでデバッグ環境が整います。OCD サーバを立てるなら以下のコマンドです。

$ openocd -f interface/ftdi/um232h.cfg -c "transport select swd" -f target/stm32f3x.cfg -c "ftdi_layout_signal SWD_EN -data 0"

書き込みだけやって終了する場合は以下。なんかもうシェル芸ですが。

$ echo /path/to/.elf | xargs -I {} openocd -f interface/ftdi/um232h.cfg -c "transport select swd" -f target/stm32f3x.cfg -c "ftdi_layout_signal SWD_EN -data 0" -c "program {};reset;exit"

JTAG

続いて LSI の検査規格、JTAG での書き込みです。こちらは信号線が増えます。

回路・コマンド

以下の表のようにターゲット(マイコン)と結線をしてください。合計4つのポートを接続する必要があります。

FT232HL側ピン ターゲット側ピン
AD0(TCK) TCK
AD1(TDO) TDI
AD2(TDI) TDO
AD3(TMS) TMS

TDI と TDO はクロス配線となることに注意してください。こちらは抵抗器が必要なくそのまま結線してしまえばいいです。

コマンドですが、先程のように SWD 関連の設定をする必要はありません。何も指定しないとデフォルトで JTAG になるようです(使用する cfg ファイルによるが)。

OCD サーバを立てるなら以下のコマンドです。とくに -c でコマンドを叩いてあげる必要はなくなります。

$ openocd -f interface/ftdi/um232h.cfg -f target/stm32f3x.cfg

書き込みだけやって終了する場合は以下。こちらもシンプル。

$ echo /path/to/.elf | xargs -I {} openocd -f interface/ftdi/um232h.cfg -f target/stm32f3x.cfg -c "program {};reset;exit"

というわけでデバッグへの応用でした。どちらもこの前の自作 CMSIS-DAP 基板に比べて動作がキビキビとしています。これでデバッガ基板を作成しても良いのですが、AD0 と AD1 はそれぞれ通常動作における TXD と RXD なんですよね。ですので何らかの切り替えスイッチが必要かと思われます。

残るは I2C?やりたくない・・・