JTAG (llamado así por el Joint Test Action Group que lo codificó) es un estándar industrial para verificar diseños y probar placas de circuitos impresos después de su fabricación.
JTAG implementa estándares para instrumentación en chip en automatización de diseño electrónico (EDA) como una herramienta complementaria a la simulación digital . [1] Especifica el uso de un puerto de depuración dedicado que implementa una interfaz de comunicaciones seriales para acceso con bajo consumo de recursos sin requerir acceso externo directo a los buses de datos y direcciones del sistema. La interfaz se conecta a un puerto de acceso de prueba (TAP) en chip que implementa un protocolo con estado para acceder a un conjunto de registros de prueba que presentan niveles lógicos del chip y capacidades del dispositivo de varias partes.
El Joint Test Action Group se formó en 1985 para desarrollar un método de verificación de diseños y pruebas de placas de circuitos impresos después de su fabricación. En 1990, el Instituto de Ingenieros Eléctricos y Electrónicos codificó los resultados de la iniciativa en la norma IEEE 1149.1-1990, titulada Standard Test Access Port and Boundary-Scan Architecture .
Muchos fabricantes de chips semiconductores han ampliado los estándares JTAG con variantes especializadas para proporcionar características específicas de cada proveedor. [2]
En la década de 1980, las placas de circuitos multicapa y los circuitos integrados (CI) que utilizan una matriz de rejilla de bolas y tecnologías de montaje similares se estaban convirtiendo en estándar, y se realizaban conexiones entre CI que no estaban disponibles para las sondas. La mayoría de los fallos de fabricación y de campo en las placas de circuitos se debían a uniones de soldadura deficientes en las placas, imperfecciones entre las conexiones de la placa o las uniones y los cables de unión de las almohadillas de CI a los marcos de los cables de conexión. El Grupo de Acción de Pruebas Conjuntas (JTAG) se formó en 1985 para proporcionar una vista de los pines de una almohadilla de CI a otra para que se pudieran descubrir estos fallos.
El estándar de la industria se convirtió en un estándar IEEE en 1990 como IEEE Std. 1149.1-1990 [3] después de muchos años de uso inicial. En el mismo año, Intel lanzó su primer procesador con JTAG (el 80486 ) que condujo a una adopción más rápida de la industria por parte de todos los fabricantes. En 1994, se agregó un suplemento que contiene una descripción del lenguaje de descripción de escaneo de límites (BSDL). Se realizaron y publicaron más refinamientos con respecto al uso de todos los ceros para EXTEST, separando el uso de SAMPLE de PRELOAD y una mejor implementación para celdas OBSERVE_ONLY en 2001. [4] Desde 1990, este estándar ha sido adoptado por empresas de electrónica de todo el mundo. El escaneo de límites ahora es en su mayoría sinónimo de JTAG, pero JTAG tiene usos esenciales más allá de tales aplicaciones de fabricación. La revisión de 2013 [5] de IEEE Std. 1149.1 ha introducido un amplio conjunto de características opcionales, extensiones asociadas a BSDL y un nuevo lenguaje de descripción de procedimientos (PDL) basado en Tcl .
Aunque las primeras aplicaciones de JTAG apuntaban a pruebas a nivel de placa, aquí el estándar JTAG fue diseñado para ayudar con las pruebas, diagnósticos y aislamiento de fallas de dispositivos, placas y sistemas. Hoy en día, JTAG se utiliza como el medio principal para acceder a subbloques de circuitos integrados , lo que lo convierte en un mecanismo esencial para depurar sistemas integrados que podrían no tener ningún otro canal de comunicaciones con capacidad de depuración. [ cita requerida ] En la mayoría de los sistemas, la depuración basada en JTAG está disponible desde la primera instrucción después del reinicio de la CPU, lo que le permite ayudar con el desarrollo de software de arranque temprano que se ejecuta antes de que se configure nada. Un emulador en circuito (o, más correctamente, un adaptador JTAG ) usa JTAG como mecanismo de transporte para acceder a los módulos de depuración en chip dentro de la CPU de destino . Esos módulos permiten a los desarrolladores de software depurar el software de un sistema integrado directamente en el nivel de instrucción de la máquina cuando sea necesario, o (más típicamente) en términos de código fuente de lenguaje de alto nivel.
El soporte de depuración de software de sistema es para muchos desarrolladores de software la principal razón para estar interesados en JTAG. Muchas arquitecturas de silicio como PowerPC, MIPS, ARM y x86 construyeron una infraestructura completa de depuración de software, rastreo de instrucciones y rastreo de datos alrededor del protocolo JTAG básico. Sin embargo, con frecuencia los proveedores de silicio individuales solo implementan partes de estas extensiones. Algunos ejemplos son ARM CoreSight y Nexus , así como las implementaciones BTS (Branch Trace Storage), LBR (Last Branch Record) e IPT (Intel Processor Trace) de Intel. Hay muchas otras extensiones específicas de proveedores de silicio que pueden no estar documentadas excepto bajo NDA . La adopción del estándar JTAG ayudó a alejar los entornos de depuración centrados en JTAG de los primeros diseños específicos de procesadores. Normalmente, los procesadores se pueden detener, ejecutar paso a paso o dejar que se ejecuten libremente. Se pueden establecer puntos de interrupción de código, tanto para código en RAM (a menudo utilizando una instrucción de máquina especial, p. ej. INT3 ) como en ROM/flash. Los puntos de interrupción de datos suelen estar disponibles, al igual que la descarga masiva de datos a RAM. La mayoría de los diseños tienen depuración en modo de detención , pero algunos permiten que los depuradores accedan a registros y buses de datos sin necesidad de detener el núcleo que se está depurando. Algunas cadenas de herramientas pueden usar módulos ARM Embedded Trace Macrocell (ETM) o implementaciones equivalentes en otras arquitecturas para activar la actividad del depurador (o rastreo) en eventos de hardware complejos, como un analizador lógico programado para ignorar los primeros siete accesos a un registro desde una subrutina en particular.
En ocasiones, los desarrolladores de FPGA también utilizan JTAG para desarrollar herramientas de depuración. [6] Las mismas técnicas JTAG que se utilizan para depurar software que se ejecuta dentro de una CPU pueden ayudar a depurar otros bloques de diseño digital dentro de un FPGA. Por ejemplo, se pueden proporcionar instrucciones JTAG personalizadas para permitir la lectura de registros creados a partir de conjuntos arbitrarios de señales dentro del FPGA, lo que proporciona visibilidad para comportamientos que son invisibles para las operaciones de escaneo de límites. De manera similar, escribir dichos registros podría proporcionar una capacidad de control que de otro modo no estaría disponible.
JTAG permite que el hardware del programador de dispositivos transfiera datos a la memoria interna no volátil del dispositivo (por ejemplo, los CPLD ). Algunos programadores de dispositivos tienen un doble propósito: programar y depurar el dispositivo. En el caso de los FPGA, los dispositivos de memoria volátil también se pueden programar a través del puerto JTAG, normalmente durante el trabajo de desarrollo. Además, se puede acceder a las capacidades de monitoreo interno (temperatura, voltaje y corriente) a través del puerto JTAG.
Los programadores JTAG también se utilizan para escribir software y datos en la memoria flash . Esto se hace generalmente utilizando el mismo acceso al bus de datos que utilizaría la CPU y, a veces, lo gestiona la CPU. En otros casos, los propios chips de memoria tienen interfaces JTAG. Algunas arquitecturas de depuración modernas proporcionan acceso maestro de bus interno y externo sin necesidad de detener y tomar el control de una CPU. En el peor de los casos, suele ser posible controlar señales de bus externas utilizando la función de escaneo de límites.
En la práctica, al desarrollar un sistema embebido, emular el almacén de instrucciones es la forma más rápida de implementar el ciclo de depuración (editar, compilar, descargar, probar y depurar). [ cita requerida ] Esto se debe a que el emulador en circuito que simula un almacén de instrucciones se puede actualizar muy rápidamente desde el host de desarrollo a través de, por ejemplo, USB. El uso de un puerto UART en serie y un cargador de arranque para cargar el firmware en Flash hace que este ciclo de depuración sea bastante lento y posiblemente costoso en términos de herramientas; instalar el firmware en Flash (o SRAM en lugar de Flash) a través de JTAG es una solución intermedia entre estos extremos.
La tecnología de escaneo de límites JTAG proporciona acceso a muchas señales lógicas de un circuito integrado complejo, incluidos los pines del dispositivo. Las señales se representan en el registro de escaneo de límites (BSR) al que se puede acceder a través del TAP. Esto permite realizar pruebas y controlar los estados de las señales para realizar pruebas y depuraciones. Por lo tanto, se pueden localizar fallas tanto de software como de hardware (fabricación) y se puede monitorear un dispositivo en funcionamiento.
Cuando se combina con la prueba automática incorporada ( BIST ), la cadena de escaneo JTAG permite una solución integrada de bajo consumo para probar un CI en busca de ciertas fallas estáticas (cortocircuitos, aperturas y errores lógicos). El mecanismo de la cadena de escaneo generalmente no ayuda a diagnosticar o probar errores de tiempo, temperatura u otros errores operativos dinámicos que puedan ocurrir. Los casos de prueba a menudo se proporcionan en formatos estandarizados como SVF o su hermano binario XSVF, y se utilizan en pruebas de producción. La capacidad de realizar dichas pruebas en placas terminadas es una parte esencial del diseño para pruebas en los productos actuales, lo que aumenta la cantidad de fallas que se pueden encontrar antes de que los productos se envíen a los clientes.
Una interfaz JTAG es una interfaz especial que se agrega a un chip. Según la versión de JTAG, se agregan dos, cuatro o cinco pines. Las interfaces de cuatro y cinco pines están diseñadas para que varios chips en una placa puedan tener sus líneas JTAG en cadena si se cumplen condiciones específicas. [7] La interfaz de dos pines está diseñada para que se puedan conectar varios chips en una topología en estrella . En cualquier caso, una sonda de prueba solo necesita conectarse a un solo puerto JTAG para tener acceso a todos los chips en una placa de circuito .
Los pines del conector son:
El pin TRST es un reinicio activo bajo opcional para la lógica de prueba, generalmente asincrónico, pero a veces sincrónico, según el chip. Si el pin no está disponible, la lógica de prueba se puede reiniciar cambiando al estado de reinicio de manera sincrónica, utilizando TCK y TMS. Tenga en cuenta que reiniciar la lógica de prueba no implica necesariamente reiniciar nada más. Generalmente, existen algunas operaciones JTAG específicas del procesador que pueden reiniciar todo o parte del chip que se está depurando.
Dado que solo hay una línea de datos disponible, el protocolo es serial . La entrada de reloj está en el pin TCK. Se transfiere un bit de datos desde TDI y de salida a TDO por cada flanco ascendente de reloj de TCK. Se pueden cargar diferentes instrucciones. Las instrucciones para circuitos integrados típicos pueden leer el ID del chip, muestrear pines de entrada, controlar (o hacer flotar) pines de salida, manipular funciones de chip o derivar (canalizar TDI a TDO para acortar de manera lógica las cadenas de múltiples chips).
Al igual que con cualquier señal sincronizada, los datos presentados a TDI deben ser válidos durante un tiempo de configuración específico del chip antes y un tiempo de retención después del borde de reloj relevante (aquí, ascendente). Los datos de TDO son válidos durante un tiempo específico del chip después del borde descendente de TCK.
La frecuencia máxima de funcionamiento de TCK varía según todos los chips de la cadena (se debe utilizar la velocidad más baja), pero normalmente es de 10 a 100 MHz (100 a 10 ns por bit). Además, las frecuencias TCK dependen del diseño de la placa y de las capacidades y el estado del adaptador JTAG. Un chip puede tener un reloj JTAG de 40 MHz, pero solo si utiliza un reloj de 200 MHz para operaciones que no sean JTAG; y puede que necesite utilizar un reloj mucho más lento cuando esté en un modo de bajo consumo. En consecuencia, algunos adaptadores JTAG tienen reloj adaptativo que utiliza una señal RTCK (Return TCK). Las frecuencias TCK más rápidas son más útiles cuando se utiliza JTAG para transferir muchos datos, como cuando se almacena un programa ejecutable en la memoria flash .
El cronometraje cambia en los pasos del TMS a través de una máquina de estados JTAG estandarizada . La máquina de estados JTAG puede reiniciarse, acceder a un registro de instrucciones o acceder a los datos seleccionados por el registro de instrucciones.
Las plataformas JTAG suelen añadir señales a las pocas definidas por la especificación IEEE 1149.1. Una señal de reinicio del sistema (SRST) es bastante común, ya que permite a los depuradores reiniciar todo el sistema, no solo las partes con soporte JTAG. A veces hay señales de eventos que se utilizan para activar la actividad del host o del dispositivo que se está monitoreando a través de JTAG; o, tal vez, líneas de control adicionales.
Aunque pocos productos de consumo ofrecen un conector de puerto JTAG explícito, las conexiones suelen estar disponibles en la placa de circuito impreso como un remanente del desarrollo de prototipos y/o producción. Cuando se aprovechan, estas conexiones suelen proporcionar el medio más viable para la ingeniería inversa .
Número reducido de pines JTAG utiliza solo dos cables, un cable de reloj y un cable de datos. Esto se define como parte del estándar IEEE 1149.7. [8] Los pines del conector son:
Se llama cJTAG por compact JTAG.
La interfaz de dos cables redujo la presión sobre el número de pines y los dispositivos se pueden conectar en una topología en estrella . [9] La topología en estrella permite que algunas partes del sistema se apaguen, mientras que otras aún se pueden acceder a través de JTAG; una conexión en cadena requiere que todas las interfaces JTAG estén encendidas. Existen otras interfaces de dos cables, como Serial Wire Debug.
En JTAG, los dispositivos exponen uno o más puertos de acceso de prueba (TAP). La imagen de arriba muestra tres TAP, que pueden ser chips individuales o módulos dentro de un chip. Una conexión en cadena de TAP se denomina cadena de escaneo o (en términos generales) objetivo. Las cadenas de escaneo pueden tener una longitud arbitraria, pero en la práctica veinte TAP es una longitud inusual. [ cita requerida ]
Para utilizar JTAG, se conecta un host a las señales JTAG del objetivo (TMS, TCK, TDI, TDO, etc.) a través de algún tipo de adaptador JTAG , que puede necesitar manejar problemas como cambio de nivel y aislamiento galvánico . El adaptador se conecta al host mediante alguna interfaz como USB, PCI, Ethernet, etc.
El host se comunica con los TAP manipulando TMS y TDI junto con TCK, y leyendo los resultados a través de TDO (que es la única entrada estándar del lado del host). Las transiciones de salida TMS/TDI/TCK crean la primitiva de comunicación JTAG básica sobre la que se basan los protocolos de capa superior:
En un nivel básico, el uso de JTAG implica leer y escribir instrucciones y sus registros de datos asociados; y, a veces, implica ejecutar una serie de ciclos de prueba. Detrás de esos registros hay hardware que no está especificado por JTAG y que tiene sus propios estados que se ven afectados por las actividades de JTAG.
La mayoría de los hosts JTAG utilizan la ruta más corta entre dos estados, tal vez limitada por peculiaridades del adaptador. (Por ejemplo, un adaptador [ ¿cuál? ] solo maneja rutas cuyas longitudes son múltiplos de siete bits). Algunas capas construidas sobre JTAG monitorean las transiciones de estado y utilizan rutas poco comunes para activar operaciones de nivel superior. Algunos núcleos ARM utilizan dichas secuencias para ingresar y salir de un modo SWD de dos cables (no JTAG) . Una secuencia Zero Bit Scan (ZBS) se utiliza en IEEE 1149.7 [8] para acceder a funciones avanzadas como cambiar TAP dentro y fuera de las cadenas de escaneo, administración de energía y un modo de dos cables diferente.
Los tamaños de los registros de instrucciones tienden a ser pequeños, quizás de cuatro o siete bits de ancho. A excepción de BYPASS y EXTEST, todos los códigos de operación de instrucciones están definidos por el implementador TAP, al igual que sus registros de datos asociados; no se deben utilizar códigos de instrucciones no definidos. Dos instrucciones clave son:
Al salir del estado RESET, el registro de instrucciones se carga previamente con BYPASS o IDCODE. Esto permite a los hosts JTAG identificar el tamaño y, al menos parcialmente, el contenido de la cadena de escaneo a la que están conectados. (Pueden ingresar al estado RESET y luego escanear el registro de datos hasta que vuelvan a leer los datos que escribieron. Un registro BYPASS tiene solo un bit cero; mientras que un registro IDCODE tiene 32 bits y comienza con un uno. Por lo tanto, los bits no escritos por el host se pueden asignar fácilmente a TAP). Esta identificación se usa a menudo para verificar la configuración manual, ya que IDCODE a menudo no es específico. Por ejemplo, podría identificar un microcontrolador basado en ARM Cortex-M3, sin especificar el proveedor o el modelo del microcontrolador; o un FPGA en particular, pero no cómo ha sido programado.
Un modismo común implica desplazar BYPASS hacia los registros de instrucciones de todos los TAP excepto uno, que recibe alguna otra instrucción. De esa manera, todos los TAP excepto uno exponen un registro de datos de un solo bit, y los valores se pueden desplazar selectivamente hacia dentro o hacia fuera del registro de datos de ese TAP sin afectar a ningún otro TAP.
El estándar IEEE 1149.1 (JTAG) describe una serie de instrucciones para respaldar las aplicaciones de escaneo de límites. Algunas de estas instrucciones son obligatorias , pero los TAP utilizados para la depuración en lugar de las pruebas de escaneo de límites a veces brindan un soporte mínimo o nulo para estas instrucciones. Esas instrucciones obligatorias operan en el Registro de escaneo de límites (BSR) definido en el archivo BSDL e incluyen:
Las instrucciones opcionales definidas por IEEE incluyen:
Los dispositivos pueden definir más instrucciones, y esas definiciones deben ser parte de un archivo BSDL proporcionado por el fabricante. A menudo, solo se marcan como PRIVADOS.
Los dispositivos se comunican con el mundo a través de un conjunto de pines de entrada y salida. Por sí solos, estos pines proporcionan una visibilidad limitada del funcionamiento del dispositivo. Sin embargo, los dispositivos que admiten el escaneo de límites contienen una celda de registro de desplazamiento para cada pin de señal del dispositivo. Estos registros están conectados en una ruta dedicada alrededor del límite del dispositivo (de ahí el nombre). La ruta crea una capacidad de acceso virtual que evita las entradas y salidas normales, lo que proporciona un control directo del dispositivo y una visibilidad detallada de las señales. [10]
El fabricante suele describir el contenido del registro de escaneo de límites, incluidas las capacidades de E/S de señales, mediante un archivo BSDL específico de la pieza . Estos se utilizan con "listas de conexiones" de diseño de sistemas CAD/EDA para desarrollar pruebas utilizadas en la fabricación de placas. Los sistemas de prueba comerciales suelen costar varios miles de dólares por un sistema completo e incluyen opciones de diagnóstico para detectar fallas, como circuitos abiertos y cortocircuitos. También pueden ofrecer visualizadores esquemáticos o de diseño para representar la falla de manera gráfica.
Para habilitar el escaneo de límites, los proveedores de circuitos integrados agregan lógica a cada uno de sus dispositivos, incluidas celdas de escaneo para cada uno de los pines de señal. Luego, estas celdas se conectan entre sí para formar el registro de desplazamiento de escaneo de límites (BSR), que está conectado a un controlador TAP. Estos diseños son parte de la mayoría de las bibliotecas Verilog o VHDL. Los costos adicionales para esta lógica adicional son mínimos y, en general, valen la pena para permitir pruebas eficientes a nivel de placa.
Un ejemplo ayuda a mostrar el funcionamiento de JTAG en sistemas reales. El ejemplo que se muestra aquí es el TAP de depuración de un procesador ARM11 , el núcleo ARM1136 [11] . El procesador en sí tiene una amplia capacidad JTAG, similar a la que se encuentra en otros núcleos de CPU, y está integrado en chips con capacidades aún más amplias a las que se accede a través de JTAG.
Este es un ejemplo no trivial, que es representativo de una muestra representativa significativa de sistemas habilitados para JTAG. Además, muestra cómo se construyen los mecanismos de control utilizando las primitivas de lectura/escritura de registros de JTAG, y cómo se combinan para facilitar la prueba y la depuración de elementos lógicos complejos; las CPU son comunes, pero los FPGA y los ASIC incluyen otros elementos complejos que necesitan depurarse.
Los licenciatarios de este núcleo lo integran en chips, generalmente combinándolo con otros TAP, así como con numerosos periféricos y memoria. Uno de esos otros TAP se encarga de las pruebas de escaneo de límites para todo el chip; el TAP de depuración no lo admite. Algunos ejemplos de estos chips son:
Ambos procesadores están pensados para su uso en teléfonos móviles inalámbricos, por lo que incluyen controladores TAP que modifican la cadena de escaneo JTAG: la depuración del funcionamiento a bajo consumo requiere acceder a los chips cuando están casi totalmente apagados y, por lo tanto, cuando no todos los TAP están operativos. Esa modificación de la cadena de escaneo es uno de los temas de un próximo estándar IEEE 1149.7 [8] .
Este TAP de depuración expone varias instrucciones estándar y algunas diseñadas específicamente para la depuración asistida por hardware , donde una herramienta de software (el depurador) utiliza JTAG para comunicarse con un sistema que se está depurando:
BYPASS
y IDCODE
, instrucciones estándar como se describe arribaEXTEST
, INTEST
, instrucciones estándar, pero que operan en el núcleo en lugar de en una cadena de escaneo de límite externo. EXTEST
es nominalmente para escribir datos en el núcleo, INTEST
es nominalmente para leerlos; pero dos cadenas de escaneo son excepciones a esa regla.SCAN_N
Instrucción ARM para seleccionar la cadena de escaneo numerada que se utiliza con EXTEST
o INTEST
. Hay seis cadenas de escaneo:0
- Registro de identificación del dispositivo, 40 bits de datos de identificación de solo lectura1
- Registro de estado y control de depuración (DSCR), 32 bits utilizados para operar las funciones de depuración4
- Registro de transferencia de instrucciones (ITR), 33 bits (32 instrucciones más un bit de estado) utilizados para ejecutar instrucciones del procesador mientras está en un modo de depuración especial (ver a continuación)5
- Canal de comunicaciones de depuración (DCC), 34 bits (una palabra de datos larga más dos bits de estado) utilizados para la transferencia de datos bidireccional al núcleo. Se utiliza tanto en modo de depuración como, posiblemente, en tiempo de ejecución cuando se comunica con software que reconoce el depurador.6
- Módulo de seguimiento integrado (ETM), 40 bits (dirección de 7 bits, una palabra de datos de 32 bits de longitud y un bit de lectura/escritura) que se utiliza para controlar el funcionamiento de un mecanismo pasivo de seguimiento de datos e instrucciones. Esto alimenta un búfer de seguimiento integrado (ETB) en el chip o un módulo de recopilación de datos de seguimiento externo de alta velocidad. El seguimiento admite la depuración pasiva (examinando el historial de ejecución) y la creación de perfiles para ajustar el rendimiento.7
- módulo de depuración, 40 bits (dirección de 7 bits, una palabra de datos de 32 bits de longitud y un bit de lectura/escritura) que se utilizan para acceder a puntos de interrupción de hardware, puntos de vigilancia y más. Estos se pueden escribir mientras el procesador está en funcionamiento; no es necesario que esté en modo de depuración.HALT
y RESTART
, instrucciones específicas de ARM11 para detener y reiniciar la CPU. Al detenerla, el núcleo pasa al modo de depuración , donde se puede usar el ITR para ejecutar instrucciones, incluido el uso del DCC para transferir datos entre el host de depuración (JTAG) y la CPU.ITRSEL
Instrucción específica de ARM11 para acelerar algunas operaciones con ITR.Ese modelo se parece al que se utiliza en otros núcleos ARM. Los sistemas que no son ARM suelen tener capacidades similares, tal vez implementadas mediante los protocolos Nexus sobre JTAG u otros esquemas específicos del proveedor.
Los núcleos ARM7 y ARM9 más antiguos incluyen un módulo EmbeddedICE [14] que combina la mayoría de esas funciones, pero tiene un mecanismo complicado para la ejecución de instrucciones: el depurador debe controlar la secuencia de instrucciones de la CPU, reloj por reloj, y acceder directamente a los buses de datos para leer y escribir datos en la CPU. El ARM11 utiliza el mismo modelo para el soporte de trazas (ETM, ETB) que esos núcleos más antiguos.
Los núcleos ARM Cortex más nuevos se parecen mucho a este modelo de depuración, pero se basan en un puerto de acceso de depuración (DAP) en lugar de un acceso directo a la CPU. En esta arquitectura (denominada tecnología CoreSight ), el núcleo y el módulo JTAG son completamente independientes. También están desacoplados de JTAG para que puedan alojarse en la interfaz SWD de dos cables de ARM (ver a continuación) en lugar de solo la interfaz JTAG de seis cables. (ARM toma las cuatro señales JTAG estándar y agrega el TRST opcional, más la señal RTCK utilizada para la sincronización adaptativa). El CoreSight JTAG-DP es asincrónico a los relojes del núcleo y no implementa RTCK. [15] Además, los núcleos más nuevos tienen soporte de seguimiento actualizado.
Una forma básica de depurar software es presentar un modelo de un solo subproceso, donde el depurador detiene periódicamente la ejecución del programa y examina su estado, tal como lo exponen los contenidos de los registros y la memoria (incluidos los registros del controlador periférico). Cuando se acercan eventos interesantes del programa, una persona puede querer ejecutar instrucciones paso a paso (o líneas de código fuente) para observar cómo se produce un mal comportamiento en particular.
Por ejemplo, un host JTAG podría detener el núcleo, ingresar al modo de depuración y luego leer los registros de la CPU mediante ITR y DCC. Después de guardar el estado del procesador, podría escribir esos registros con los valores que necesite y luego ejecutar algoritmos arbitrarios en la CPU, accediendo a la memoria y los periféricos para ayudar a caracterizar el estado del sistema. Después de que el depurador realice esas operaciones, se puede restaurar el estado y continuar la ejecución mediante la instrucción RESTART.
El módulo de depuración también ingresa al modo de depuración de manera asincrónica al activar un punto de vigilancia o un punto de interrupción, o al emitir una instrucción BKPT (punto de interrupción) desde el software que se está depurando. Cuando no se utiliza para el seguimiento de instrucciones, el ETM también puede activar la entrada al modo de depuración; admite activadores complejos sensibles al estado y al historial, así como las comparaciones de direcciones simples expuestas por el módulo de depuración. Las transiciones asincrónicas al modo de depuración se detectan al sondear el registro DSCR. Así es como se implementa el paso a paso: DETENER el núcleo, establecer un punto de interrupción temporal en la siguiente instrucción o en la siguiente declaración de alto nivel, REINICIAR, sondear DSCR hasta que detecte una entrada asincrónica al estado de depuración, eliminar ese punto de interrupción temporal, repetir.
El software moderno suele ser demasiado complejo para funcionar bien con un modelo de un solo subproceso. Por ejemplo, un procesador utilizado para controlar un motor (quizás uno que acciona una hoja de sierra) puede no ser capaz de entrar en modo de detención de forma segura; puede que tenga que seguir gestionando interrupciones para garantizar la seguridad física de las personas o de la maquinaria. Emitir una instrucción HALT mediante JTAG puede ser peligroso.
Los procesadores ARM admiten un modo de depuración alternativo, llamado Modo Monitor , para trabajar con tales situaciones. (Esto es distinto del Modo Monitor Seguro implementado como parte de las extensiones de seguridad en los núcleos ARM más nuevos; administra las operaciones de depuración, no las transiciones de seguridad). En esos casos, los puntos de interrupción y los puntos de vigilancia activan un tipo especial de excepción de hardware, transfiriendo el control a un monitor de depuración que se ejecuta como parte del software del sistema. Este monitor se comunica con el depurador mediante el DCC y podría organizar, por ejemplo, ejecutar un solo paso de un solo proceso mientras otros procesos (y controladores de interrupciones) continúan ejecutándose.
Los proveedores de microprocesadores suelen definir sus propias extensiones de depuración específicas para cada núcleo. Entre estos proveedores se incluyen Infineon , MIPS con EJTAG y otros. Si el proveedor no adopta un estándar (como los que utilizan los procesadores ARM o Nexus), debe definir su propia solución. Si admite el escaneo de límites, generalmente crea la depuración sobre JTAG.
Freescale tiene COP y OnCE (On-Chip Emulation). OnCE incluye un comando JTAG que hace que un TAP entre en un modo especial donde el IR contiene comandos de depuración OnCE [16] para operaciones como pasos individuales, puntos de interrupción y acceso a registros o memoria. También define EOnCE (Enhanced On-Chip Emulation) [17], que se presenta como una solución para problemas en tiempo real.
ARM tiene una extensa arquitectura de depuración de núcleos de procesador (CoreSight) que comenzó con EmbeddedICE (una función de depuración disponible en la mayoría de los núcleos ARM) y ahora incluye muchos componentes adicionales, como un ETM (Embedded Trace Macrocell), con un puerto de rastreo de alta velocidad, compatible con el rastreo de múltiples núcleos y múltiples subprocesos. Tenga en cuenta que el rastreo no es invasivo; los sistemas no necesitan dejar de funcionar para ser rastreados. (Sin embargo, los datos de rastreo son demasiado voluminosos para usar JTAG como algo más que un canal de control de rastreo).
Nexus define una infraestructura de depuración de procesadores que es en gran medida independiente del proveedor. Una de sus interfaces de hardware es JTAG. También define una interfaz de puerto auxiliar de alta velocidad, que se utiliza para el seguimiento y más. Nexus se utiliza con algunas plataformas más nuevas, como los procesadores de la serie Atmel AVR32 y Freescale MPC5500.
Se accede a la interfaz JTAG del objetivo mediante alguna aplicación compatible con JTAG y algún hardware adaptador JTAG. Existe una amplia gama de este tipo de hardware, optimizado para fines tales como pruebas de producción, depuración de sistemas de alta velocidad, desarrollo de microcontroladores de bajo costo, etc. De la misma manera, el software utilizado para controlar dicho hardware puede ser bastante variado. Los desarrolladores de software utilizan principalmente JTAG para depurar y actualizar el firmware.
No existen estándares oficiales para los conectores físicos de los adaptadores JTAG. Las placas de desarrollo suelen incluir un encabezado para admitir las herramientas de desarrollo preferidas; en algunos casos, incluyen varios de estos encabezados porque necesitan admitir varias de estas herramientas. Por ejemplo, un microcontrolador, un FPGA y un procesador de aplicaciones ARM rara vez comparten herramientas, por lo que una placa de desarrollo que utilice todos esos componentes puede tener tres o más encabezados. Las placas de producción pueden omitir los encabezados o, cuando el espacio es limitado, pueden proporcionar acceso a la señal JTAG mediante puntos de prueba.
Algunas asignaciones de pines comunes [20] para conectores de pines de 2,54 mm (0,100 in) son:
Estos conectores suelen incluir más que las cuatro señales estandarizadas (TMS, TCK, TDI, TDO). Por lo general, se proporcionan señales de reinicio, una o ambas de TRST (reinicio de TAP) y SRST (reinicio del sistema). El conector suele proporcionar el voltaje de suministro lógico de la placa bajo prueba para que los adaptadores JTAG utilicen los niveles lógicos adecuados. El voltaje de la placa también puede servir como una entrada de depuración de presencia de placa . Se pueden proporcionar otras señales de entrada o salida de eventos, o líneas de E/S de propósito general (GPIO), para admitir arquitecturas de depuración más complejas.
Los productos de gama alta suelen utilizar conectores densos (con frecuencia conectores MICTOR de 38 pines ) para permitir el seguimiento de alta velocidad junto con las operaciones JTAG. Una tendencia reciente es que las placas de desarrollo integren una interfaz USB a JTAG, donde se utiliza un segundo canal para un puerto serie. (Las placas más pequeñas también pueden recibir alimentación a través de USB. Dado que las PC modernas tienden a omitir los puertos serie, estos enlaces de depuración integrados pueden reducir significativamente el desorden para los desarrolladores). Las placas de producción a menudo dependen de conexiones de lecho de clavos a puntos de prueba para realizar pruebas y programar.
El hardware del adaptador varía ampliamente. Cuando no está integrado en una placa de desarrollo, implica un cable corto para conectarlo a un conector JTAG en la placa de destino; una conexión al host de depuración, como un enlace USB, PCI o Ethernet; y suficiente electrónica para adaptar los dos dominios de comunicaciones (y, a veces, proporcionar aislamiento galvánico ). Puede ser necesaria una fuente de alimentación independiente. Existen adaptadores tontos , en los que el host decide y realiza todas las operaciones JTAG, y adaptadores inteligentes , en los que parte de ese trabajo se realiza dentro del adaptador, a menudo impulsado por un microcontrolador. Los adaptadores inteligentes eliminan las latencias de enlace para las secuencias de operaciones que pueden implicar el sondeo de cambios de estado entre pasos y, en consecuencia, pueden ofrecer un mayor rendimiento.
A partir de 2018 [actualizar], los adaptadores con un enlace USB desde el host son el enfoque más común. Los productos de gama alta suelen ser compatibles con Ethernet , con la ventaja de que el host de depuración puede estar bastante alejado. Los adaptadores que admiten puertos de seguimiento de alta velocidad generalmente incluyen varios megabytes de búfer de seguimiento y proporcionan enlaces de alta velocidad (USB o Ethernet) para obtener esos datos del host.
Los adaptadores de puerto paralelo son simples y económicos, pero son relativamente lentos porque utilizan la CPU del host para cambiar cada bit (" bit banging "). Su utilidad ha disminuido porque la mayoría de las computadoras en los últimos años no tienen un puerto paralelo. La compatibilidad con controladores también es un problema porque el uso de pines por parte de los adaptadores varía ampliamente. Dado que el puerto paralelo se basa en un nivel lógico de 5 V, la mayoría de los adaptadores carecían de compatibilidad con la traducción de voltaje para voltajes objetivo de 3,3 V o 1,8 V.
También existen adaptadores de puerto serie RS-232 , cuya utilidad está disminuyendo de forma similar. Por lo general, requieren una transferencia de bits más lenta que la de un puerto paralelo o un microcontrolador que traduce algún protocolo de comando a operaciones JTAG. Estos adaptadores serie tampoco son rápidos, pero sus protocolos de comando generalmente se pueden reutilizar sobre enlaces de mayor velocidad.
En el caso de todos los adaptadores JTAG, la compatibilidad con software es una preocupación básica. Muchos proveedores no publican los protocolos que utiliza el hardware de sus adaptadores JTAG, lo que limita a sus clientes a las cadenas de herramientas compatibles con dichos proveedores. Este es un problema particular en el caso de los adaptadores "inteligentes", algunos de los cuales incorporan cantidades significativas de conocimiento sobre cómo interactuar con CPU específicas.
La mayoría de los entornos de desarrollo para software integrado incluyen compatibilidad con JTAG. En términos generales, existen tres fuentes de este tipo de software:
Todo este software suele incluir funciones básicas de depuración: detención, interrupción, ejecución paso a paso, puntos de interrupción, exploración de la estructura de datos, etc. Las herramientas comerciales suelen ofrecer herramientas como simuladores muy precisos y análisis de trazas, que actualmente no están disponibles como código abierto.
Serial Wire Debug (SWD) es una interfaz eléctrica alternativa de 2 pines que utiliza el mismo protocolo. Utiliza la conexión GND existente. SWD utiliza un protocolo de cable bidireccional estándar de CPU ARM, definido en la interfaz de depuración ARM v5. [21] Esto permite que el depurador se convierta en otro maestro de bus AMBA para acceder a la memoria del sistema y a los registros periféricos o de depuración. La velocidad de datos es de hasta 4 MB/s a 50 MHz . SWD también tiene detección de errores incorporada. En los dispositivos JTAG con capacidad SWD, TMS y TCK se utilizan como señales SWDIO y SWCLK, lo que permite programadores de modo dual.