Depuradores de hardware incorporados: ferramentas e dicas

Índice

DAPLink

No desenvolvimento de sistemas embarcados e no desenvolvimento de software para MCU, os engenheiros frequentemente utilizam depuradores para depurar programas. Consequentemente, podemos localizar e reduzir o número de erros nos programas do microcontrolador, fazendo com que funcionem conforme o esperado. Às vezes, a depuração de programas de microcontroladores pode ser desafiadora, pois mesmo pequenas alterações em um módulo do sistema podem levar a erros em outro subsistema. Além disso, as ferramentas de depuração usadas no desenvolvimento de microcontroladores variam significativamente em termos de tempo de desenvolvimento e recursos de depuração. Este artigo apresenta principalmente os tipos comuns de depuradores para microcontroladores e como usá-los.

O que é um depurador de hardware?

Um depurador de hardware é uma ferramenta que se comunica com um microcontrolador por meio de uma interface de depuração, permitindo executar, pausar, observar e até mesmo modificar o estado do processo. Em outras palavras, um depurador é um dispositivo que traduz comandos enviados por um PC (por exemplo, via protocolo USB) para uma linguagem compreendida pela MCU (como o protocolo SWD ou JTAG), carrega o código e controla com precisão a execução.

Tipos de depuradores

O desenvolvimento de software incorporado depende muito de depuradores e programadores, que ajudam a descobrir e corrigir bugs de programas, realizar a programação de MCUs e muito mais. A maioria dos fabricantes de semicondutores ou chips desenvolve depuradores para seus próprios MCUs a fim de aprimorar seus ecossistemas de produtos. Como resultado, existem várias classificações disponíveis no mercado, incluindo depuradores J-Link, emuladores U-Link, depuradores ST-LINK e programadores.

J-Link

O J-Link é um depurador baseado em JTAG introduzido pela empresa alemã SEGGER. Em termos simples, é uma caixa de conversão de protocolo JTAG, uma pequena caixa de conversão USB para JTAG que se conecta a um computador através de uma interface USB e ao interior da placa de destino usando o protocolo JTAG. Ele realiza a tradução de software para hardware.

csm j link pro 500 7d8323fcda
J-Link (Crédito da imagem: SEGGER)

I-jet Trace

O I-jet Trace, lançado pela IAR Systems, é uma poderosa ferramenta de depuração e rastreamento de código equipada com um grande cache de instruções e compatível com o protocolo de comunicação de alta velocidade USB 3.0. O I-jet Trace suporta todos os núcleos da série ARM Cortex-M equipados com o módulo Embedded Trace Macrocell (ETM), incluindo o mais recente núcleo Cortex-M7. Ao rastrear todas as instruções executadas, o ETM permite que os desenvolvedores observem profundamente o comportamento de tempo de execução do MCU, revelando bugs significativos que podem ser difíceis de descobrir com métodos de depuração típicos.

ijettrace
I-jet Trace (Crédito da imagem: IAR System)

U-LINK

O ULINK é um depurador/emulador introduzido pela ARM/KEIL. Atualmente, estão disponíveis versões atualizadas, como os emuladores ULINK2 e ULINK Pro. O ULINK/ULINK2 pode ser usado com o software Keil para habilitar funções de emulação e é principalmente compatível com o software Keil. Eles oferecem suporte para depuração serial wire (SWD), suporte a clock de retorno, rastreamento em tempo real e outros recursos. Os engenheiros de desenvolvimento podem realizar convenientemente a depuração no chip (usando JTAG, SWD e OCDS no chip) e a programação flash ao usar o depurador RealView MDK em combinação com o ULINK2.

ulink2
Depurador U-Link (Crédito da imagem: Keil)

CMSIS-DAP

O CMSIS-DAP pode ser dividido em duas partes: CMSIS e DAP. CMSIS significa ARM Cortex-M Software Interface Standard, enquanto DAP significa Debug Access Port. O CMSIS-DAP é uma implementação de firmware de uma unidade de dispositivo depurador USB. O software de depuração em execução no computador host se comunica com o dispositivo depurador por meio de uma interface USB, permitindo, em última instância, a depuração do software aplicativo em execução no MCU de destino. O depurador CMSIS-DAP se conecta ao dispositivo de destino via JTAG ou SWD. Os processadores ARM Cortex fornecem unidades Core Sight Debug e Trace. Os depuradores CMSIS-DAP podem suportar processadores que contêm um ou mais núcleos ARM.

CMSIS DAP SWStack
CMSIS DAP (Crédito da imagem: Keil)

DAPLink

O DAPLink é um emulador de código aberto desenvolvido oficialmente pela ARM, capaz de baixar programas e depurar uma gama completa de chips com núcleo Cortex-M0/M3/M4/M7.

DAPLink
DAPLink

Depurador ICD

O ICD (In-Circuit Debugger), frequentemente referido simplesmente como "depurador ICD", é uma ferramenta de depuração de hardware utilizada no desenvolvimento de sistemas incorporados. Permite aos programadores realizar a depuração em tempo real de microcontroladores ou outros dispositivos incorporados enquanto estes estão a funcionar dentro do circuito alvo (in-circuit).

170207 DVTL PHOTO DV164045 Kit Transparent
Depurador ICD (Crédito da imagem: Microchip Technology)

Os depuradores ICD normalmente se conectam ao dispositivo de destino por meio de sua interface de depuração, como JTAG (Joint Test Action Group) ou SWD (Serial Wire Debug). Esses depuradores oferecem uma variedade de recursos essenciais de depuração, incluindo a configuração de pontos de interrupção, execução passo a passo do código, inspeção de valores de variáveis e monitoramento do fluxo de execução de um programa.

Uma das principais vantagens dos depuradores ICD é a capacidade de depurar software em seu contexto de hardware real, permitindo que os desenvolvedores identifiquem e corrijam problemas que só podem ocorrer quando o dispositivo de destino está sendo executado em seu ambiente pretendido.

O ST-Link é um depurador e programador online dedicado para microcontroladores STM8 e STM32, frequentemente referido como um downloader. O ST-Link possui interfaces de comunicação como SWIM, JTAG e SWD para comunicação com microcontroladores STM8 ou STM32 (várias versões disponíveis).

image.PF251168.en.feature description include personalized no cpn medium
ST-Link (Crédito da imagem: STMicroelectronics)

MCU-Link

O MCU-Link, desenvolvido em conjunto pela NXP e pela Embedded Artist, é um depurador poderoso e econômico que se integra perfeitamente ao MCUXpresso IDE. Ele também é compatível com IDEs de terceiros que suportam o protocolo CMSIS-DAP, como o MDK Keil e o IAR Embedded Workbench, comumente usados.

MCU LINK TOP Thubmnail
MCU Link (Crédito da imagem: NXP Semiconductors)

O MCU-Link é baseado no microcontrolador LPC55S69, com uma interface USB de alta velocidade para depuração de alto desempenho. O LPC55S69 é um microcontrolador Cortex-M33 dual-core com velocidade de clock de até 150 MHz. Ele inclui a funcionalidade USB para serial (VCOM), permitindo que os desenvolvedores enviem dados do lado do MCU para o PC durante a depuração.

OpenSDA

O OpenSDA é um circuito de depuração de hardware integrado que combina depuração, conversão USB para serial e recursos de firmware do tipo arrastar e soltar. Ele está presente em quase todas as placas de desenvolvimento oficiais da NXP e da Freescale. O OpenSDA é preferido pelos usuários por sua simplicidade, baixo custo, funcionalidade poderosa e ampla disponibilidade.

OpenSDA FRDM
Firmware OpenSDA V2 (Crédito da imagem: Segger)

Não vincular

Nu-Link é uma ferramenta de depuração e programação desenvolvida pela Nuvoton, que oferece recursos de depuração e programação online/offline. A ferramenta inclui uma porta USB que se conecta ao computador host, indicadores de status LED, um botão de programação offline e uma interface SWD para conexão com o chip de destino para depuração e programação (a porta SWD opera com uma tensão padrão de 5 V).

Nu Link ICP emulator downloader with offline offline download
Nu-Link (Crédito da imagem: AliExpress)

Como funcionam os depuradores?

O princípio da depuração do microcontrolador envolve a comunicação entre a ferramenta de depuração e o microcontrolador, facilitando a depuração do programa do microcontrolador. Os pontos de interrupção são técnicas de depuração comumente usadas para identificar bugs no código.

Definindo condições de ponto de interrupção

Execution Breakpoints and Setting Conditions in Debugging
Execution Breakpoints and Setting Conditions in Debugging

Na figura acima, há uma lista de pontos de interrupção, totalizando quatro pontos de interrupção. Qualquer ponto de interrupção pode ter condições atribuídas, conforme mostrado na caixa vermelha 1.

Você pode especificar o número de vezes que um ponto de interrupção é eficaz, ou seja, quantas vezes ele é acionado ao atingir essa posição, conforme mostrado na caixa vermelha 2. Neste exemplo, ele está configurado para ser acionado uma vez.

Você pode definir uma expressão de avaliação, conforme indicado na caixa vermelha 3 da figura. Por exemplo, o ponto de interrupção será acionado quando "g_iCounter" for maior ou igual a 100. Condições como essa são combinadas com a condição na caixa vermelha 2 usando uma relação lógica "AND". Ambas as condições devem ser satisfeitas para que o ponto de interrupção seja acionado; caso contrário, o código continua a ser executado.

Quando o ponto de interrupção é acionado, você pode executar um script Python, conforme mostrado na caixa vermelha 4 da figura.

Você também pode exibir uma caixa de mensagem e/ou emitir um sinal sonoro para fornecer alertas quando o ponto de interrupção for acionado.

Definindo gatilhos de ponto de interrupção

Setting Hardware Breakpoints Trigger in Debugging
Setting Hardware Breakpoints Trigger in Debugging

Os gatilhos de ponto de interrupção são semelhantes aos gatilhos predefinidos que fazem com que o código pare quando determinadas condições são atendidas durante a execução. O local do gatilho pode não ser conhecido antecipadamente.

Na figura, a caixa vermelha 1 representa um gatilho de instrução, que interrompe o código em uma linha específica, semelhante à configuração de um ponto de interrupção diretamente no código.

A caixa vermelha 2 representa um gatilho de dados, que interrompe o código quando há uma operação de leitura/gravação em uma variável ou endereço específico, e pode monitorar se um bit específico está definido ou desmarcado (a disponibilidade depende do microcontrolador). O código é interrompido na posição correspondente.

A caixa vermelha 3 é um exemplo em que "g_iCounter" é selecionado. Quando seu bit mais alto é definido como 1, ele aciona o ponto de interrupção. Caso contrário, o código continua a ser executado.

A caixa vermelha 4 ilustra uma condição de acionamento complexa envolvendo várias condições, que também depende dos recursos do microcontrolador.

Conclusão

Em resumo, os depuradores de hardware e seus vários tipos desempenham um papel crucial no desenvolvimento de sistemas embarcados, permitindo que os desenvolvedores localizem e corrijam bugs de software, realizem depuração em tempo real e obtenham insights sobre a execução de programas de microcontroladores. Essas ferramentas fornecem recursos essenciais, como pontos de interrupção, condições de acionamento e a capacidade de executar scripts, tornando o processo de depuração mais eficiente e eficaz.

Sobre o autor

Picture of Aidan Taylor
Aidan Taylor

I am Aidan Taylor and I have over 10 years of experience in the field of PCB Reverse Engineering, PCB design and IC Unlock.

Precisa de ajuda?

Rolar para cima

Cotação instantânea

Instant Quote