# JTAG

JTAG és un acrònim de Joint Test Action Group, una associació de la indústria de l'electrònica que es va formar el 1985 per desenvolupar un mètode de verificació i prova per dissenys electrònics. JTAG també és el nom comú utilitzat per a la norma IEEE 1149.1 titulada Standard Test Access Port and Boundary-Scan Architecture per a proves d'accés a ports utilitzada per a provar PCBs utilitzant escaneig de límits. Aquest mètode permet verificar i provar dissenys de xips i plaques de circuit imprès un cop ja s'han fabricat.
JTAG es va estandarditzar l'any 1990. L'Institute of Electrical and Electronics Engineers va condensar els resultats d'aquests esforços a l'estàndard IEEE 1149.1-1990, titulat Standard Test Access Port and Boundary-Scan Architecture. El 1994 es va agregar un suplement que conté una descripció del boundary scan description language (BSDL). Des de llavors, aquesta norma va ser adoptada per les companyies electròniques de tot el món. Actualment, Boundary scan i JTAG són sinònims.
Dissenyat originalment per a circuits impresos, actualment és utilitzat per a la prova de submòduls de circuits integrats, i és molt útil també com a mecanisme per a depuració d'aplicacions encastades, ja que proveeix una porta posterior cap a dins del sistema. Quan s'utilitza com a eina de depuració, un emulador en circuit que usa JTAG com a mecanisme de transport permet al programador accedir al mòdul de depuració que es troba integrat dins de la CPU. El mòdul de depuració permet al programador corregir els seus errors de codi i lògica dels seus sistemes.
JTAG implementa estàndards per al monitoratge de l'estat intern dels xips en el disseny electrònic automatitzat (EDA) com a eina complementària a la simulació digital. Especifica la utilització d'un port dedicat de depuració, implementant una interfície de comunicacions sèrie que permet accés amb poca sobrecàrrega i sense requerir d'accés als bussos d'adreces i dades. La interfície connecta amb dispositius tipus "Test Access Port" .
L'estàndard JTAG ha estat estès pels diferents fabricants de dispositius electrònics amb variants específiques de cadascun per oferir característiques úniques de cada fabricant.

## Història

Als anys 80, les plaques de circuit de múltiples capes i alguns tipus de circuits integrats (IC) s'estaven convertint en l'estàndard, amb la conseqüència de que no era possible arribar amb sondes a algunes de les connexions entre els diferents ICs. La majoria dels errors de fabricació i funcionament de les plaques eren deguts a punts de soldadura defectuosos, imperfeccions a les connexions entre plaques, o als contactes entre els pins dels IC i els sòcols. El Joint Test Action Group (JTAG) es va formar al 1985 per proveir d'una visió externa als integrats de manera que aquests defectes es poguessin descobrir.
El JTAG va esdevenir un estàndard del IEEE l'any 1990 com IEEE Std. 1149.1-1990 després de molts anys d'ús inicial. Aquest mateix any, Intel va llançar el primer processador, (el 80486), amb suport JTAG, guiant cap a una adopció més ràpida per part de la resta de fabricants. L'any 1994 es va afegir un apèndix que contenia la especificació del "boundary scan description language" (BSDL). Es van fer alguns refinaments posteriors que es van alliberar l'any 2001. Des del 1990 aquest estàndard està en ús per part de companyies d'electrònica de tot el món. El JTAG s'associa actualment amb el Boundary-scan, però el JTAG té utilitats més enllà que les emprades durant la fabricació de components i plaques de circuit imprès.

## Característiques Elèctriques

Una interfície JTAG és una interfície especial de quatre o cinc pins agregats a un xip, dissenyada de tal manera que diversos xips en una targeta puguin tenir les seves línies JTAG connectades en daisy chain, de tal manera que una sonda de testeig JTAG necessita connectar-se a un sol "port JTAG" per accedir a tots els xips d'un circuit imprès. Els pins del connector són:
* TDI (Entrada de Dades de Testeig)
* TDO (Sortida de Dades de Testeig)
* TCK (Rellotge de Testeig)
* TMS (Selector de Forma de Testeig)
* TRST (Reset de Testeig), és opcional.
Ja que posseeix una sola línia de dades, el protocol és necessàriament sèrie, com el Serial Peripheral Interface. L'entrada del senyal de rellotge és pel pin TCK. La configuració del dispositiu es realitza manipulant una màquina d'estats d'un bit emprant el pin TMS. Un bit de dades és carregat al TDI i un altre tret pel TDO per cada impuls de rellotge del senyal TCK. Es poden carregar diferents menes d'instruccions com llegir l'ID del xip, mostrejar el valor dels pins d'entrada/sortida, manipular pins de sortida, manipular funcions del xip, o funcions de bypass que uneixen el pin TDI amb el TDO per unir lògicament cadenes de diversos xips (xips en cascada). La freqüència de treball del senyal de rellotge del pin TCK varia en funció de cada xip, però típicament està en el rang dels 10-100 MHz (10-100ns/bit).
Quan es fa l'operació de boundary scan en circuits integrats, els senyals manipulats estan entre diferents blocs funcionals del xip, més que entre diferents xips.
El pin TRST és un senyal opcional "active-low" per fer un reinici de la prova lògica (en general asíncrona, però que de vegades està sincronitzada amb el rellotge, depenent del xip). Si no es disposa d'aquest pin, la prova lògica pot reiniciar-se mitjançant una instrucció reset.
Existeixen productes de consum que tenen un port JTAG integrat, per a la qual cosa les connexions estan sovint disponibles en la placa PCB com a part de la fase de prototipat del producte. Aquestes connexions poden proporcionar una forma senzilla de realitzar enginyeria inversa.

## Debug

Tot i que les aplicacions inicials del JTAG eren per a trobar problemes a les plaques, l'estàndard JTAG es va dissenyar per assistir la depuració de dispositius, plaques i sistemes, pel diagnòstic i l'aïllament de problemes. En l'actualitat el JTAG és el mitjà principal per accedir als sub-blocs dels circuits integrats, fet que el converteix en un mecanisme essencial per depurar sistemes encastats que poden no tenir cap altre canal de comunicacions pel que realitzar la feina.
En molts sistemes les capacitats de depuració estan disponibles des del primer moment després del reset de la CPU, fet que ajuda al desenvolupament del codi inicial d'arrancada que s'executa abans que la resta del sistema es pugui configurar. JTAG es pot emprar com a mecanisme de transport per accedir als mòduls de debug de la CPU. Aquests mòduls permeten als programadors de software accedir als sistemes encastats directament a nivell de codi màquina si cal, i la depuració i execució del codi línia a línia. Aquest suport és la principal raó per molts desenvolupadors de software per interessar-se pel JTAG. Moltes arquitectures com el PowerPC, MIPS, ARM o el x86 posseeixen capacitats completes de debug al voltant del protocol bàsic del JTAG. Tot i així amb frequència alguns fabricants només implementen parts d'aquestes extensions, com per exemple el CoreSight o Nexus d'ARM, o per part d'Intel les implementacions del BTS (Branch Trace Storage), LBR (Last Branch Record), i el IPT (Intel Processor Trace).
De vegades els desenvolupadors de FPGA també empren el JTAG per fer eines de debug. Les mateixes tècniques emprades per a la depuració de software funcionant dins d'una CPU poden ajudar a depurar dissenys dins d'un FPGA. Per exemple, es poden proveir instruccions JTAG personalitzades que permetin la lectura de registres construïts a partir de sets arbitraris de senyals interns del FPGA, permetent visibilitat per alguns comportaments que serien invisibles en operacions de "boundary scan". De manera similar, operacions d'escriptura poden permetre controlar aspectes que d'una altra manera no serien possibles.

## Programació de firmware

El JTAG permet a un aparell de programació de dispositius transferir dades a la memòria interna no-volàtil (per exemple en el cas dels CPLDs). Alguns programadors permeten, a part de programar, depurar el dispositiu. En el cas dels FPGAs, la memòria volàtil també pot ser programada mitjançant el port JTAG, habitualment durant el procés de desenvolupament. A més a més, capacitats internes de monitoratge (temperatura, voltatge i corrent) poden ser accessibles mitjançant el port JTAG.
Els programadors JTAG també s'utilitzen per emmagatzemar software i dades a la memòria flash. Això es fa usualment utilitzant el bus de dades tal com ho faria una CPU, i de fet de vegades això ho fa realment una CPU, però en d'altres casos els mateixos xips de memòria tenen la seva pròpia interfície JTAG. Algunes arquitectures modernes de debug proveeixen un accés mestre intern i extern al bus, sense treure la possibilitat d'accés ni parar a la CPU.

## Boundary scan testing

La tecnologia boundary scan del JTAG permet l'accés a molts senyals lògics d'un circuit integrat complex, incloent els pins del dispositiu. Els senyals estan representats al boundary scan register (BSR) accessible a través del TAP. Això permet fer proves a part de controlar els estats dels senyals. Quan això es combina amb el built-in self-test (BIST), la cadena d'escaneig JTAG permet una solució encastada que consumeix pocs recursos i permet trobar certes errades estàtiques (curtcircuits, circuits oberts i errors de lògica). Normalment el mecanisme d'escaneig en cadena no ajuda a diagnosticar errades degudes al timing, temperatura o d'altres errors operacionals dinàmics que puguin succeir. Sovint es proveeixen casos d'ús en formats estandarditzats com el SVF, o el seu cosí germà binari XSVF, i s'utilitzen als tests de producció. L'habilitat per realitzar aquestes proves a plaques acabades és una habilitat essencial que permet incrementar el nombre d'errades que es poden detectar abans d'enviar els productes als clients.

## Extensions Comunes

Extensions de fabricants: Infineon, MIPS EJTAG Arxivat 2006-05-19 a Wayback Machine., Freescale COP, ARM ATM (Extended Trace Macrocell), onze etc.

## Aplicacions

* Gairebé qualsevol sistema encastat té un port JTAG.
* El connector del bus PCI posseeix pins JTAG.
* Existeix una targeta especial JTAG que es pot usar per a regrabar una BIOS danyada.

## Programari Client

La interfície JTAG és accessible per mitjà d'aplicacions de JTAG.

### Programari lliure

* Very cheap interface funciona amb el programa CICLaMaB
* OpenCores JTAG moduli Arxivat 2005-08-25 a Wayback Machine. és un core IP que proveeix de les capacitats JTAG i es pot integrar gratuïtament als dissenys propis. Forma part del projecte OpenCores.
* El projecte openwince de JTAG Tools dona suport a un gran conjunt de cables paral·lels IEEE 1284 (el projecte està inactiu des de l'any 2003, però el seu repositori CVS segueix actiu).
* JTAG-ARM9 és un programa pel processador ARM9 que dona accés al port JTAG.

### Programari propietari

* JTAG Technologies Test and programming development systems.
* TopJTAG Circuit visualization and debugging + boundary-scan (IEEE 1149.1 JTAG) technology.
* JTAG ScanWorks JTAG development systems.

## Referències

* ↑ Neal Stollon. On-Chip Instrumentation. Springer, 2011.
* ↑ Randy Johnson, Steward Christie (Intel Corporation, 2009), JTAG 101—IEEE 1149.x and Software Debug
* ↑ Copies of IEEE 1149.1-1990 Arxivat 2010-07-26 a Wayback Machine. or its 2001 update may be bought from the IEEE.
* ↑ «IEEE 1149.1-2001». Arxivat de l'original el 2013-04-15. [Consulta: 10 juny 2016].
* ↑ Select the right FPGA debug method Arxivat 2010-04-27 a Wayback Machine. presents one of the models for such tools.

## Vegeu també

* Placa de proves
* Connector Berg
* Connector IDC
* Interruptor DIP
* Jumper (informàtica)
* Cable cinta
* Breakout box
* Comandament JP1
* Cable pont

## Enllaços externs

* ingenieriaelectronica.org/
* JTAG FAQ
* A Brief Introduction to the JTAG Boundary Scan Interface