# JTAG

En electrónica, JTAG, acrónimo de Joint Test Action Group, es el nombre comúnmente utilizado para referirse a la norma IEEE 1149.1 titulada Standard Test Access Port and Boundary-Scan Architecture para test access ports utilizada para comprobar PCBs utilizando escaneo perimetral (boundary scan).
JTAG se estandarizó en 1990 como la norma IEEE 1149.1-1990. En 1994 se agregó un suplemento que contiene una descripción del boundary scan description language (BSDL). Desde entonces, esta norma fue adoptada por las compañías electrónicas de todo el mundo. Actualmente, Boundary-scan y JTAG son sinónimos.
Diseñado originalmente para circuitos impresos, actualmente es utilizado para la prueba de submódulos de circuitos integrados, y es muy útil también como mecanismo para depuración de aplicaciones embebidas, puesto que provee una puerta trasera para acceder al sistema. Cuando se utiliza como herramienta de depuración, un emulador interno (o adaptador JTAG) usa JTAG como mecanismo de transporte permitiendo al programador acceder al módulo de depuración que se encuentra integrado en la CPU. El módulo de depuración permite al programador corregir errores de código y de lógica en sus sistemas.

## Características eléctricas

Una interfaz JTAG es una interfaz especial de cuatro o cinco señales, diseñada de tal forma que varios chips en una tarjeta puedan tener sus líneas JTAG conectadas en cascada (daisy chain). De esta forma, una sonda de testeo JTAG necesita conectarse a un solo "puerto JTAG" para acceder a todos los chips JTAG de una placa electrónica. Los pines del conector son:
* TDI (Entrada de Datos de Testeo)
* TDO (Salida de Datos de Testeo)
* TCK (Reloj de Testeo)
* TMS (Selector de Modo de Testeo)
* TRST (Reset de Testeo) es opcional.
Ya que posee una sola línea de datos, el protocolo es necesariamente serie, como el Serial Peripheral Interface. La entrada de la señal de reloj es por el pin TCK. La configuración del dispositivo se realiza manipulando una máquina de estados de un bit empleando el pin TMS. Un bit de datos es cargado en TDI y otro sacado en TDO por cada pulso de reloj de la señal TCK. Se pueden cargar diferentes modo de instrucción como leer el ID del chip, muestrear el valor de pines de entrada/salida, manejar pines de salida, manipular funciones del chip, o funciones de derivación (gracias al bypass proporcionado por la unión del pin TDO de cada chip JTAG al pin TDI del siguiente chip JTAG, de forma que todos los chips JTAG pueden estar encadenados en cascada en un mismo diseño). La frecuencia de reloj del pin TCK varía en función de cada chip, pero típicamente está en el rango de 10-100 MHz (10-100ns/bit).
Cuando se hace la operación de boundary scan (escaneo perimetral) en circuitos integrados, las señales manipuladas están entre diferentes bloques funcionales del chip, más que entre diferentes chips.
La señal TRST es opcional y activa a nivel bajo, por lo general asíncrona, aunque puede ser síncrona (depende del chip). Se utiliza para resetear o reiniciar la prueba lógica. Si no se dispone de dicha señal, la prueba lógica puede reiniciarse mediante un comando reset.
Algunos productos de consumo mantienen su puerto JTAG, por lo que sus conexiones están a menudo disponibles en la PCB como parte de la fase de desarrollo del producto. Dejar accesible este interfaz también puede suponer un riesgo de ingeniería inversa.

## Extensiones comunes

Extensiones de fabricantes: Infineon, MIPS EJTAG, Freescale COP, ARM ETM (Extended Trace Macrocell), OnCE etc.

## Aplicaciones

* Casi cualquier sistema embebido tiene un puerto JTAG.
* El conector del bus PCI posee pines JTAG.
* Existe una tarjeta especial JTAG que se puede usar para regrabar una BIOS dañada.

## Software cliente

La interfaz JTAG es accesible por medio de aplicaciones de JTAG.

### Software libre

* Very cheap interface working with the CICLaMaB program
* OpenCores JTAG module is an IP core which can be used to provide JTAG in a design. It is part of the OpenCores project
* The openwince project produce the JTAG Tools supporting a large set of inexpensive IEEE 1284 parallel printer port cables (the project has made no releases since 2003 but its CVS repository is quite active)
* JTAG-ARM9 provides a JTAG access program for the ARM9 processor.
* JTAG for the LART aimed at the LART processor
* JTAG base layer is an attempt at creating a JTAG library
* The uCLinux for Blackfin project have a JTAG-backend for the GNU Debugger and a JTAG Tools version specifically for Blackfin based on the openwince work
* JTAG toolkit is a free software JTAG tool suite, including API library and several examples
* OpenOCD is an GPL Open Source GDB Server that currently supports ARM7 and some ARM9 Targets
* Boundary Scan Coach Un software de aprendizaje interactivo para IEEE Std.1149.x
* Open JTAG
* UrJTAG aims to create an enhanced, modern tool for communicating over JTAG with flash chips, CPUs, and many more

### Software propietario

* JTAG Technologies Test and programming development systems.
* TopJTAG Circuit visualization and debugging software employing boundary-scan (IEEE 1149.1 JTAG) technology.
* JTAG ScanWorks JTAG development systems.
* Green Hills Software MULTI Debugger and Green Hills Probe, Software and hardware supports JTAG and BDM based development on ARM, XScale, PowerPC, MIPS, ColdFire, Blackfin, ARC, TI C6000, v800, StarCore, SH, M32R, and LSI ZSP.
* Ronetix PEEDI, JTAG Emulator and Flash Programmer for ARM7/9, XScale
* SEGGER Microcontroller Systeme GmbH j-link, USB to JTAG interface for ARM cores (J-Flash, J-Mem, RDI Pro Bundle)
* Lauterbach Datentechnik GmbH produce JTAG-based in-circuit emulators the most popular being TRACE 32
* Macraigor Systems LLC JTAG Commander and OCD Commander
* Abatron AG's BDI-2000 acts as a GDB server on your LAN, giving you source-level debugging via JTAG.
* JTAG Emulator Embedded Toolsmiths Guardian-SE JTAG Emulator connects a GDB server on your LAN to the JTAG interface on PowerPC, MIPS, XScale and Arm Processors. This allows: JTAG FLASH Programming, JTAG Emulation and JTAG source-level debugging via JTAG for PowerPC, MIPS, XScale and ARM Processors.
* XJTAG JTAG Development Systems – Boundary Scan test, visual analysis and debug, In-System Programming
* Göpel electronic SCANFLEX, JTAG / Boundary Scan test and In-System Programming, debug, emulation.
* Corelis ScanExpress
* GOEPEL Electronics JTAG / Boundary Scan test and In-System Programming, debug, emulation at device, board, and system level; SYSTEM CASCON, SCANFLEX, CASLAN.
* Wind River MultiCore Debugger, Wind River OCD, Probe, ICE and Trace tools JTAG support along with HW reference development boards.