Debugger hardware embedded: strumenti e suggerimenti

Indice

DAPLink

Nello sviluppo di sistemi embedded e software per MCU, gli ingegneri utilizzano frequentemente debugger per eseguire il debug dei programmi. Di conseguenza, possiamo individuare e ridurre il numero di errori nei programmi per microcontrollori, facendoli funzionare come previsto. A volte, il debug dei programmi per microcontrollori può essere impegnativo perché anche piccole modifiche in un modulo di sistema possono portare a errori in un altro sottosistema. Inoltre, gli strumenti di debug utilizzati nello sviluppo di microcontrollori variano notevolmente in termini di tempo di sviluppo e capacità di debug. Questo articolo introduce principalmente i tipi comuni di debugger per microcontrollori e come utilizzarli.

Cos'è un debugger hardware?

Un debugger hardware è uno strumento che comunica con un microcontrollore tramite un’interfaccia di debug, consentendogli di eseguire, mettere in pausa, osservare e persino modificare lo stato del processo. In altre parole, un debugger è un dispositivo che traduce i comandi inviati da un PC (ad esempio, tramite protocollo USB) in un linguaggio compreso dalla MCU (come i protocolli SWD o JTAG), carica il codice e controlla con precisione l’esecuzione.

Tipi di debugger

Lo sviluppo di software embedded si basa fortemente su debugger e programmatori, che aiutano a scoprire e correggere bug del programma, eseguire la programmazione della MCU e altro ancora. La maggior parte dei produttori di semiconduttori o di chip sviluppa debugger per le proprie MCU per migliorare i propri ecosistemi di prodotti. Di conseguenza, sono disponibili varie classificazioni sul mercato, tra cui debugger J-Link, emulatori U-Link, debugger ST-LINK e programmatori.

J-Link

J-Link è un debugger basato su JTAG introdotto dalla società tedesca SEGGER. In termini semplici, è una scatola di conversione del protocollo JTAG, una piccola scatola di conversione da USB a JTAG che si collega a un computer tramite un’interfaccia USB e all’interno della scheda di destinazione utilizzando il protocollo JTAG. Esegue la traduzione dal software all’hardware.

csm j link pro 500 7d8323fcda
J-Link (Immagine: SEGGER)

I-jet Trace

I-jet Trace, rilasciato da IAR Systems, è un potente strumento di debug e tracciamento del codice dotato di una grande cache di istruzioni e che supporta il protocollo di comunicazione ad alta velocità USB 3.0. I-jet Trace supporta tutti i core della serie ARM Cortex-M dotati del modulo Embedded Trace Macrocell (ETM), incluso l’ultimo core Cortex-M7. Tracciando ogni istruzione eseguita, ETM consente agli sviluppatori di osservare in profondità il comportamento di runtime della MCU, scoprendo bug significativi che potrebbero essere difficili da scoprire con i metodi di debug tipici.

ijettrace
I-jet Trace (Immagine: IAR System)

U-LINK

ULINK è un debugger / emulatore introdotto da ARM/KEIL. Attualmente, sono disponibili versioni aggiornate come gli emulatori ULINK2 e ULINK Pro. ULINK/ULINK2 può essere utilizzato con il software Keil per abilitare le funzioni di emulazione ed è principalmente compatibile con il software Keil. Forniscono supporto per il debug seriale (SWD), il supporto per l’orologio di ritorno, la traccia in tempo reale e altre funzionalità. Gli sviluppatori possono eseguire comodamente il debug on-chip (utilizzando JTAG, SWD e OCDS on-chip) e la programmazione flash quando utilizzano il debugger di RealView MDK in combinazione con ULINK2.

ulink2
Debugger U-Link (Immagine: Keil)

CMSIS-DAP

CMSIS-DAP può essere suddiviso in due parti: CMSIS e DAP. CMSIS sta per ARM Cortex-M Software Interface Standard, mentre DAP sta per Debug Access Port. CMSIS-DAP è un’implementazione firmware di un’unità dispositivo debugger USB. Il software di debug in esecuzione sul computer host comunica con il dispositivo debugger tramite un’interfaccia USB, consentendo in definitiva il debug del software applicativo in esecuzione sulla MCU di destinazione. Il debugger CMSIS-DAP si connette al dispositivo di destinazione tramite JTAG o SWD. I processori ARM Cortex forniscono unità Debug e Trace Core Sight. I debugger CMSIS-DAP possono supportare i processori contenenti uno o più core ARM.

CMSIS DAP SWStack
CMSIS DAP (Immagine: Keil)

DAPLink

DAPLink è un emulatore open-source sviluppato ufficialmente da ARM, in grado di scaricare programmi e eseguire il debug per una gamma completa di chip con core Cortex-M0/M3/M4/M7.

DAPLink
DAPLink

Debugger ICD

ICD (In-Circuit Debugger), spesso semplicemente indicato come “debugger ICD”, è uno strumento di debug hardware utilizzato nello sviluppo di sistemi embedded. Consente agli sviluppatori di eseguire il debug in tempo reale di microcontrollori o altri dispositivi embedded mentre operano all’interno del circuito di destinazione (in-circuit).

170207 DVTL PHOTO DV164045 Kit Transparent
Debugger ICD (Immagine: Microchip Technology)

I debugger ICD in genere si connettono al dispositivo di destinazione tramite la sua interfaccia di debug, come JTAG (Joint Test Action Group) o SWD (Serial Wire Debug). Questi debugger offrono una gamma di funzionalità di debug essenziali, tra cui l’impostazione di punti di interruzione, l’esecuzione passo passo del codice, l’ispezione dei valori delle variabili e il monitoraggio del flusso di esecuzione di un programma.

Uno dei principali vantaggi dei debugger ICD è la loro capacità di eseguire il debug del software nel suo contesto hardware reale, consentendo agli sviluppatori di identificare e correggere i problemi che potrebbero verificarsi solo quando il dispositivo di destinazione è in esecuzione nel suo ambiente previsto.

ST-Link è un debugger e programmatore online dedicato per microcontrollori STM8 e STM32, spesso indicato come downloader. ST-Link presenta interfacce di comunicazione come SWIM, JTAG e SWD per la comunicazione con microcontrollori STM8 o STM32 (sono disponibili varie versioni).

image.PF251168.en.feature description include personalized no cpn medium
ST-Link (Immagine: STMicroelectronics)

MCU-Link

MCU-Link, sviluppato congiuntamente da NXP e Embedded Artist, è un debugger potente ed economico che si integra perfettamente con MCUXpresso IDE. È anche compatibile con IDE di terze parti che supportano il protocollo CMSIS-DAP, come il comunemente usato MDK Keil e IAR Embedded Workbench.

MCU LINK TOP Thubmnail
MCU Link (Immagine: NXP Semiconductors)

MCU-Link è basato sul microcontrollore LPC55S69, dotato di un’interfaccia USB ad alta velocità per il debug ad alte prestazioni. LPC55S69 è un microcontrollore dual-core Cortex-M33 con una velocità di clock fino a 150 MHz. Include la funzionalità USB-to-serial (VCOM), che consente agli sviluppatori di inviare i dati dal lato MCU al PC durante il debug.

OpenSDA

OpenSDA è un circuito di debug hardware integrato che combina debugging, conversione USB-to-serial e funzionalità di firmware drag-and-drop. È presente su quasi tutte le schede di sviluppo ufficiali NXP e Freescale. OpenSDA è apprezzato dagli utenti per la sua semplicità, il basso costo, la potente funzionalità e l’ampia disponibilità.

OpenSDA FRDM
Firmware OpenSDA V2 (Immagine: Segger)

Nu-Link

Nu-Link è uno strumento di debug e programmazione sviluppato da Nuvoton, che offre funzionalità di debug e programmazione online/offline. Lo strumento include una porta USB che si connette al computer host, indicatori di stato a LED, un pulsante di programmazione offline e un’interfaccia SWD per la connessione al chip di destinazione per il debug e la programmazione (la porta SWD funziona a una tensione predefinita di 5 V).

Nu Link ICP emulator downloader with offline offline download
Nu-Link (Immagine: AliExpress)

Come funzionano i debugger?

Il principio del debug del microcontrollore prevede la comunicazione tra lo strumento di debug e il microcontrollore, facilitando il debug del programma del microcontrollore. I punti di interruzione sono tecniche di debug comunemente utilizzate per individuare i bug nel codice.

Impostazione delle condizioni del punto di interruzione

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

Nella figura sopra, è presente un elenco di punti di interruzione, per un totale di quattro punti di interruzione. A ciascun punto di interruzione possono essere assegnate condizioni, come mostrato nel riquadro rosso 1.

È possibile specificare il numero di volte in cui un punto di interruzione è efficace, ovvero quante volte si attiva quando raggiunge quella posizione, come si vede nel riquadro rosso 2. In questo esempio, è impostato per attivarsi una volta.

È possibile impostare un’espressione di valutazione, come indicato nel riquadro rosso 3 della figura. Ad esempio, il punto di interruzione si attiverà quando “g_iCounter” è maggiore o uguale a 100. Condizioni come questa sono combinate con la condizione nel riquadro rosso 2 utilizzando una relazione logica “AND”. Entrambe le condizioni devono essere soddisfatte affinché il punto di interruzione si attivi; altrimenti, il codice continua a essere eseguito.

Quando il punto di interruzione si attiva, è possibile eseguire uno script Python, come mostrato nel riquadro rosso 4 della figura.

È inoltre possibile visualizzare una finestra di messaggio e/o far suonare un cicalino per fornire avvisi quando il punto di interruzione si attiva.

Impostazione dei trigger dei punti di interruzione

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

I trigger dei punti di interruzione sono simili ai trigger predefiniti che fanno arrestare il codice quando vengono soddisfatte determinate condizioni durante l’esecuzione. La posizione di attivazione potrebbe non essere nota in anticipo.

Nella figura, il riquadro rosso 1 rappresenta un trigger di istruzione, che arresta il codice in una riga specifica, simile all’impostazione di un punto di interruzione direttamente nel codice.

Il riquadro rosso 2 rappresenta un trigger di dati, che arresta il codice quando si verifica un’operazione di lettura/scrittura su una variabile o un indirizzo specifico e può monitorare se un bit specifico è impostato o cancellato (la disponibilità dipende dal microcontrollore). Il codice si arresta nella posizione corrispondente.

Il riquadro rosso 3 è un esempio in cui “g_iCounter” è selezionato. Quando il suo bit più significativo è impostato su 1, attiva il punto di interruzione. Altrimenti, il codice continua a essere eseguito.

Il riquadro rosso 4 illustra una condizione di attivazione complessa che coinvolge più condizioni, che dipende anche dalle capacità del microcontrollore.

Conclusione

In sintesi, i debugger hardware e i loro vari tipi svolgono un ruolo cruciale nello sviluppo di sistemi embedded consentendo agli sviluppatori di individuare e correggere bug del software, eseguire il debug in tempo reale e ottenere informazioni sull’esecuzione dei programmi del microcontrollore. Questi strumenti forniscono funzionalità essenziali come punti di interruzione, condizioni di attivazione e la possibilità di eseguire script, rendendo il processo di debug più efficiente ed efficace.

Informazioni sull'autore

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.

Hai bisogno di aiuto?

Torna in alto

Preventivo immediato

Instant Quote