Comprendre JTAG et le débogage des cœurs Arm : ADI et SWD expliqués
Cet article démystifie l'intégration de JTAG dans les dispositifs à cœurs Arm, en se concentrant sur l'interface de débogage Arm (ADI) et le protocole Serial Wire Debug (SWD).
Les articles précédents de cette série ont exploré la norme IEEE 1149.1, le contrôleur Test Access Port (TAP) et la machine d'état TAP. Nous avons également passé en revue les broches JTAG courantes, les connecteurs et la gamme de sondes de débogage disponibles sur le marché.
Ici, nous pivotons vers l'écosystème Arm, détaillant comment les processeurs à cœurs Arm omniprésents implémentent JTAG via ADI et sa variante à deux fils SWD.
Qu'est-ce qu'Arm ?
Arm désigne une architecture de processeur et un vaste portefeuille de propriété intellectuelle qui définit les interfaces de microprocesseurs et microcontrôleurs. Alors que les PC grand public utilisent généralement x86, les systèmes embarqués reposent presque exclusivement sur des cœurs Arm.
La propriété intellectuelle du cœur est concédée sous licence aux fabricants de silicium — tels que STMicroelectronics, NXP et autres — qui ajoutent ensuite des fonctionnalités périphériques (I²C, SPI, ADC/DAC, USB, etc.). Les architectures Arm sont versionnées (Armv2, Armv6, Armv7, Armv8, etc.), et les cœurs sont marqués Armx (ex. : ARM7) ou, plus récemment, sous forme de séries Cortex-A/R/M pour les cas d'usage application, temps réel et microcontrôleur. Le versionnage d'architecture suit le suffixe Cortex, donnant des noms comme Armv7-A ou Armv6-M.
Le débogage dans Arm est régi par l'architecture CoreSight, qui englobe l'interface de débogage Arm (ADI), la macrocellule de trace embarquée (ETM), les ports de trace série haute vitesse (HSSTP) et le tracé de flux de programme. L'ADI fournit la base pour le débogage, offrant à la fois une interface JTAG et l'alternative Serial Wire Debug (SWD).
Vue d'ensemble de l'interface de débogage Arm (ADI)
La spécification ADI définit les interfaces matérielles et logiques entre un débogueur hôte et un ou plusieurs dispositifs Arm. La plupart des processeurs contemporains prennent en charge ADIv5 (Arm IHI0031E), tandis qu'ADIv6 (Arm IHI0074C) est adopté progressivement. Nous nous concentrons sur ADIv5 ici.
ADI introduit le Debug Access Port (DAP), composé d'un Debug Port (DP) et d'un ou plusieurs Access Ports (AP). Le DP gère la connexion physique (JTAG ou SWD) et contient des registres intégrés ; les AP fournissent l'accès aux ressources système telles que les registres de débogage, les ports de trace, les tables ROM ou la mémoire système.
ADI prend en charge deux types de DP : JTAG-DP et SWD-DP. Les AP se déclinent en trois saveurs : MEM-AP (accès mémoire-mappé), JTAG-AP (balayage de toute l'unité de débogage) et AP spécifiques au vendeur. Les MEM-AP sont les plus courants.
Dans le contexte de JTAG, ADIv5 fournit un ensemble de codes d'instruction (ex. : EXTEST, SAMPLE, PRELOAD, INTEST, CLAMP, HIGHZ, ABORT, DPACC, APACC, IDCODE, BYPASS) et registres de données (ABORT, DPACC, APACC, IDCODE, BYPASS). Notamment, DPACC et APACC permettent au débogueur d'émettre des commandes vers les registres DP et AP, respectivement.
Les registres DP typiques incluent :
- CTRL/STAT — contrôle et rapporte l'état du DP.
- DLCR — Data Link Control, définissant le mode de liaison.
- DLPIDR — Data Link Protocol ID, indiquant la version du protocole.
- DPIDR — Debug Port Identification.
- EVENTSTAT — signale des événements au débogueur externe.
- RDBUFF — Read Buffer pour les opérations DP.
- SELECT — sélectionne un AP et sa banque de registres.
- TARGETID — identifie la cible quand un seul dispositif est connecté.
Les registres MEM-AP incluent :
- 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) — Configuration.
- BASE (0xF8) — Debase Base Address.
- IDR (0xFC) — Identification Register.
La Figure 1 illustre le câblage ADI et la carte des registres (tous les registres ne sont pas montrés pour la brièveté).

Figure 1. Diagramme de l'interface de débogage Arm, résumant les connexions. Tous les registres DP/AP ne sont pas représentés.
Serial Wire Debug (SWD)
SWD est l'alternative JTAG à deux fils d'Arm, conçue pour les dispositifs à nombre de broches limité. De nombreux microcontrôleurs Cortex-M emploient SWD au lieu du JTAG complet pour économiser des broches.
SWD remplace la paire JTAG TDI/TDO par une broche bidirectionnelle unique SWDIO, élimine la broche TMS et conserve l'horloge (renommée SWCLK). Comme SWD omet la machine d'état TAP, les commandes sont envoyées en série sur SWDIO et puis la même broche est utilisée pour le transfert de données.
La communication se déroule en trois phases : requête de paquet, acquittement et transfert de données. Un bit de parité est utilisé tout au long. La séquence commence par un bit de Start (HAUT), suivi du bit AP/DP, bit RnW, bits d'adresse, parité, bit Stop (BAS) et bit Park. Après la requête, la cible répond avec un ACK de 3 bits. Pour les écritures, l'hôte transmet 32 bits de données (bit de poids faible d'abord) avec un bit de parité ; pour les lectures, la cible renvoie 32 bits de données vers l'hôte.
La Figure 2 présente le diagramme de timing pour les opérations de lecture et écriture.

Figure 2. Diagrammes de timing pour les opérations de lecture et écriture Serial Wire Debug. Cliquez pour agrandir.
Deux versions SWD existent : SWDv1 (point-à-point) et SWDv2 (hôte unique, multi-cibles). La version 2 est largement rétrocompatible avec des différences mineures en cas limites.
Autres variantes JTAG à broches réduites
Au-delà de SWD, la norme IEEE 1149.7 définit une interface JTAG à deux fils. Des normes IEEE 1149.x supplémentaires (1149.4 pour test mixte-signal, 1149.6 pour réseaux numériques avancés) fournissent des capacités étendues telles que le boundary-scan analogique et les lignes différentielles à couplage AC.
Les normes mises à jour sont disponibles sur le site de l'IEEE Standards Association.
Conclusion
Nous avons tracé les origines de JTAG, examiné son implémentation physique et exploré comment les processeurs à cœurs Arm adaptent JTAG via les protocoles ADI et SWD. Armés de cette connaissance, les ingénieurs peuvent déboguer et programmer en toute confiance les dispositifs embarqués, sélectionnant l'interface appropriée pour leurs contraintes matérielles.
Embarqué
- Arm introduit le support d'instructions personnalisées pour les cœurs Cortex-M, élargissant la flexibilité
- Solutions fiables de mise sous tension pour dispositifs médicaux à batterie
- Mouser Référence les IMU ADIS1647x d'Analog Devices : Navigation Précise pour IoT, UAV et AR/VR
- ams et Face++ Partenariat pour Accélérer la Détection Optique 3D et le Déploiement de la Reconnaissance Faciale
- Marvell approfondit alliance stratégique avec Arm pour moteurs processeurs serveur ThunderX next-gen
- Suivi des avancées technologiques dans les dispositifs médicaux
- Infineon lance le contrôleur moteur IMC300 avec Cortex-M0 intégré pour flexibilité accrue
- ADI ADM2867E : Transcepteur RS‑485 isolé intégré avec convertisseur DC/DC pour applications gain de place
- Arm renforce la connectivité et la gestion d'appareils IoT via l'acquisition de Stream Technologies