JTAG en Arm Core Debugging begrijpen: ADI en SWD uitgelegd
Dit artikel demystificeert hoe JTAG geïntegreerd is in ARM core apparaten, met focus op de Arm Debug Interface (ADI) en het Serial Wire Debug (SWD) protocol.
Eerdere posts in deze serie verkenden de IEEE 1149.1 standaard, de Test Access Port (TAP) controller en de TAP state machine. We keken ook naar veelvoorkomende JTAG pinouts, connectors en de reeks marktbare debug probes.
Hier schakelen we over naar het ARM-ecosysteem, met details over hoe de alomtegenwoordige ARM core processoren JTAG implementeren via ADI en zijn tweedraads SWD variant.
Wat is ARM?
ARM duidt op een processorarchitectuur en een uitgebreid portfolio van intellectueel eigendom dat microprocessor- en microcontroller-interfaces definieert. Terwijl consumenten-PC's typisch x86 gebruiken, vertrouwen embedded systemen bijna uitsluitend op ARM-kernen.
Kern intellectueel eigendom wordt gelicentieerd aan siliciumfabrikanten – zoals STMicroelectronics, NXP en anderen – die vervolgens perifere features toevoegen (I²C, SPI, ADC/DAC, USB, etc.). ARM-architectures zijn versie-geversioneerd (ARMv2, ARMv6, ARMv7, ARMv8, etc.), en de kernen zijn gebrand als ARMx (bijv. ARM7) of, recenteller, als Cortex-A/R/M series voor applicatie, real-time en microcontroller use cases. Architectuurversioneering volgt de Cortex-suffix, wat namen oplevert als ARMv7-A of ARMv6-M.
Debugging in ARM wordt geregeld door de CoreSight-architectuur, die de Arm Debug Interface (ADI), Embedded Trace Macrocell (ETM), High-Speed Serial Trace Ports (HSSTP) en program-flow trace omvat. De ADI biedt de basis voor debugging, met zowel een JTAG-interface als de Serial Wire Debug (SWD) alternatief.
Arm Debug Interface (ADI) Overzicht
De ADI-specificatie definieert zowel de hardware- als logische interfaces tussen een host debugger en een of meer ARM-apparaten. Meestere contemporaine processoren ondersteunen ADIv5 (Arm IHI0031E), terwijl ADIv6 (Arm IHI0074C) geleidelijk wordt aangenomen. We focussen op ADIv5 hier.
ADI introduceert de Debug Access Port (DAP), samengesteld uit een Debug Port (DP) en een of meer Access Ports (APs). De DP beheert de fysieke verbinding (JTAG of SWD) en bevat ingebouwde registers; APs bieden toegang tot systeembronnen zoals debug registers, trace ports, ROM-tabellen of systeemgeheugen.
ADI ondersteunt twee DP-types: JTAG-DP en SWD-DP. APs komen in drie smaken: MEM-AP (memory-mapped toegang), JTAG-AP (scannen van de hele debug unit) en vendor-specifieke APs. MEM-APs zijn de meest voorkomende.
In de context van JTAG levert ADIv5 een set instructiecodes (bijv. EXTEST, SAMPLE, PRELOAD, INTEST, CLAMP, HIGHZ, ABORT, DPACC, APACC, IDCODE, BYPASS) en data registers (ABORT, DPACC, APACC, IDCODE, BYPASS). Opvallend zijn DPACC en APACC die de debugger in staat stellen om commando's te geven aan de DP en AP registers respectievelijk.
Typische DP registers omvatten:
- CTRL/STAT – controleert en rapporteert DP-status.
- DLCR – Data Link Control, stelt link mode in.
- DLPIDR – Data Link Protocol ID, geeft protocolversie aan.
- DPIDR – Debug Port Identificatie.
- EVENTSTAT – signaleert events naar de externe debugger.
- RDBUFF – Read Buffer voor DP-operaties.
- SELECT – selecteert een AP en zijn registerbank.
- TARGETID – identificeert het target wanneer slechts één apparaat is aangesloten.
MEM-AP registers omvatten:
- CSW (0x00) – Control/Status Word.
- TAR (0x04) – Transfer Address Register.
- DRW (0x0C) – Data Read/Write register.
- BD0–BD3 (0x10–0x1C) – Banked Data registers.
- CFG (0xF4) – Configuratie.
- BASE (0xF8) – Debase Basisadres.
- IDR (0xFC) – Identificatierregister.
Figuur 1 illustreert de ADI-wiring en registermap (niet alle registers zijn getoond voor beknoptheid).

Figuur 1. Arm Debug Interface diagram, verbindingen samengevat. Niet alle DP/AP registers zijn afgebeeld.
Serial Wire Debug (SWD)
SWD is ARM's tweedraads JTAG-alternatief, ontworpen voor apparaten met beperkte pin-aantallen. Veel Cortex-M microcontrollers gebruiken SWD in plaats van volledige JTAG om pinnen te besparen.
SWD vervangt het JTAG TDI/TDO paar door een enkele bidirectionele SWDIO-pin, elimineert de TMS-pin en behoudt de klok (herlabeld SWCLK). Omdat SWD de TAP state machine weglaat, worden commando's serieel over SWDIO verstuurd en vervolgens wordt dezelfde pin gebruikt voor data-overdracht.
Communicatie verloopt in drie fasen: packet request, acknowledgment en data transfer. Een parity bit wordt doorheen gebruikt. De sequentie begint met een Start bit (HOOG), gevolgd door de AP/DP bit, RnW bit, adresbits, parity, Stop bit (LAAG) en Park bit. Na de request antwoordt het target met een 3-bit ACK. Voor writes verstuurt de host 32 bits data (least-significant bit first) met een parity bit; voor reads drijft het target 32 bits data terug naar de host.
Figuur 2 presenteert het timing diagram voor read en write operaties.

Figuur 2. Timing diagrammen voor Serial Wire Debug read en write operaties. Klik om te vergroten.
Twee SWD-versies bestaan: SWDv1 (point-to-point) en SWDv2 (single-host, multi-target). Versie 2 is grotendeels backward compatible met kleine edge-case verschillen.
Andere Reduced-Pin JTAG Varianten
Naast SWD definieert de IEEE 1149.7 standaard een tweedraads JTAG-interface. Extra IEEE 1149.x standaarden (1149.4 voor mixed-signal test, 1149.6 voor geavanceerde digitale netwerken) bieden uitgebreide mogelijkheden zoals analog boundary-scan en differentiële AC-gekoppelde lijnen.
Geüpdatete standaarden zijn te vinden op de IEEE Standards Association website.
Conclusie
We hebben de oorsprong van JTAG getraceerd, de fysieke implementatie onderzocht en verkend hoe ARM core processoren JTAG aanpassen via de ADI en SWD protocollen. Gewapend met deze kennis kunnen ingenieurs met vertrouwen embedded apparaten debuggen en programmeren, de juiste interface selecterend voor hun hardwarebeperkingen.
Ingebed
- Spoelen Uitgelegd: Typen, Functies, en Toepassingen
- Ankerlier-veiligheidsinrichtingen: essentiële bescherming voor maritieme operaties
- Arm introduceert custom-instructieondersteuning voor Cortex‑M-kernen, vergroot flexibiliteit
- Betrouwbare power-on oplossingen voor batterij-gedreven medische apparaten
- Mouser levert Analog Devices ADIS1647x IMU's: precisienavigatie voor IoT, UAV's en AR/VR
- ams & Face++ partnerschap versnelt 3D‑optische sensing voor snellere gezichtsherkenning‑implementatie
- Marvell versterkt strategische alliantie met Arm voor next-gen ThunderX-serverprocessoren
- Vooruitgang in medische apparaattechnologie volgen
- Infineon onthult IMC300 motorcontroller met geïntegreerde Arm Cortex-M0 voor verbeterde flexibiliteit
- ADI lanceert ADM2867E: Geïntegreerde geïsoleerde RS‑485-transceiver met DC/DC-converter voor ruimtebesparende toepassingen
- Arm Versterkt IoT Connectiviteit En Apparaatbeheer Door Overname Van Stream Technologies