MITOUJTAGとは何か
製品について
ご購入を検討中の方へ
サポート
JTAGについて
JTAG技術サービス(有料)
JTAG開発日記
JTAGを熱く語る

12月8日 JTAGとSWD
SWDって何?
JTAGは4本の線でICの内部回路と通信を行う汎用的なインタフェースです。内部回路と通信を行えるということは、CPUのデバッグにも使えるので、組み込みマイコンのデバッグ用インタフェースとして広がりを見せました。
しかし、信号線が4本必要になるということは小さなマイコンでは大きな問題となります。
32ピンや20ピン、8ピンくらいのマイコンにとっては4本ものI/Oがデバッグ用に使われてしまうということは大きなデメリットになります。
そこで、組み込みCPUの大手メーカーであるARM社は、Cortex用にSWD(Serial Wire Debug)という独自規格を定めました。
写真1 SWDの実例
IEEEも、一応、2本線でアクセスできるようにしたIEEE1149.7(Compact JTAG)という標準規格が定めました。IEEE1149.7とSWDは全く別物です。
SWDはよく使われているのに、cJTAGはほとんど使われていません。cJTAGのことは忘れてもいいくらいです。JTAG関連の規格では.1以外は驚くほど使われていないのです。
一方、ルネサスはFINEという1本線のデバッグプロトコルを策定しました。
SWDではバウンダリスキャンなどのJTAG本来の動作はできず、Cortexの中のデバッグ回路のレジスタに対して「32bitの値を書く」「32bitの値を読む」ということだけに特化した、独自のプロトコルになっています。
SWDの信号線
SWDでは、TDIとTDOが削除され、TMSがTDIとTDOを兼ねたような双方向の信号になります。
表1 JTAGとSWDの信号線
JTAGの信号 | SWDの信号 | 説明 |
---|---|---|
TCK | SWCLK | クロックです |
TMS | SWDIO | TDIとTDOを兼ねたような双方向の信号になっています。 |
TDI | なし | SWDでは削除されました |
TDO | なし | SWDでは削除されました |
TRST | なし |
コネクタは1mmピッチの小さなピンヘッダが使われ、ピン配置は図1のようになっています。
図1 SWDのピン配置
SWDでは、TMSとTDIとTDOを時分割多重化してSWDIOという信号にして送ります。クロック信号はSWCLKと呼ぶようになります。
JTAGからSWDへの切り替え
SWD/JTAG兼用のポートは電源投入直後はJTAGモードになっていて、SWDIOはTMSとして使われます。ここで、SWDIO(TMS)に特別なシーケンスを与えて、JTAGのTAPステートマシンを「ふつうはありえないような無意味な動かし方」をさせることで、SWDからJTAGに切り替えたり、逆にJTAGからSWDに切り替えたりするコマンド代わりに使っています。
具体的に言うと、
① SWDIO(TMS)をHに保ったまま、50回以上のTCKパルスを与える
② SWDIO(TMS)に、0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1というシーケンスを与える
③ SWDIO(TMS)をHに保ったまま、50回以上のTCKパルスを与える
図2 SWDの書き込み波形
このシーケンスを実行したとき、①でJTAGのTAPコントローラはRESETステートに入ります。
②のシーケンスではJTAGのステートマシンはRuntest/Idle→Select-DR-Scan→Select-IR-Scan→Test-Locig-Reset→Runtest/Idleをぐるぐる回るだけなので、結局のところ従来のJTAGデバイスに対して実行しても害はありません。
JTAG/SWD兼用のポートはこのシーケンスによってSWDに切り替わります。
SWDはどんなプロトコルなのか
IEEE1149.7(cJTAG)では1ビットごとにTDI,TMS,TDOの3ビットをマルチプレクスして送るのですが、SWDではパケットベースのプロトコルになっていて、切り替えの回数が減っています。
SWD書き込み
具体的には、ホストからターゲットに書き込むときには図3に示す波形となっています。
まず、ホストが8ビットのヘッダのようなものを送り、ターゲットからACKが返ってきたら、32bitのデータを送るというパケットになっています。APnDPのビットは、0ならばデバッグポートを操作し、1ならばアクセスポートを操作します。
図3 SWDの書き込み波形
SWD読み出し
ターゲットから読み出すときには図4に示す波形でやりとりします。もはやJTAGとは何の関係もないことがわかると思います。
図4 SWDの読み出し波形
デバッグポート・アクセスポート
デバッグポートとアクセスポートというのは、Cortexの中にあるデバッグインタフェースです。つまり、SWDはJTAGのIRやDRというアクセスはせず、ARMのデバッグ専用のプロトコルとなっています。
SWDのバージョン
SWDのプロトコルにはバージョン1とバージョン2があります。バージョン1では、デバッグアダプタとターゲットは1対1で接続しなければなりませんが、バージョン2では複数のターゲットをスター配線できるようになりました。このような接続をマルチドロップといいます。
図5 SWDバージョン1。1対1通信しかできない
図6 SWDバージョン2。複数のターゲットを接続できる
で、結局SWDって何なの?
SWDは、ARM社が定めたJTAGと共存可能な2線式のデバッグインタフェースです。JTAGとの互換性はなく、端子を共有しているだけにすぎません。特別なパターンをTMSに送ることでJTAGからSWDに切り替わります。
SWDのプロトコルは、ADI(ARM Debug Interface)v5とCoreSight用に特化されていて、ICの中に作られたデバッグポートやアクセスポートを通じて、レジスタに32bitの値を書き込んだり読み出したりする目的に特化されています。
デバッグ用のレジスタの機能はCoreSightの規格で定められていて、SWDはその物理層を担っているにすぎません。