Entendendo JTAG e Depuração de Núcleo Arm: ADI e SWD Explicados
Este artigo desmistifica como JTAG é integrado em dispositivos de núcleo ARM, focando na Interface de Depuração Arm (ADI) e no protocolo Serial Wire Debug (SWD).
Posts anteriores nesta série exploraram o padrão IEEE 1149.1, o controlador Test Access Port (TAP) e a máquina de estados TAP. Também revisamos pinouts JTAG comuns, conectores e a gama de probes de depuração disponíveis no mercado.
Aqui pivotamos para o ecossistema ARM, detalhando como os onipresentes processadores de núcleo ARM implementam JTAG através da ADI e sua variante de dois fios SWD.
O que é ARM?
ARM denota uma arquitetura de processador e um vasto portfólio de propriedade intelectual que define interfaces de microprocessador e microcontrolador. Enquanto PCs de consumo tipicamente usam x86, sistemas embarcados quase exclusivamente dependem de núcleos ARM.
Propriedade intelectual de núcleo é licenciada para fabricantes de silício — como STMicroelectronics, NXP e outros — que então adicionam recursos periféricos (I²C, SPI, ADC/DAC, USB, etc.). Arquiteturas ARM são versionadas (ARMv2, ARMv6, ARMv7, ARMv8, etc.), e os núcleos são marcados como ARMx (ex.: ARM7) ou, mais recentemente, como séries Cortex-A/R/M para casos de uso de aplicação, tempo real e microcontrolador. Versionamento de arquitetura segue o sufixo Cortex, resultando em nomes como ARMv7-A ou ARMv6-M.
Depuração em ARM é governada pela arquitetura CoreSight, que abrange a Interface de Depuração Arm (ADI), Embedded Trace Macrocell (ETM), Portas Serial de Traço de Alta Velocidade (HSSTP) e traço de fluxo de programa. A ADI fornece a base para depuração, oferecendo tanto uma interface JTAG quanto a alternativa Serial Wire Debug (SWD).
Visão Geral da Interface de Depuração Arm (ADI)
A especificação ADI define tanto as interfaces de hardware quanto lógicas entre um depurador host e um ou mais dispositivos ARM. A maioria dos processadores contemporâneos suporta ADIv5 (Arm IHI0031E), enquanto ADIv6 (Arm IHI0074C) está sendo adotada gradualmente. Focamos em ADIv5 aqui.
ADI introduz a Debug Access Port (DAP), composta por uma Debug Port (DP) e uma ou mais Access Ports (APs). A DP gerencia a conexão física (JTAG ou SWD) e contém registradores embutidos; APs fornecem acesso a recursos do sistema como registradores de depuração, portas de traço, tabelas ROM ou memória do sistema.
ADI suporta dois tipos de DP: JTAG-DP e SWD-DP. APs vêm em três sabores: MEM-AP (acesso mapeado em memória), JTAG-AP (varredura de toda unidade de depuração), e APs específicos de fornecedor. MEM-APs são os mais comuns.
No contexto de JTAG, ADIv5 fornece um conjunto de códigos de instrução (ex.: EXTEST, SAMPLE, PRELOAD, INTEST, CLAMP, HIGHZ, ABORT, DPACC, APACC, IDCODE, BYPASS) e registradores de dados (ABORT, DPACC, APACC, IDCODE, BYPASS). Notavelmente, DPACC e APACC permitem que o depurador emita comandos para registradores DP e AP, respectivamente.
Registradores DP típicos incluem:
- CTRL/STAT — controla e reporta status da DP.
- DLCR — Data Link Control, definindo modo de link.
- DLPIDR — Data Link Protocol ID, indicando versão do protocolo.
- DPIDR — Debug Port Identification.
- EVENTSTAT — sinaliza eventos para o depurador externo.
- RDBUFF — Read Buffer para operações DP.
- SELECT — seleciona um AP e seu banco de registradores.
- TARGETID — identifica o alvo quando apenas um dispositivo está conectado.
Registradores MEM-AP incluem:
- 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.
A Figura 1 ilustra a fiação e mapa de registradores da ADI (nem todos registradores são mostrados para brevidade).

Figura 1. Diagrama da Arm Debug Interface, resumindo conexões. Nem todos registradores DP/AP são representados.
Serial Wire Debug (SWD)
SWD é a alternativa de dois fios da ARM ao JTAG, projetada para dispositivos com contagem de pinos limitada. Muitos microcontroladores Cortex-M empregam SWD em vez de JTAG completo para conservar pinos.
SWD substitui o par JTAG TDI/TDO por um único pino SWDIO bidirecional, elimina o pino TMS e retém o clock (renomeado SWCLK). Como SWD omite a máquina de estados TAP, comandos são enviados serialmente sobre SWDIO e então o mesmo pino é usado para transferência de dados.
Comunicação prossegue em três fases: requisição de pacote, reconhecimento e transferência de dados. Um bit de paridade é usado throughout. A sequência começa com bit de Start (HIGH), seguido por bit AP/DP, bit RnW, bits de endereço, paridade, bit Stop (LOW) e bit Park. Após a requisição, o alvo responde com ACK de 3 bits. Para escritas, o host transmite 32 bits de dados (bit menos significativo primeiro) com bit de paridade; para leituras, o alvo direciona 32 bits de dados de volta ao host.
A Figura 2 apresenta o diagrama de timing para operações de leitura e escrita.

Figura 2. Diagramas de timing para operações de leitura e escrita Serial Wire Debug. Clique para ampliar.
Duas versões SWD existem: SWDv1 (ponto-a-ponto) e SWDv2 (single-host, multi-target). Versão 2 é largamente compatível com versões anteriores com diferenças menores em edge-cases.
Outras Variantes JTAG de Pinos Reduzidos
Além do SWD, o padrão IEEE 1149.7 define uma interface JTAG de dois fios. Padrões IEEE 1149.x adicionais (1149.4 para teste de sinal misto, 1149.6 para redes digitais avançadas) fornecem capacidades estendidas como boundary-scan analógico e linhas AC-acopladas diferenciais.
Padrões atualizados podem ser encontrados no site da IEEE Standards Association.
Conclusão
Rastreamos as origens do JTAG, examinamos sua implementação física e exploramos como processadores de núcleo ARM adaptam JTAG via protocolos ADI e SWD. Armados com este conhecimento, engenheiros podem depurar e programar dispositivos embarcados com confiança, selecionando a interface apropriada para suas restrições de hardware.
Integrado
- Arm Introduz Suporte a Instruções Customizadas para Núcleos Cortex-M, Expandindo Flexibilidade
- Soluções Confiáveis de Power-On para Dispositivos Médicos a Bateria
- Mouser Estoca IMUs ADIS1647x da Analog Devices: Navegação de Precisão para IoT, UAVs, e AR/VR
- ams e Face++ Unem Forças para Acelerar Sensoriamento Óptico 3D e Reconhecimento Facial
- Marvell Aprofunda Aliança Estratégica com Arm para Impulsionar Processadores Servidor ThunderX Next-Gen
- Acompanhando Avanços em Tecnologia de Dispositivos Médicos
- Infineon Revela Controlador de Motor IMC300 com Arm Cortex-M0 Integrado para Flexibilidade Aprimorada
- ADI Lança ADM2867E: Transceptor RS-485 Isolado Integrado com Conversor DC/DC para Aplicações de Economia de Espaço
- Arm Aprimora Conectividade e Gestão de Dispositivos IoT com Aquisição da Stream Technologies
- Dispositivos de Segurança do Guindaste de Proa (Windlass): Características Protetivas Essenciais