**JTAG** on Ühendatud Testimisrühma (ingl **J**oint **T**est **A**ction **G**roup) 1990. aastal loodud Elektri- ja Elektroonikainseneride Instituudi standard.

Algselt oli see **IEEE 1149.1**, hiljem on seda uuendatud ja laiendatud täiendavate standarditega. JTAG-i kasutatakse, et integraalskeeme pärast trükkplaadile paigaldamist piirskaneerimisega testida. Tänu täiendatavatele standarditele on võimalik JTAG-iga ka programmeeritavaid loogikaseadmeid konfigureerida.

Ajalugu
-------

1980-ndatel loodi Ühendatud Testimisrühm, mis hakkas välja arendama piirskaneerimise ja testimise juurdepääsu pordi detailset kirjeldust. See avaldati 1990. aastal IEEE 1149.1–1990 standardina. 1993. aastal uuendati standardit ja avaldati 1149.1a. Sellega täiustati, selgitati ja parandati originaali. 1994. aastal anti välja 1149.1b, mis lisas piirskaneerimise kirjeldamise keele BSDL. Tänu nendele muudatustele sai JTAG elektroonikatootjate seas populaarseks. Aastate jooksul omandatud teadmised tehti ametlikuks 2001. aastal, kui avaldati IEEE 1149.1–2001. 2013. aastal laiendati taas kord JTAG-i standardit, kui anti välja IEEE 1149.1–2013. 

Kuna JTAG on laialdaselt kasutusel ja võimaldab palju, on selle baasil on välja antud ka teisi standardeid. 

* 1995. aastal avaldati IEEE 1149.5-1995, mis määratles katsetamise ja hoolduse siini standardi.
* 1999. aastal avaldati IEEE 1149.4-1999 standard, mis määratles JTAG-i vahendid segasignaalidega (*mixed-signal*) integraalskeemidele.
* 2002. aastal anti välja IEEE 1532-2002 standard, mis võimaldab programmeeritavaid loogikaseadmeid konfigureerida.
* 2003. aastal avaldati IEEE 1149.6-2003 standard, mis laiendas JTAG-i standardit vahelduvvoolusidestusskeemidele (*AC-coupled*).
* 2009. aastal avaldati IEEE 1149.7-2009 standard, millega lisati JTAG-i kasutamise võimalus vähemate viikude arvuga.
* 2011. aastal arendati välja kiirete mälude testimiseks IEEE 1581, mida kasutatakse ka teatud DDR4 SDRAM-i mälude juures.
* 2012. aastal avaldati IEEE 1149.8.1-2012.

Tehnoloogia
-----------

JTAG-i kasutamiseks peab selle liides olema integraalskeemile sisse ehitatud. Algne standard kasutab nelja viiku, kuid IEEE 1149.7 standard on esialgse standardi laiendus, mis vajab ainult kahte viiku. 

### JTAG (IEEE 1149.1)

JTAG kasutab oma tööks testimise juurdepääsu porti, selle kontrollerit, piirskaneerimise elemente ja eri registreid:

* Piirskaneerimise register suhtleb piirskaneerimise elementidega ja on peamine andmete register.
* Möödapääsu register on ühebitiline register, mis suunab siseneva signaali välja ahelas järgmistele seadmetele.
* IDCODES register hoiab seadme identifitseerivat koodi ja versiooni numbrit. Need andmed võimaldavad seadet ühendada selle BDSL-i failiga.

JTAG register JTAG register
#### Testimise juurdepääsu port (TAP)

JTAG kasutab tööks neljatraadilist kommunikatsiooniprotokolli. Neid nelja signaali kutsutakse kokkuvõtvalt testimise juurdepääsu pordiks:

* **TCK** (*Test Clock*) – taktsignaal olekumasinate sünkroonimiseks.
* **TMS** (*Test Mode Select*) – signaal oleku määramiseks. Signaali loetakse TCK tõusmisel.
* **TDI** (*Test Data In*) – jadaühendus andmete saatmiseks test- või olekuloogikasse. Signaali loetakse TCK tõusmisel.
* **TDO** (*Test Data Out*) – jadaühendus andmete saamiseks test- või olekuloogikast. Signaal on õige TCK langemisel.
* **TRST** (*Test Reset*) – valikuline (pole pildil kuvatud). Taastab vaikimisi oleku.

JTAG seadmeid on võimalik ühendada üksikult või pärgühendusena, kus ühe seadme TDO signaal on ühendatud järgmise TDI signaaliga. TCK-, TMS- ja valikuline TRST-signaal on ühendatud rööbiti. Ühel trükkplaadil võib olla mitu JTAG-i pistikut, mille järel on üks või mitu seadet. JTAG-i taktsignaal TCK on vahemikus 10 MHz kuni 30 MHz.

JTAG pärgühendusJTAG pärgühendus
Testimise juurdepääsu pordi kontroller on 16-olekuline lõplik olekumasin, mis reageerib TMS-signaalile ja juhib kogu JTAG-i tööd. Olekumuutus toimub ainult tõusva TCK signaali korral. Pildil olev vasakpoolne olekute tulp juhib andmete registrit (DR) ja parempoolne olekute tulp juhib käskude registrit (IR).

 JTAG-i TAP-i kontrolleri olekudiagramm. Numbrid pildil kujutavad TMS-i signaali sisenevat väärtust
Täiendav info.

#### Piirskaneerimine (*Boundry scan*)

Nagu nimigi ütleb, paikneb piirskaneerimise element seadme piiril tema sisemise loogika ja välisega ühendava viigu vahel. Kuna piirskaneerimine on JTAG-i üks peamiseid osi, nimetatakse JTAG-i testimist ka piirskaneerimiseks.
Piirskaneerimise elemendid saavad olla kahes olekus. Töötavas olekus ei mõjuta elemendid seadme tööd. Testimise olekus aga ühendab element seadme sisemise loogika viikudest lahti, mis võimaldab muuta viikude väärtusi ülejäänud loogikast sõltumatult. See võimaldab testida ülejäänud trükkplaadi tööd. Kuna piirskaneerimise element ühendab seadme sisemise loogika viikudest lahti, teeb see testimise lihtsamaks, sest integraalskeemid ei vaja selleks tarkvara. On kaks peamist piirskaneerimise kasutamise viisi. Üks viis on JTAG-i kasutamine teiste seadmetega suhtlemiseks ja teine on JTAG-i ühenduse test. Kuna JTAG annab võimaluse kontrollida ja jälgida seadme kõiki signaale ainult nelja viiguga, vähendab see oluliselt testimiseks vajalikku füüsilist ligipääsu.
JTAG defineerib käsud, mis peavad olema kasutatavad, et seade vastaks standardile. Käsud on järgmised:

* **BYPASS** – suunab TDI ja TDO signaalid läbi seadme möödapääsu registri järgmistele ahelas olevale seadmele.
* **EXTEST** – ühendab TDI ja TDO signaalid piirskaneerimise registriga. Sõltuvalt testimise juurdepääsu pordi kontrolleri olekust, kas loetakse seadme viikude väärtust või määratakse nende väärtus.
* **SAMPLE/RELOAD** – ühendab TDI ja TDO signaalid piirskaneerimise registriga. Seade on aga töötavas olekus. Selle käsu ajal on võimalik lugeda seadme töö ajal viikude väärtust. Seda käsku kasutatakse ka enne EXTEST-i käsku seadmesse andmete saatmiseks.

Teised tihti kasutatavad käsud:

* **IDCODE** – ühendab TDI ja TDO signaalid IDCODE registriga.
* **INTEST** – ühendab TDI ja TDO signaalid piirskaneerimise registriga. Töötab sarnaselt EXTEST-i käsuga, aga hoopis loeb või määrab sisemise loogika signaale.

#### JTAG-i ühenduse test

 JTAG-i ühenduse test BGA-l
JTAG-i ühenduse test kontrollib integraalskeemide komponentide vahelist ühendust. Näiteks võivad tootmise käigus tekkida komponentide vahel lühised või puudub üldse ühendus. Standardne ühenduse test saab kontrollida ainult JTAG-i seadmete vahelisi ühendusi. Kui aga on teada viigu küljes olevad seadmed ja muud komponendid, siis on võimalik ka täiendav kontroll. Näiteks saab kontrollida loogilisi ühendusi, *pull-up*- ja *pull-down*-takistite olemasolu ning lühiseid. Ühenduse testi kasutatakse näiteks BGA integraalskeemide juures, kuna siis on visuaalne ülevaatus raskendatud ja ainuke alternatiiv on röntgenülevaatus, mis on aga kallim ja aeganõudvam.

### Kompaktne JTAG (IEEE 1149.7)

Signaalid:

* **TCK** (*Test Clock*) – signaal olekumasinate sünkroonimiseks.
* **TMSC** (*Test Serial data*) – jadaühendus andmevahetuseks. Ühendab tavalisest JTAG-i liidesest TMS-i, TDI ja TDO viigud.

Kuna integraalskeemid muutusid aina väiksemaks, oli vaja vähendada JTAG-i kasutatavat ruumi. 2009. aastal avaldati standard IEEE 1149.7, mis vähendas senist viikude arvu neljalt (või viielt) kahele. Uus standard on tagasiühilduv algse JTAG-iga ja lisab sellele võimalusi. Kompaktne JTAG või cJTAG (*compact JTAG*) võimaldab ühendada eri seadmed omavahel tähtvõrguks, mis lihtsustab nendevahelisi füüsilisi ühendusi. Lisaks ei pea enam testimise ajal kõik seadmed olema samas energiaolekus, vaid on võimalik valida nelja oleku vahel.

cJTAG tähtühenduscJTAG tähtühendus
### PLD programmeerimine (IEEE 1532)

JTAG-i kasutatakse tihti ka peamise viisina programmeeritavate loogikaseadmete konfigureerimiseks. Välkmälude puhul kontrollitakse piirskaneerimise abil tema küljes olevat JTAG-i ühilduvat seadet. See võimaldab kirjutada ja kustutada välkmälu. Lisaks on võimalik standardit toetavaid FPGA-sid ka JTAG-i pordi abil ka otse programmeerida.

Ohud
----

Kuna üldjuhul jäävad JTAG-i pistikud valmis trükkplaadile alles pärast tootmist, saab vahel mõnd seadme programmi hiljem muuta.

### Microsoft Xbox 360

XBox 360 Pro
Microsofti mängukonsool Xbox 360 lasti alguses välja võimalusega muuta tema tarkvara JTAG-i abil. See võimaldas ilma plaadita otse USB-seadmest või sisemiselt kõvakettalt mänge mängida. Lisaks võimaldas see käivitada eri emulaatoreid. Alates 2009. aastast toodetud konsoolidel seda võimalust enam pole.

Viited
------

1. 1 2 3  "What is JTAG?". *Corelis* (inglise keeles). Vaadatud 22.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
2. ↑  "1149.5-1995 – IEEE Standard for Module Test and Maintenance Bus (MTM-Bus) Protocol". *IEEE* (inglise keeles). Originaali arhiivikoopia seisuga 5.09.2016. Vaadatud 22.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
3. ↑  "1149.4-1999 – IEEE Standard for a Mixed-Signal Test Bus". *IEEE* (inglise keeles). Originaali arhiivikoopia seisuga 12.11.2016. Vaadatud 22.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
4. ↑  "1532–2002 – IEEE Standard for In-System Configuration of Programmable Devices". *IEEE* (inglise keeles). Vaadatud 22.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
5. ↑  "1149.6-2003 – IEEE Standard for Boundary-Scan Testing of Advanced Digital Networks". *IEEE* (inglise keeles). Originaali arhiivikoopia seisuga 12.11.2016. Vaadatud 22.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
6. ↑  "1149.7-2009 – IEEE Standard for Reduced-Pin and Enhanced-Functionality Test Access Port and Boundary-Scan Architecture". *IEEE* (inglise keeles). Originaali arhiivikoopia seisuga 12.11.2016. Vaadatud 22.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
7. ↑  "1149.8.1–2012 – IEEE Standard for Boundary-Scan-Based Stimulus of Interconnections to Passive and/or Active Components". *IEEE* (inglise keeles). Vaadatud 28.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
8. 1 2  "What is JTAG and how can I make use of it?" (inglise keeles). XJTAG. Vaadatud 27.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
9. 1 2 3  "Technical Guide to JTAG" (inglise keeles). XJTAG. Vaadatud 23.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
10. ↑  "Design for Test (DFT) Guidelines" (inglise keeles). XJTAG. Vaadatud 27.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
11. ↑  "JTAG – General description of the TAP Controller states" (inglise keeles). Xilinx. 07.03.2007. Vaadatud 25.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
12. ↑  "JTAG Connection Testing". *XJTAG* (inglise keeles). Vaadatud 25.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
13. ↑  "Major Benefits of IEEE 1149.7" (inglise keeles). Corelis. Originaali arhiivikoopia seisuga 30.11.2016. Vaadatud 23.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
14. ↑  "JTAG Test Overview" (inglise keeles). Corelis. Vaadatud 25.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)
15. ↑  "What a Jtag is and if your Xbox is Jtagable". *The Tech Game* (inglise keeles). 26.07.2011. Vaadatud 22.10.2016.`{{netiviide}}`: CS1 hooldus: tundmatu keel (link)