Memahami JTAG dan Debugging Inti Arm: ADI dan SWD Dijelaskan
Artikel ini mengungkap bagaimana JTAG terintegrasi ke dalam perangkat inti ARM, dengan fokus pada Antarmuka Debug Arm (ADI) dan protokol Serial Wire Debug (SWD).
Postingan sebelumnya dalam seri ini menjelajahi standar IEEE 1149.1, kontroler Port Akses Uji (TAP), dan mesin status TAP. Kami juga meninjau penampilan pin JTAG umum, konektor, dan sekumpulan probe debug yang tersedia di pasar.
Di sini kami beralih ke ekosistem ARM, mendetail bagaimana prosesor inti ARM yang umum menerapkan JTAG melalui ADI dan varian dua‑kabel SWD-nya.
Apa Itu ARM?
ARM menunjukkan arsitektur prosesor dan portofolio luas kekayaan intelektual yang mendefinisikan antarmuka mikroprosesor dan mikrokontroler. Sementara PC konsumen biasanya menggunakan x86, sistem tertanam hampir eksklusif bergantung pada inti ARM.
Kekayaan intelektual inti dilisensikan kepada pabrikan silikon—seperti STMicroelectronics, NXP, dan lainnya—yang kemudian menambahkan fitur periferal (I²C, SPI, ADC/DAC, USB, dll.). Arsitektur ARM versi (ARMv2, ARMv6, ARMv7, ARMv8, dll.), dan inti diberi merek ARMx (misalnya, ARM7) atau, lebih baru, sebagai seri Cortex‑A/R/M untuk kasus penggunaan aplikasi, waktu nyata, dan mikrokontroler. Versi arsitektur mengikuti sufiks Cortex, menghasilkan nama seperti ARMv7‑A atau ARMv6‑M.
Debugging di ARM diatur oleh arsitektur CoreSight, yang mencakup Antarmuka Debug Arm (ADI), Makrosel Lacak Terembed (ETM), Port Lacak Serial Tinggi Kecepatan (HSSTP), dan lacak alur program. ADI memberikan fondasi untuk debugging, menawarkan antarmuka JTAG dan alternatif Serial Wire Debug (SWD).
Ringkasan Antarmuka Debug Arm (ADI)
Spesifikasi ADI mendefinisikan antarmuka perangkat keras dan logis antara debugger host dan satu atau lebih perangkat ARM. Sebagian besar prosesor kontemporer mendukung ADIv5 (Arm IHI0031E), sementara ADIv6 (Arm IHI0074C) sedang diadopsi secara bertahap. Kami fokus pada ADIv5 di sini.
ADI memperkenalkan Port Akses Debug (DAP), yang terdiri dari Port Debug (DP) dan satu atau lebih Port Akses (AP). DP mengelola koneksi fisik (JTAG atau SWD) dan berisi register bawaan; AP menyediakan akses ke sumber daya sistem seperti register debug, port lacak, tabel ROM, atau memori sistem.
ADI mendukung dua tipe DP: JTAG‑DP dan SWD‑DP. AP hadir dalam tiga varian: MEM‑AP (akses terpeta memori), JTAG‑AP (pemindaian seluruh unit debug), dan AP spesifik vendor. MEM‑AP adalah yang paling umum.
Dalam konteks JTAG, ADIv5 menyediakan sekumpulan kode instruksi (misalnya, EXTEST, SAMPLE, PRELOAD, INTEST, CLAMP, HIGHZ, ABORT, DPACC, APACC, IDCODE, BYPASS) dan register data (ABORT, DPACC, APACC, IDCODE, BYPASS). Secara khusus, DPACC dan APACC memungkinkan debugger untuk mengeluarkan perintah ke register DP dan AP, masing‑masing.
Register DP umum meliputi:
- CTRL/STAT – mengontrol dan melaporkan status DP.
- DLCR – Kontrol Tautan Data, mengatur mode tautan.
- DLPIDR – ID Protokol Tautan Data, menunjukkan versi protokol.
- DPIDR – Identifikasi Port Debug.
- EVENTSTAT – memberikan sinyal peristiwa ke debugger eksternal.
- RDBUFF – Buffer Baca untuk operasi DP.
- SELECT – memilih AP dan bank registernya.
- TARGETID – mengidentifikasi target saat hanya satu perangkat yang terhubung.
Register MEM‑AP meliputi:
- CSW (0x00) – Kata Kontrol/Status.
- TAR (0x04) – Register Alamat Transfer.
- DRW (0x0C) – Register Baca/Tulis Data.
- BD0–BD3 (0x10–0x1C) – Register Data Banked.
- CFG (0xF4) – Konfigurasi.
- BASE (0xF8) – Alamat Dasar Debase.
- IDR (0xFC) – Register Identifikasi.
Gambar 1 mengilustrasikan kabel ADI dan peta register (tidak semua register ditampilkan untuk singkatnya).

Gambar 1. Diagram Antarmuka Debug Arm, meringkaskan koneksi. Tidak semua register DP/AP digambarkan.
Serial Wire Debug (SWD)
SWD adalah alternatif dua‑kabel JTAG dari ARM, dirancang untuk perangkat dengan jumlah pin terbatas. Banyak mikrokontroler Cortex‑M menggunakan SWD daripada JTAG lengkap untuk menghemat pin.
SWD mengganti pasangan JTAG TDI/TDO dengan satu pin SWDIO dua arah, menghapus pin TMS, dan mempertahankan jam (dilebelas SWCLK). Karena SWD menghapus mesin status TAP, perintah dikirim secara serial melalui SWDIO dan kemudian pin yang sama digunakan untuk transfer data.
Komunikasi berlangsung dalam tiga fase: permintaan paket, pengakuan, dan transfer data. Bit paritas digunakan seuruhnya. Urutan dimulai dengan bit Start (TINGGI), diikuti oleh bit AP/DP, bit RnW, bit alamat, paritas, bit Stop (RENDAH), dan bit Park. Setelah permintaan, target membalas dengan ACK 3‑bit. Untuk tulis, host mentransmisikan 32 bit data (bit terendah terlebih dahulu) dengan bit paritas; untuk baca, target mengemudi 32 bit data kembali ke host.
Gambar 2 menunjukkan diagram waktu untuk operasi baca dan tulis.

Gambar 2. Diagram waktu untuk operasi baca dan tulis Serial Wire Debug. Klik untuk memperbesar.
Terdapat dua versi SWD: SWDv1 (titik ke titik) dan SWDv2 (satu host, multi target). Versi 2 sebagian besar kompatibel mundur dengan perbedaan kasus tepi minor.
Varian JTAG dengan Pin Terbatas Lainnya
Di luar SWD, standar IEEE 1149.7 mendefinisikan antarmuka JTAG dua‑kabel. Standar IEEE 1149.x tambahan (1149.4 untuk uji sinyal campuran, 1149.6 untuk jaringan digital lanjutan) menyediakan kemampuan diperluas seperti boundary‑scan analog dan garis AC‑coupled diferensial.
Standar yang diperbarui dapat ditemukan di situs web IEEE Standards Association.
Kesimpulan
Kami telah menelusuri asal JTAG, memeriksa implementasi fisiknya, dan menjelajahi bagaimana prosesor inti ARM menyesuaikan JTAG melalui protokol ADI dan SWD. Dengan pengetahuan ini, insinyur dapat dengan yakni debug dan memprogram perangkat tertanam, memilih antarmuka yang sesuai dengan keterbatasan perangkat keras mereka.