Como depurar placas Arduino usando a interface SWD
Neste wiki, você aprenderá como usar a interface SWD para depurar suas placas Arduino via o J-Link Debug Programmer. Para referência, o Wio Terminal é usado como hardware para demonstrar o processo de depuração.

O que é depuração por SWD
SWD, também conhecido como Serial Wire Debug, é uma interface de 2 pinos (SWDIO/SWCLK), que também é uma interface JTAG alternativa que possui o mesmo protocolo JTAG. O SWD usa um protocolo de fio bidirecional padrão de CPU ARM, definido no ARM Debug programmer.
Conexão de Hardware
Antes de começar, você vai precisar dos seguintes materiais:
-
Wio Terminal (ou outras placas Arduino com interface SWD)
Interface SWD do Wio Terminal

Para o Wio Terminal, os pads da interface SWD estão na parte inferior da frente do Wio Terminal (PCBA nua, sem gabinete). Há três jumpers que precisam ser puxados para fora:
- SWCLK
- SWDIO
- GND
Depois que os jumpers forem soldados, podemos conectá-los ao J-Link Debug Programmer seguindo o mapa de pinos SWD:

Conecte da seguinte forma:
SWCLK(Wio Terminal) ->SWCLK(pino 7 do J-Link Debug Programmer)SWDIO(Wio Terminal) ->SWDIO(pino 9 do J-Link Debug Programmer)GND(Wio Terminal) ->GND(pino 4 do J-Link Debug Programmer)
Instalando o J-Link GDB Server para depuração
Para depurar com o J-Link Debug Programmer, você precisará baixar o J-Link GDB Server. Baixe e instale de acordo com o seu sistema operacional.
Configuração do Arduino
Antes de iniciar o J-Link GDB Server, você também precisará abrir a IDE Arduino para configurações posteriores.
1. Obtendo o caminho do arquivo ELF do sketch Arduino
Nas configurações da IDE do Arduino, certifique-se de que as opções Show verbose output during compilation and upload estejam ambas marcadas.
No sketch Arduino que você deseja depurar, clique em Compile (selecione Wio Terminal como placa) e verifique as informações de log para obter o caminho da localização do arquivo .elf. Vamos usar Blink como exemplo:

Copie esse caminho, pois ele será usado mais tarde pelo GDB.
Por exemplo, no meu caso:
/var/folders/7g/10kskmw90bg08j_g_r7flwq40000gn/T/arduino_build_633418/Blink.ino.elf
2. Obter o caminho do GCC
No mesmo log de compilação do sketch, você também pode encontrar o caminho do GCC usado pelo Arduino, que também pode ser usado posteriormente pelo J-Link Debug Programmer.

Por exemplo, no meu caso:
/Users/ansonhe/Library/Arduino15/packages/Seeeduino/tools/arm-none-eabi-gcc/7-2017q4/bin
Introdução ao J-Link GDB Server
Conecte o J-Link Debug Programmer ao PC e também alimente o Wio Terminal pela porta USB. Inicie o J-Link GDB Server e selecione as seguintes configurações:
- Connection to J-Link: USB
- Target Device: Cortex-M4
- Target Interface: SWD

Selecione OK e, se tudo correr bem, você deverá ver a seguinte tela:

Você deverá ver que a porta de escuta irá aparecer e o servidor J-Link GDB estará ativo e pronto!
Iniciando um cliente GDB
Agora você pode iniciar o cliente GDB usando o caminho que salvamos anteriormente a partir do caminho do GCC no Arduino. Abra o Terminal e cole o caminho copiado + /arm-none-eabi-gdb:
Por exemplo: /Users/ansonhe/Library/Arduino15/packages/Seeeduino/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-gdb
Execute os seguintes comandos no gdb:
target remote localhost:2331monitor device Cortex-M4monitor speed autofile+ caminho do arquivo ELF do sketch Arduino, isto é,file /var/folders/7g/10kskmw90bg08j_g_r7flwq40000gn/T/arduino_build_633418/Blink.ino.elfloadmonitor reset
Agora você pode usar o GDB para depurar seu sketch Arduino!

Método .gdbinit
Você também pode criar um arquivo .gdbinit, copiar o seguinte conteúdo e salvá-lo na localização ~/ para evitar ficar repetindo o processo de configuração para o gdb.
target remote localhost:2331
monitor device Cortex-M4
monitor speed auto
file /var/folders/7g/10kskmw90bg08j_g_r7flwq40000gn/T/arduino_build_633418/Blink.ino.elf
load
monitor reset
Agora, se você apenas iniciar o cliente GDB, poderá começar a depurar imediatamente!
Depuração
Alguns comandos úteis para o GDB:
continue/contctrl+cnextbreakinfo breakcleardeletelist
Ferramenta recomendada: XIAO Debug Mate
Para uma experiência de desenvolvimento mais eficiente, recomendamos o XIAO Debug Mate. Esta ferramenta de desenvolvimento tudo-em-um foi projetada para simplificar o processo de depuração, oferecendo uma solução sem fios para o ecossistema XIAO, ao mesmo tempo que continua sendo um utilitário versátil para projetos embarcados mais amplos. Alimentado pelo ESP32-S3, ele serve como uma alternativa moderna aos depuradores tradicionais e volumosos.
Principais recursos:
- Ferramenta 3 em 1: combina um depurador DAPLink, monitor serial e medidor de energia em um único dispositivo.
- Feedback visual: possui uma tela LCD de 2,01 polegadas para visualizar, sem um PC, o status em tempo real de variáveis, curvas de energia e logs seriais.
- Plug-and-play para XIAO: conecte diretamente qualquer placa Seeed Studio XIAO para depuração instantânea.
- Suporte SWD universal: pode ser usado como uma sonda SWD independente (via conector de expansão de 2,54 mm) para depurar outros microcontroladores ARM Cortex-M.

Recursos
FAQ
P1. Como remover o gabinete do Wio Terminal?
R1. Primeiro, retire as 4 almofadas de borracha dos 4 cantos e você verá 2 parafusos que prendem o gabinete do Wio Terminal. Basta desparafusá-los e você poderá desmontá-lo.
