Pular para o conteúdo principal

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:

  1. Wio Terminal (ou outras placas Arduino com interface SWD)

  2. J-Link Debug Programmer

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)

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

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:

  1. target remote localhost:2331
  2. monitor device Cortex-M4
  3. monitor speed auto
  4. file + caminho do arquivo ELF do sketch Arduino, isto é, file /var/folders/7g/10kskmw90bg08j_g_r7flwq40000gn/T/arduino_build_633418/Blink.ino.elf
  5. load
  6. monitor 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/cont
  • ctrl+c
  • next
  • break
  • info break
  • clear
  • delete
  • list

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.

Loading Comments...