組み込み実践編 ③:JTAG・デバッガ編
はじめに
シリアルコンソール(A-2)はあくまで「機器側が能動的に喋ってくれる情報」しか見えません。
ブートローダより前の段階で止まっている、あるいは実行中のCPUのレジスタやメモリを直接覗きたい、という場面では、JTAG/SWD経由のデバッガが必要になります。
本記事では手持ちの各種デバッガを比較しながら、JTAG/SWDの基本的な使い方と、接続確認の切り分け手順を扱います。
JTAG/SWDでできること・できないこと
最初に前提を1つだけ整理します。JTAGとSWDは別プロトコルです。
-
JTAG:TCK/TMS/TDI/TDOを使う多ピン構成(FPGAや一部MCUで利用)
-
SWD:SWCLK/SWDIOを使う2線構成(主にARM Cortex-Mで利用)
-
できること:CPUの停止・ステップ実行、レジスタ/メモリの直接読み書き、フラッシュへの書き込み、ブートローダより前の段階でのデバッグ
-
できないこと(苦手なこと):長時間のログ収集(基本は「今の瞬間」を覗く道具)や、通信プロトコル内容の広域観測(基本はA-4のロジアナやA-2のシリアルの領分)。トレース機能で補助できる場合もあるが、一部デバッガ・チップの組み合わせでは専用のトレースピンやコネクタが別途必要になる点に注意
手持ちデバッガの比較
今回は実際に手元にある機材で比較します(棚卸し済み)。
まずは本記事の中心であるJTAG/SWD系の機材です。
| デバッガ | 対応プロトコル | 対応 | 特徴 |
|---|---|---|---|
| ST-LINK V2/V3(純正) | SWD/JTAG | STM32系 | 純正だけあって安定。STM32CubeProgrammerとの相性が良い |
| ST-LINKクローン(×3) | SWD/JTAG(JTAGモードは製品・ファームウェアによって個体差あり) | STM32系 | 安価。基本動作は問題ないことが多いが、まれに認識や書き込み速度で純正と差が出る |
| J-Link OB(×2) | SWD/JTAG | Cortex-M/A系 広く対応 | 対応チップの幅が広く、RTOS Awareness等の機能が強力。評価ボード内蔵版(On-Board)として見かけることが多く、外部ターゲットへの接続可否や使える機能は製品によって異なる |
| DAPLink(×4) | SWD | Cortex-M系 | CMSIS-DAP準拠。オープンでファームウェア更新もしやすい |
| Xilinx Platform Cable USB II | JTAG | Xilinx FPGA系 | FPGAのコンフィグレーション・デバッグ用。MCU向けデバッガとは毛色が違うが、考え方(JTAG経由でチップの中に直接アクセスする)は同じ |
JTAG/SWD以外にも、ベンダー独自I/Fや派生I/Fを使う機材があります。ここは「同じ配線・同じ手順で使える」と誤解しないため、分けて見た方が安全です。
| ツール | 主なプロトコル/I/F | 対応 | 特徴 |
|---|---|---|---|
| E2 Lite | JTAG/SWD/FINE/UART など(対象MCU依存) | ルネサス系 | ルネサスマイコン向け純正デバッガ。対象デバイスによって使うI/Fが変わる |
| PICkit3 | ICSP | PIC系 | Microchip PIC向け。JTAG/SWDではなくPIC系の書き込み・デバッグ用I/Fを使う |

FPGA開発をやっているとこのXilinx純正のJTAGケーブルにもお世話になります。MCU用デバッガとは対象チップの種類が違いますが、「JTAG経由でチップの内部に直接アクセスする」という基本思想は共通です。
コラム:純正デバッガ vs クローンデバッガ
現場でもよく話題になる「クローンで十分か問題」について、実機を比較して感じたことをまとめます。
- 速度:純正の方がフラッシュ書き込みが速い傾向(特に大容量フラッシュで体感差が出やすい)
- 安定性:クローンでも大半のケースは問題なく動くが、ごく稀にUSB切断・認識ロストが発生することがある
- 公式ツールとの連携:ベンダー公式の統合開発環境(STM32CubeIDE等)は純正デバッガでの動作を前提にしていることが多く、クローンだと一部機能(トレース系など)が制限される場合がある
- 判断の目安:量産治具や長時間の自動テストに使うなら純正、机上でのちょっとした書き込み・デバッグならクローンで十分、というのが実感
接続確認の切り分け手順

今回の切り分け手順は、上のようなZynq搭載ボード(EBAZ4205)を対象にした実体験がベースになっています。
JTAG/SWDが「繋がらない」と言われたときのチェックリストです。
- 電源は入っているか:デバッガ側から見て、ターゲット基板の電源電圧が来ているか
- 基準電圧は見えているか:VTref/VREFが正しく接続され、デバッガ側がターゲットI/O電圧を認識できているか
-
配線は正しいか:
- SWDの場合:SWCLK/SWDIO/GND(+必要ならnRESET)
- JTAGの場合:TCK/TMS/TDI/TDO/GND(+必要ならnTRST/nRESET/VTref)
- あわせて、nRESET/nTRSTがどこにもプルアップされずフローティングになっていないかも確認(フローティングのままだと不定動作でリセットがかかり続け、接続が不安定になることがある)
- デバッガ自体は認識されているか:PC側のデバイスマネージャ等でデバッガが認識されているか(ここがダメならUSBケーブル・ドライバの問題)
- ターゲット設定でデバッグが無効化されていないか:デバッグロック(RDP/セキュリティ設定)や低消費電力設定、デバイスによってはブートピン設定の影響も確認する
- クロック速度設定は適切か:デバッガ側のデバッグクロック(SWDクロックやJTAGのTCK)が速すぎて認識できないケースがあるので、まず低速設定で試す
- 他のツールから専有されていないか:別のIDEやデバッグサーバ(OpenOCD/J-Link GDB Server等)がデバッガを掴んだままになっていないか
まとめ
- JTAG/SWDは「今この瞬間のCPUの中身」を直接覗ける、シリアルにはできない役割を持つ道具
- 純正 vs クローンは「量産・自動化なら純正、机上デバッグならクローンで十分」が実感ベースの目安
- 繋がらない時は、電源→VTref/VREF→配線(JTAG/SWDを区別)→デバイス認識→デバッグ無効化設定→クロック速度→占有状況、の順に切り分けると早い
次回(A-4)は、信号そのものを波形として見るオシロスコープ・ロジックアナライザを扱います。