# JTAG

JTAG, acronimo di Joint Test Action Group, è un consorzio di 200 imprese produttrici di circuiti integrati e circuiti stampati allo scopo di definire un protocollo standard per il test funzionale di questi dispositivi, che tendono ad essere sempre più complessi e difficili da controllare, fino a rendere impraticabili i tradizionali metodi manuali o automatici e ad aumentare in modo non competitivo il “Time to market”.
Consapevoli di queste esigenze, le grandi industrie hanno scelto una strada che permette un collaudo razionale della scheda su cui viene installato sacrificando in piccola parte le risorse disponibili nel circuito integrato. Oltre a questo vi è la possibilità di avere delle funzionalità aggiuntive (rivolgendo il controllo dai piedini verso l'interno del componente) quali la facile programmazione di memorie, microcontrollori e altri dispositivi programmabili con un'unica operazione, la possibilità di debug del firmware e la possibilità di attivare dei test automatici (detti BIST, Built-in self-test) inseriti stabilmente nei componenti elettronici per verificare la loro funzionalità in modo parziale o totale.

## Storia del JTAG

Questo consorzio è stato attivo tra il 1985 e il 1990 e ha dato vita a quello che poi è diventato lo standard IEEE 1149.1 (prima stesura nel 1990; titolo: IEEE Standard Test Access Port and Boundary-Scan Architecture; revisioni nel 1993 e 1994), noto colloquialmente come standard JTAG dal nome del consorzio promotore o anche Boundary Scan (esame della frontiera) inteso come esame dei pin accessibili di un circuito integrato.
Le principali aziende aderenti furono IBM, AT&T, Siemens, DEC, Nixdorf, Texas Instruments, Philips.
Nel 1990 la Intel produce il primo microprocessore con lo standard JTAG: l'80486. Nel 1994 venne definita lo standard del linguaggio di accesso ai vari componenti (chiamato Boundary scan description language) in modo che il programma che gestisce tutto il test e a cui vengono passate tutte le informazioni sullo schema elettrico della scheda possa accedere ai singoli dispositivi ed effettuare i test sulle connessioni e le eventuali programmazioni sui componenti che lo necessitano.

## I problemi di un collaudo efficiente delle schede elettroniche

Le schede elettroniche sono diventate sempre più complesse:
* Circuiti integrati sempre più piccoli e con numero di pin sempre maggiore e difficilmente accessibili.
* Circuiti stampati multistrato e quindi connessioni tra componenti montati sulle schede difficilmente raggiungibili.
I sistemi di collaudo si basano su vari metodi spesso usati contemporaneamente:
* esame “visivo” del corretto montaggio dei componenti e la bontà delle loro saldature, sia con personale addetto sia con sistemi automatizzati. Talvolta per la verifica delle saldature si usano immagini termografiche o esami ai raggi X.
* test funzionali di verifica che all'attivazione degli ingressi della scheda si abbia la risposta prevista in uscita dalla scheda o, per migliorare la qualità del test, applicazione di stimoli e rilievo di segnali in più punti della scheda (esami ICT in circuit test). Per collegarsi a questi punti se necessario si prevedono delle piccole piazzole. Vi si può accedere con bracci robotizzati o mediante un "letto di aghi" (bed of nail fixtures, letteralmente: dispositivo o impianto con letto di aghi) su cui la scheda da controllare viene fissata e collegata a un sistema computerizzato (detto Sistema di collaudo automatico o dall'inglese ATE (Automatic test equipment). Il metodo risulta sempre più difficile per la difficoltà di prevedere piazzole di test su schede sempre più piccole e con componenti miniaturizzati. I test con sensori mobili robotizzati rende il test piuttosto lento.

## Il JTAG

La soluzione proposta dal Joint Test Action Group è stata quella di prevedere per alcuni pin dei circuiti integrati la possibilità di bloccare il funzionamento normale degli stessi e di passare in un modo di funzionamento speciale che permetta di prendere il controllo di tutti i restanti pin dei circuiti integrati. Nella figura sono illustrati tre circuiti integrati (DEVICE 1, DEVICE 2 e DEVICE 3) e le loro connessioni di test JTAG che saranno accessibili su un connettore riservato al test. I tre circuiti integrati avranno numerosi altri pin, anche centinaia, variamente collegati:
* tra gli integrati in figura direttamente o con l'interposizione di altri circuiti integrati che non dispongono del JTAG
* verso altri componenti anche molto complessi e verso connettori della scheda
I segnali che permettono il test JTAG (indicati in figura) sono:
* TCK (Test Clock) Pin di clock dei dati
* TMS (Test Mode Select) Selezione del modo test
* TDI (Test Data In) Pin di ingresso dei dati della scheda elettronica. Questo segnale collega i tre circuiti integrati in catena: l'uscita TDO di DEVICE 1 si collega al TDI di DEVICE 2 e così via per uscire infine dalla scheda.
* TDO (Test Data Out) Pin di uscita dei dati
* TRST (Test Reset) opzionale. Segnale di reset del test, non indispensabile e non presente in figura.
I circuiti integrati sono controllati in modo seriale in catena (daisy chain), in quanto i segnali TDI e TDO trasferiscono i dati dall'ingresso della scheda, tra un circuito integrato e il successivo ed infine vengono letti sul pin TDO sull'uscita della scheda. La trasmissione seriale è sincrona (Serial Peripheral Interface) in quanto controllata da un segnale di clock (TCK) applicato contemporaneamente a tutti gli integrati JTAG. La frequenza del clock (TCK) viene determinata dal dispositivo più lento della catena (tipicamente è di 10-100 MHz, 100-10 ns per bit). Il segnale TMS segnala ai circuiti integrati di sospendere il loro normale funzionamento e di riconoscere il modo di funzionamento di test (JTAG). Per dettagli sulle temporizzazioni dei segnali si possono consultare i datasheet degli integrati che lo usano.

## Test della scheda mediante il JTAG

Entrati in modo test JTAG si può accedere ad ogni pin dei circuiti integrati della catena e metterli in modo uscita (alto o basso) o in modo ingresso. Le connessioni non visualizzate in figura tra DEVICE 1 e DEVICE 2, che potrebbero ad esempio essere un microprocessore e un altro dispositivo (CPLD, FPGA, ecc.) possono essere controllate per quanto riguarda sia le interruzioni sia eventuali cortocircuiti. Se tra i due dispositivi sono presenti componenti non JTAG (detti in gergo cluster) il test può essere possibile, ad esempio se si tratta di resistori collegati in serie o di un semplice buffer digitale, oppure possono essere possibili solo verifiche parziali della funzionalità. I software di gestione delle funzioni JTAG permettono di definire una "copertura", in genere espressa in percentuale, che definisce quanto di un componente può essere testato e quanto il risultato del test è affidabile. Anche su schede semplici, dove è presente un solo componente, con JTAG il test può essere possibile e conveniente in concomitanza con i tradizionali sistemi. Difficilmente le schede complesse sono costituite interamente da circuiti digitali testabili mediante boundary scan, dato che quasi sempre ci sono anche componenti e parti interamente analogiche e quindi spesso è utile considerare un approccio integrato di test funzionale e boundary scan.

## Altre funzioni possibili con il JTAG

* Fornisce la possibilità di testare un intero sistema collegando tra loro le singole schede mediante il connettore JTAG.
* Costituisce una porta di accesso riservata con cui si possono attivare varie funzioni sviluppate dai costruttori del componente.
* Permette di programmare i singoli dispositivi: firmware dei microcontrollori, dati nelle memorie flash o EEPROM.
* Nei microcontrollori consente il debugging del firmware in circuit mediante dispositivi e software opportuni forniti dal costruttore o comunque disponibili da Third Party Support consigliati dal costruttore o disponibili senza una sua espressa omologazione.