Co to jest JTAG?

30

Jestem całkiem nowy w systemach wbudowanych i ciągle używam tego terminu, ale nie do końca rozumiem, co to jest. Szybkie wyszukiwanie online daje stronę w Wikipedii: https://en.wikipedia.org/wiki/Joint_Test_Action_Group, która opisuje go jako swego rodzaju protokół do debugowania. Ale w innych kontekstach używa się go tak, jakby mógł programować pamięć układu jak programista. Co to jest?

UnTraDe
źródło
4
W tym pytaniu ukryto kilka przydatnych klejnotów .
David
2
Dałem dwelchowi +1. Dodatkowo, JTAG jest czasami źle używany jako czasownik, co ogólnie oznacza „debugowanie / testowanie”. Osoba „JTAG'ująca coś” może faktycznie używać innego protokołu, niż producent urządzenia nakłada się na fizyczne piny JTAG (tj. SWD). Możesz SWD lub JTAG, ale nie jedno i drugie. Jednak nikt nie SWD („macha”?) Swoim urządzeniem.
Jon
Tak, możesz programować za pomocą JTAG
Snoop

Odpowiedzi:

21

Jest podobny do USB, SPI, I2C i innych „magistral” i ma wiele popularnych zastosowań, nie ograniczając się do:

  • Jednym z nich jest w szczególności testowanie krzemu, zanim zainwestuje się zbyt wiele w każdą część, na przykład gdy chip nadal znajduje się na waflu, możesz sprawdzić większość części. Przyznać, że kostka wafla może uszkodzić, więc chcesz ponownie przetestować, ale może zrobisz to przed pakowaniem, a może później.

  • Możesz go użyć do skanowania granic na tablicach. Możesz wziąć tablicę na linię produkcyjną (zakładając, że tablica musi być odpowiednio zaprojektowana, a pewien procent chipów musi to obsługiwać), ale możesz wykonywać testy łączności przy niskiej prędkości, stymulować pin na jednym końcu śladu i skanować inny części, aby zobaczyć, że są lub nie są połączone zgodnie z projektem płyty.

  • Ponieważ układy mają już te dedykowane piny, dlaczego nie, w przypadku procesorów użyj tego samego interfejsu jako sposobu na rozmowę z debuggerem układów (OCD), zaprojektuj coś w procesorze i pozwól na rozmowę za pomocą jtag.

Jest to ogólny sposób pozwalający na wyodrębnienie elementów w łańcuchu, do którego chcesz wysłać serię bitów lub uzyskać serię bitów, w taki sposób, że każda rzecz, z którą chcesz porozmawiać, może być zaprojektowana dla różnych liczb bitów od małej liczby do dużej liczby. W przypadku debuggera możesz oczywiście zapisywać lub odczytywać coś w rejestrze o wielkości rejestru - na przykład rejestr 16-bitowy lub 32-bitowy. Ale w przypadku testów krzemu lub płytki Twój łańcuch skanowania może być dziesiątkami bitów. Każda indywidualna rzecz, którą poruszasz, może różnić się rozmiarem, jeśli chcesz, od innej rzeczy, co czyni tę bardzo uniwersalną magistralę ze stosunkowo małą liczbą pinów, która jest atrakcyjna dla tego rodzaju przypadków użycia.

Być może ze względu na popularność debugowania oprogramowania mają teraz jakieś dwa rozwiązania pinów, aby zaoszczędzić na liczbie pinów dla mikrokontrolerów i być może inni to przyjmą, a może nie.

old_timer
źródło
Czy są jakieś techniczne aspekty JTAG, które nadają się do tych zastosowań, czy tylko z przyczyn historycznych?
Owen
Przeczytaj artykuł w Wikipedii. Moim zdaniem, ponieważ już tam był i był podłączony do płyt i układów, a ponieważ był wystarczająco elastyczny, aby obsługiwać inne zastosowania, a przynajmniej niektóre miały już narzędzia, ktoś musiał powiedzieć, dlaczego nie użyć go do tych innych rzeczy. Myślę, że jego elastyczność w stosunku do liczby pinów czyni go bardzo atrakcyjnym. Istnieją i nadal istnieją inne rozwiązania dla debuggerów lub programowania obwodów, ale dzięki instrukcjom FTDI MPSSE i ogólnie sukcesowi FTDI ze wszystkim, co USB, niedrogie narzędzia jtag są teraz szeroko dostępne.
old_timer
10

JTAG był pierwotnie interfejsem używanym do testowania płytek drukowanych po montażu. Linie IO na chipach mogą być kontrolowane i odczytywane przez porty JTAG, umożliwiając wykonanie sekwencji testowej płytki. Później zaczął być również używany jako interfejs programowania i debugowania. Jaka funkcjonalność jest dostępna w JTAG, zależy od konkretnego układu scalonego, z którym masz do czynienia.

Jedną z zalet JTAG w porównaniu z większością innych interfejsów programistycznych jest to, że urządzenia mogą być połączone szeregowo. Tak więc jeden port JTAG może służyć do programowania / debugowania / testowania wielu urządzeń (choć radziłbym zaprojektować systemy tak, aby różne marki układów można było podzielić na różne łańcuchy, podczas gdy protokół JTAG niskiego poziomu jest dość znormalizowany, niestety potrzebne narzędzia do programowania / debugowania chipy nie są).

Peter Green
źródło
9

JTAG jest dość dziwnym terminem. Aby rozpocząć, termin może określać określone złącze i protokół, składający się z sygnału zegarowego (TCK), wyboru trybu (TMS) i danych wejścia / wyjścia (TDI / TDO). Obejmuje to sieć urządzeń, w której TDO każdego urządzenia jest połączone z TDI następnego urządzenia w tak zwanym łańcuchu skanowania. TMS służy do jednoczesnego przełączania wszystkich urządzeń w różne tryby .

Urządzenia w łańcuchu skanowania są zwykle połączone jako jeden duży rejestr przesuwny złożony z rejestrów w każdym indywidualnym urządzeniu. Gdy urządzenia znajdują się w stanie SHIFT_IR lub SHIFT_DR, łączą się z łańcuchem skanowania jeden z dwóch rejestrów tymczasowych: rejestr instrukcji i rejestr danych.

Po przesunięciu wartości tryb UPDATE_IR lub UPDATE_DR można aktywować, ustawiając odpowiednio TMS podczas przełączania TCK. W tym momencie wartość przesunięta do rejestru „zaczyna obowiązywać”. Na przykład, przeniesienie różnych sekwencji do IR FPGA i przejście do UPDATE_IR spowoduje, że FPGA wejdzie w różne tryby, takie jak konfiguracja, odczyt, normalne środowisko wykonawcze lub dostęp do konkretnych rejestrów użytkownika i prymitywów specyficznych dla JTAG utworzonych w projekcie.

Podobnie, stany przechwytywania mogą być użyte do „odczytania” wartości z urządzenia i umieszczenia jej w podczerwieni lub DR, aby zostać przesuniętym przez TDO i ostatecznie odczytanym przez programistę JTAG.

ζ--
źródło
4

JTAG definiuje protokół szeregowy i niektóre polecenia, aby umożliwić dostęp do rejestrów wewnętrznych w złożonych układach scalonych. Pozwala to testerowi na uzyskanie obserwowalności i kontroli w standardowy sposób przy użyciu kilku pinów.

Pierwotnym zastosowaniem było „skanowanie granic”, w którym wszystkie piny we / wy mogły być odczytywane i sterowane przez duży rejestr przesuwny, który okrąża układ. Szybko go jednak rozszerzono, dodając kolejne rejestry przesuwne, aby uzyskać dostęp do wewnętrznych elementów układu, w tym do pamięci.

Rzadko korzystasz z JTAG bit-bang, dostęp jest zwykle przez biblioteki, sterowniki, dostarczone przez producenta układu scalonego i używane przez system testowy i testowy adapter dostępu.

Neil_UK
źródło
Czy chip rzeczywiście musi obsługiwać JTAG zarówno sprzętowo, jak i programowo?
UnTraDe
@UnTraDe Nie, chip obsługuje JTAG zarówno sprzętowo, jak i programowo (np. FPGA może ujawniać pewne interfejsy między JTAG a projektem użytkownika), ale nie jest wymagane wsparcie oprogramowania na chipie. Narzędzia, których można by używać do interakcji z urządzeniami za pośrednictwem JTAG, miałyby zarówno wsparcie programowe, jak i sprzętowe (oprogramowanie na komputerze i sprzęt pod względem programisty JTAG podłączonego do tego komputera)
ζ--
3

Jest to, co JTAG oznacza „i jest to, co JTAG” to „. Jak inni wykazali JTAG „jest” standardowy interfejs magistrali przemysł wytwarzania badania, jak w J. oint T est DZIAŁANIA G rupy.

JTAG oznacza dla programisty oprogramowania wbudowanego interfejs debugowania SoC / mikroprocesora do zewnętrznego debugowania oprogramowania wbudowanego działającego na chipie. Prawie każdy procesor / SoC na rynku wykorzystuje interfejs JTAG nie tylko do testów produkcyjnych, ale także do obsługi debugowania oprogramowania. Interfejs JTAG znajdziesz na wszystkim, od procesorów klasy x86 serwerów do domowych routerów WiFi poniżej 50 USD. Dzięki właściwemu sprzętowi interfejsu i odpowiedniemu oprogramowaniu interfejsy te umożliwią odczyt / zapis pamięci, ustawianie punktów przerwania i kodowanie w jednym kroku.

Kluczem jest oczywiście uzyskanie odpowiedniego sprzętu i oprogramowania. Mimo że podstawowy interfejs JTAG jest znormalizowany, określone funkcje debugowania oprogramowania dostępne w urządzeniu mogą nie być dostępne. JTAG jest jak TCP / IP. Istnieje na środku stosu aplikacji. Potrzebujesz odpowiedniej warstwy fizycznej do komunikacji ze sprzętem (tj. Co masz na myśli mówiąc, że ta rzecz używa 10-Base-2?!?!?), A nad nią potrzebujesz odpowiedniego oprogramowania (co masz na myśli mówiąc, że potrzebuję Gopher klient?!?!?!). Jednak siła ekosystemu ARM doprowadziła tam pewien stopień standaryzacji (patrz OpenOCD).

Zapytałeś także o użycie JTAG do programowania flasha. Tak, niektóre oprogramowanie używa go również do tego celu. SoC może zapewnić funkcje JTAG do odczytu / zapisu z przestrzeni adresowej pamięci procesora, może zapewnić bezpośredni dostęp do kontrolerów flash, a przynajmniej JTAG zapewnia surowy dostęp niskiego poziomu do styków we / wy na krawędzi układu (było to pierwotny cel JTAG, aby umożliwić testowanie ciągłości połączeń między układami podczas testu produkcyjnego, tj. „skanowanie granic JTAG”). Każde z tych urządzeń może być wykorzystane przez sprytnych programistów do sterowania sygnałami niezbędnymi do przeprogramowania układu flash w przypadku przypadkowego „zablokowania” urządzenia.

Plemienny
źródło