Approved Reseller
Approved Reseller
En entradas anteriores abordamos de forma superficial como debuggear un proyecto usando el puerto JTAG y mencionamos que es una interfaz para transmitir señales de un microcontrolador. En esta entrada queremos ahondar más en este puerto y cómo se implementa en distintos sistemas embebidos.
JTAG es una interfaz de hardware común que provee a una computadora un modo fácil de comunicarse con los chips en una tarjeta. Se originó inicialmente como un consorcio, el Joint Test Access Group, a mediados de los 80s para identificar la creciente dificultad de probar las tarjetas de circuito impreso (PCB). JTAG ha tenido un uso extendido desde que se incluyó en el chip Intel 80486 en 1990 y se estableció como el estándar IEEE 1491 el mismo año. Hoy en día la interfaz JTAG se emplea para depurar código, programar y probar virtualmente cualquier sistema embebido.
Con la creación de los primeros chips fue necesario crear formas de hacer pruebas en la tarjeta para verificar que la información se transmitiera de forma correcta. Al principio esto se lograba con puntos de prueba en los que se colocaba una sonda y se media la señal. Pero con el creciente aumento en la densidad de componentes y el aumento de la complejidad de los chips fue necesario replantearse estos métodos. La solución fue colocar electrónica de prueba en el mismo chip a la que se pudiera acceder con unos cuantos pines de señal, lo que permitió eventualmente todas las funciones del puerto JTAG.
JTAG por si mismo NO es el nombre de un dispositivo, ni un software; tampoco es un protocolo, ni un tipo de conector específico. Lo que si es JTAG es un conjunto de señales que nos permiten leer los datos que se transmiten en un chip. Las cinco señales que se especifican en la norma IEEE 1149.1 y son:
El estándar IEEE 1149.1 no sólo especifica las señales que deben usarse para la interfaz JTAG, también define el comportamiento de una máquina de estados que manipula la información dentro del chip. A grandes rasgos, indica como debe desplazarse la información en los registros para ingresarla o sacarla mediante los pines TDI y TDO.
Un ejemplo fácil de reconocer es la interfaz JTAG del Arduino MKR1000. Este puerto se encuentra en medio de la tarjeta, con un header de 5×2. Para emplear esta interfaz, se puede acceder mediante una herramienta especial, como el programador/debugger Atmel ICE.
Conclusiones
La interfaz JTAG es un puerto especializado para desarrolladores intermedios a avanzados que requieren depurar un código complejo. Surge de la necesidad de estandarizar la información obtenida al analizar dispositivos de complejidad cada vez mayor. Permite interactuar directamente con el microcontrolador de forma pausada y observar los registros de la memoria directamente, al mandar información al depurador que después se interpreta en una computadora. La importancia de conocer este puerto es que, a medida que avanza la tecnología de semiconductores, cada vez más tarjetas de desarrollo implementarán este tipo de interfaces, por lo que familiarizarse en como funciona puede resultar de gran utilidad.
Referencias:
Introducción a JTAG con el Arduino MKR1000 – Parte 1
SWD Debugging the Arduino MKR-WiFi-1010 with Atmel ICE
JTAG Explained (finally!): Why “IoT”, Software Security Engineers, and Manufacturers Should Care