今回は SWD、JTAG を使ってみよう編です。用意するものは抵抗器のみ(SWD の場合)です。
使用するソフト
おなじみ OpenOCD を使います。こちらは On-Chip-Debugger のオープンソース環境を提供してくれるものです。筆者はそれ以上の理解をしていませんのでこれくらいしか説明できません。。。
Mac の方は事前に FTDI 関係のドライバ kext を全て unload しておいてください。
SWD
まずは ARM Cortex-M の2線シリアルデバッグ規格、SWD です。
参考サイト
前に FT2232D を用いた時に参考にしたサイトと同じです。リンクを示しておきますのでご参考にどうぞ。
回路・コマンド
以下の表のようにターゲット(マイコン)と結線をしてください。
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?やりたくない・・・