En el desarrollo de sistemas integrados y de software para MCU, los ingenieros suelen emplear depuradores para depurar programas. De este modo, podemos localizar y reducir el número de errores en los programas de los microcontroladores, haciendo que funcionen según lo previsto. A veces, la depuración de programas de microcontroladores puede resultar complicada, ya que incluso pequeños cambios en un módulo del sistema pueden provocar errores en otro subsistema. Además, las herramientas de depuración utilizadas en el desarrollo de microcontroladores varían significativamente en términos de tiempo de desarrollo y capacidades de depuración. Este artículo presenta principalmente los tipos comunes de depuradores para microcontroladores y cómo utilizarlos.
¿Qué es un depurador de hardware?
Un depurador de hardware es una herramienta que se comunica con un microcontrolador a través de una interfaz de depuración, lo que le permite ejecutar, pausar, observar e incluso modificar el estado del proceso. En otras palabras, un depurador es un dispositivo que traduce los comandos enviados por un PC (por ejemplo, a través del protocolo USB) a un lenguaje que entiende la MCU (como el protocolo SWD o JTAG), carga el código y controla con precisión la ejecución.
Tipos de depuradores
El desarrollo de software integrado depende en gran medida de los depuradores y programadores, que ayudan a descubrir y corregir errores de programación, realizar la programación de MCU y mucho más. La mayoría de los fabricantes de semiconductores o chips desarrollan depuradores para sus propias MCU con el fin de mejorar los ecosistemas de sus productos. Como resultado, existen diversas clasificaciones disponibles en el mercado, entre las que se incluyen los depuradores J-Link, los emuladores U-Link, los depuradores ST-LINK y los programadores.
J-Link
J-Link es un depurador basado en JTAG presentado por la empresa alemana SEGGER. En términos sencillos, se trata de una caja de conversión de protocolo JTAG, una pequeña caja de conversión de USB a JTAG que se conecta a un ordenador a través de una interfaz USB y a los componentes internos de la placa de destino mediante el protocolo JTAG. Realiza la traducción de software a hardware.

I-jet Trace
I-jet Trace, lanzado por IAR Systems, es una potente herramienta de depuración y rastreo de código equipada con una gran caché de instrucciones y compatible con el protocolo de comunicación de alta velocidad USB 3.0. I-jet Trace es compatible con todos los núcleos de la serie ARM Cortex-M equipados con el módulo Embedded Trace Macrocell (ETM), incluido el último núcleo Cortex-M7. Al rastrear cada instrucción ejecutada, ETM permite a los desarrolladores observar en profundidad el comportamiento del MCU en tiempo de ejecución, descubriendo errores importantes que pueden ser difíciles de detectar con los métodos de depuración habituales.

U-LINK
ULINK es un depurador/emulador presentado por ARM/KEIL. Actualmente, hay disponibles versiones actualizadas como los emuladores ULINK2 y ULINK Pro. ULINK/ULINK2 se pueden utilizar con el software Keil para habilitar funciones de emulación y son principalmente compatibles con el software Keil. Proporcionan soporte para depuración por cable serie (SWD), soporte de reloj de retorno, rastreo en tiempo real y otras características. Los ingenieros de desarrollo pueden realizar cómodamente la depuración en chip (utilizando JTAG, SWD y OCDS en chip) y la programación flash cuando utilizan el depurador de RealView MDK en combinación con ULINK2.

CMSIS-DAP
CMSIS-DAP se puede dividir en dos partes: CMSIS y DAP. CMSIS son las siglas de ARM Cortex-M Software Interface Standard (Estándar de interfaz de software ARM Cortex-M), mientras que DAP son las siglas de Debug Access Port (Puerto de acceso de depuración). CMSIS-DAP es una implementación de firmware de una unidad de dispositivo depurador USB. El software de depuración que se ejecuta en el ordenador host se comunica con el dispositivo depurador a través de una interfaz USB, lo que en última instancia permite la depuración del software de aplicación que se ejecuta en la MCU de destino. El depurador CMSIS-DAP se conecta al dispositivo de destino a través de JTAG o SWD. Los procesadores ARM Cortex proporcionan unidades Core Sight Debug y Trace. Los depuradores CMSIS-DAP pueden admitir procesadores que contengan uno o más núcleos ARM.

DAPLink
DAPLink es un emulador de código abierto desarrollado oficialmente por ARM, capaz de descargar programas y depurar una gama completa de chips con núcleos Cortex-M0/M3/M4/M7.

Depurador ICD
El ICD (depurador en circuito), a menudo denominado simplemente «depurador ICD», es una herramienta de depuración de hardware utilizada en el desarrollo de sistemas integrados. Permite a los desarrolladores realizar la depuración en tiempo real de microcontroladores u otros dispositivos integrados mientras funcionan dentro del circuito de destino (en circuito).

Los depuradores ICD suelen conectarse al dispositivo de destino a través de su interfaz de depuración, como JTAG (Joint Test Action Group) o SWD (Serial Wire Debug). Estos depuradores ofrecen una serie de funciones de depuración esenciales, como establecer puntos de interrupción, ejecutar el código paso a paso, inspeccionar los valores de las variables y supervisar el flujo de ejecución de un programa.
Una de las principales ventajas de los depuradores ICD es su capacidad para depurar software en su contexto de hardware real, lo que permite a los desarrolladores identificar y solucionar problemas que solo pueden producirse cuando el dispositivo de destino se ejecuta en su entorno previsto.
ST-Link es un depurador y programador en línea específico para microcontroladores STM8 y STM32, a menudo denominado «descargador». ST-Link cuenta con interfaces de comunicación como SWIM, JTAG y SWD para comunicarse con microcontroladores STM8 o STM32 (hay varias versiones disponibles).

MCU-Link
MCU-Link, desarrollado conjuntamente por NXP y Embedded Artist, es un potente y rentable depurador que se integra a la perfección con MCUXpresso IDE. También es compatible con entornos de desarrollo integrado (IDE) de terceros que admiten el protocolo CMSIS-DAP, como los habitualmente utilizados MDK Keil e IAR Embedded Workbench.

MCU-Link se basa en el microcontrolador LPC55S69, que cuenta con una interfaz USB de alta velocidad para una depuración de alto rendimiento. El LPC55S69 es un microcontrolador Cortex-M33 de doble núcleo con una velocidad de reloj de hasta 150 MHz. Incluye la función USB a serie (VCOM), lo que permite a los desarrolladores enviar los datos del lado del MCU al PC durante la depuración.
OpenSDA
OpenSDA es un circuito de depuración de hardware integrado que combina funciones de depuración, conversión de USB a serie y arrastrar y soltar firmware. Está presente en casi todas las placas de desarrollo oficiales de NXP y Freescale. OpenSDA es muy apreciado por los usuarios por su simplicidad, bajo coste, potente funcionalidad y amplia disponibilidad.

No-Link
Nu-Link es una herramienta de depuración y programación desarrollada por Nuvoton que ofrece funciones de depuración y programación en línea y fuera de línea. La herramienta incluye un puerto USB que se conecta al ordenador host, indicadores LED de estado, un botón de programación fuera de línea y una interfaz SWD para conectarse al chip de destino para la depuración y la programación (el puerto SWD funciona con un voltaje predeterminado de 5 V).

¿Cómo funcionan los depuradores?
El principio de la depuración de microcontroladores implica la comunicación entre la herramienta de depuración y el microcontrolador, lo que facilita la depuración del programa del microcontrolador. Los puntos de interrupción son técnicas de depuración comúnmente utilizadas para localizar errores en el código.
Configuración de condiciones de punto de interrupción

En la figura anterior, hay una lista de puntos de interrupción, con un total de cuatro puntos de interrupción. Se pueden asignar condiciones a cualquier punto de interrupción, como se muestra en el recuadro rojo 1.
Se puede especificar el número de veces que un punto de interrupción es efectivo, es decir, cuántas veces se activa al llegar a esa posición, como se ve en el recuadro rojo 2. En este ejemplo, está configurado para activarse una vez.
Se puede establecer una expresión de evaluación, como se indica en el recuadro rojo 3 de la figura. Por ejemplo, el punto de interrupción se activará cuando «g_iCounter» sea mayor o igual a 100. Condiciones como esta se combinan con la condición del recuadro rojo 2 utilizando una relación lógica «AND». Ambas condiciones deben cumplirse para que se active el punto de interrupción; de lo contrario, el código continúa ejecutándose.
Cuando se activa el punto de interrupción, puede ejecutar un script de Python, como se muestra en el cuadro rojo 4 de la figura.
También puede mostrar un cuadro de mensaje y/o hacer sonar un zumbador para proporcionar alertas cuando se active el punto de interrupción.
Configuración de desencadenantes de puntos de interrupción

Los desencadenantes de punto de interrupción son similares a los desencadenantes predefinidos que provocan que el código se detenga cuando se cumplen determinadas condiciones durante la ejecución. Es posible que la ubicación del desencadenante no se conozca de antemano.
En la figura, el recuadro rojo 1 representa un disparador de instrucción, que detiene el código en una línea específica, de forma similar a establecer un punto de interrupción directamente en el código.
El recuadro rojo 2 representa un disparador de datos, que detiene el código cuando hay una operación de lectura/escritura en una variable o dirección concreta, y puede supervisar si un bit específico está activado o desactivado (la disponibilidad depende del microcontrolador). El código se detiene en la posición correspondiente.
El recuadro rojo 3 es un ejemplo en el que se selecciona «g_iCounter». Cuando su bit más alto se establece en 1, se activa el punto de interrupción. De lo contrario, el código continúa ejecutándose.
El cuadro rojo 4 ilustra una condición de activación compleja que implica múltiples condiciones, que también depende de las capacidades del microcontrolador.
Conclusión
En resumen, los depuradores de hardware y sus diversos tipos desempeñan un papel crucial en el desarrollo de sistemas integrados, ya que permiten a los desarrolladores localizar y corregir errores de software, realizar depuraciones en tiempo real y obtener información sobre la ejecución de programas de microcontroladores. Estas herramientas proporcionan funciones esenciales como puntos de interrupción, condiciones de activación y la capacidad de ejecutar scripts, lo que hace que el proceso de depuración sea más eficiente y eficaz.




