JTAG 란 무엇입니까?


30

저는 임베디드 시스템에 익숙하지 않아서이 용어가 항상 사용되는 것을 계속보고 있지만 그것이 무엇인지 이해할 수는 없습니다. 빠른 온라인 검색은이 Wikipedia 페이지 ( https://en.wikipedia.org/wiki/Joint_Test_Action_Group) 를 생성 하여 디버깅을위한 일종의 프로토콜로 설명합니다. 그러나 다른 상황에서는 프로그래머처럼 칩의 메모리를 프로그래밍 할 수있는 것처럼 사용되었습니다. 무엇입니까?


4
이 질문 에는 유용한 보석이 숨겨져 있습니다.
David

2
나는 dwelch에게 +1을 주었다. 또한 JTAG는 일반적으로 "디버그 / 테스트"라는 동사의 의미로 잘못 사용되기도합니다. "JTAG '무언가"사용자는 실제로 장치 제조업체가 물리적 JTAG 핀 (예 : SWD)과 겹친 다른 프로토콜을 사용하고있을 수 있습니다. SWD 또는 JTAG를 사용할 수 있지만 둘 다 할 수는 없습니다. 그러나 SWD ( "swoods"?)는 누구의 기기도 아닙니다.
Jon

예, JTAG로 프로그래밍 가능
Snoop

답변:


21

USB, SPI, I2C 및 기타 "버스"와 유사하며 다음과 같은 여러 용도로 널리 사용됩니다.

  • 하나는 특히 각 부품에 너무 많은 투자를하기 전에 실리콘을 테스트하는 것입니다. 예를 들어 칩이 웨이퍼에있는 동안 대부분의 부품을 확인할 수 있습니다. 웨이퍼를 다이 싱하면 손상을 입을 수 있으므로 다시 테스트하고 싶을 수도 있지만 포장하기 전이나 후에 할 수도 있습니다.

  • 이를 사용하여 보드에서 경계 스캔을 수행 할 수 있습니다. 생산 라인에서 보드를 가져갈 수 있습니다 (보드가 올바르게 설계되고 칩의 일부가 이것을 지원해야 함). 저속 연결 테스트를 수행하고 트레이스의 한쪽 끝에 핀을 자극하고 다른 것을 스캔 할 수 있습니다 보드 디자인에 따라 연결되어 있는지 확인하십시오.

  • 칩에는 이미 이러한 전용 핀이 있으므로 프로세서의 경우 온 칩 디버거 (OCD)와 통신하는 방법과 동일한 인터페이스를 사용하여 프로세서에 무언가를 설계하고 jtag를 통해 통신 할 수 있습니다.

그것은 당신이 말하고 싶은 각각의 물건이 다양한 숫자를 위해 설계 될 수있는 방식으로 일련의 비트를 보내거나 일련의 비트를 얻으려는 체인에서 물건을 분리 할 수있게하는 일반적인 방법입니다 작은 수에서 큰 수의 비트. 디버거의 경우 칩의 레지스터 크기의 항목 (16 비트 레지스터 또는 32 비트)에서 자연스럽게 쓰거나 읽습니다. 그러나 실리콘 또는 보드 테스트의 경우 스캔 체인이 수십 비트 일 수 있습니다. 원하는 개별 주소의 크기는 원하는 경우 크기가 다를 수 있으며, 이러한 유형의 사용 사례에 적합한 핀 수가 비교적 적은 매우 다양한 버스입니다.

아마도 소프트웨어 디버깅의 인기로 인해 이제 마이크로 컨트롤러의 핀 수를 절약 할 수있는 두 가지 핀 솔루션이있을 수 있으며 다른 사람들은 그렇지 않을 수도 있습니다.


이러한 용도에 적합한 JTAG의 기술적 측면이 있습니까? 아니면 단지 역사적인 이유일까요?
Owen

wikipedia 기사를 읽으십시오. 내 의견은 그것이 이미 보드와 칩에 연결되어 있고 다른 용도를 지원할 수있을만큼 유연하고 최소한 일부 도구가 이미 준비되어 있기 때문에 누군가가 왜 이러한 도구를 다른 용도로 사용하지 말아야하는지에 대해 말해야한다는 것입니다. 유연성 대 핀 수는 매우 매력적이라고 ​​생각합니다. 디버거 나 회로 프로그래밍을위한 다른 솔루션이 계속 존재하지만 FTDI MPSSE 명령어와 FTDI의 USB 덕분에 일반적으로 저렴한 jtag 툴이 널리 보급되어 있습니다.
old_timer

10

JTAG는 원래 조립 후 PCB 테스트에 사용되는 인터페이스였습니다. JTAG 포트를 통해 칩의 IO 라인을 제어하고 판독하여 보드 테스트 시퀀스를 수행 할 수 있습니다. 나중에 프로그래밍 및 디버그 인터페이스로 사용되기 시작했습니다. JTAG에서 사용 가능한 기능은 처리중인 특정 IC에 따라 다릅니다.

대부분의 다른 프로그래밍 인터페이스에 비해 JTAG의 장점 중 하나는 장치를 데이지 체인 방식으로 연결할 수 있다는 것입니다. 따라서 하나의 JTAG 포트로 여러 장치를 프로그래밍 / 디버그 / 테스트 할 수 있습니다 (시스템별로 다른 칩 브랜드를 다른 체인으로 분리 할 수 ​​있도록 권장하지만, 저수준 JTAG 프로토콜은 불행히도 필요한 도구로 표준화되어 있습니다) 칩을 프로그래밍 / 디버그하기 위해).


9

JTAG는 다소 이상한 용어입니다. 시작하기 위해이 용어는 클럭 신호 (TCK), 모드 선택 (TMS) 및 데이터 입력 / 출력 (TDI / TDO)으로 구성된 특정 커넥터 및 프로토콜을 지정할 수 있습니다. 여기에는 각 장치의 TDO가 소위 스캔 체인에서 다음 장치의 TDI에 연결된 장치 네트워크가 포함됩니다. TMS는 모든 장치를 동시에 다양한 모드 로 전환하는 데 사용됩니다 .

스캔 체인의 장치는 일반적으로 각 개별 장치의 레지스터로 구성된 하나의 큰 시프트 레지스터로 연결됩니다. 장치가 SHIFT_IR 또는 SHIFT_DR 상태에 있으면 두 개의 임시 레지스터 중 하나 인 명령 레지스터와 데이터 레지스터 중 하나가 스캔 체인에 연결됩니다.

값이 이동되면 TCK를 전환하면서 TMS를 ​​적절히 설정하여 UPDATE_IR 또는 UPDATE_DR 모드를 활성화 할 수 있습니다. 이 시점에서 값은 레지스터 "효과 적용"으로 이동되었습니다. 예를 들어, 다양한 시퀀스를 FPGA의 IR로 이동하고 UPDATE_IR로 전환하면 FPGA는 구성, 리드 백, 일반 런타임 또는 특정 사용자 레지스터 액세스 및 디자인에서 인스턴스화 된 JTAG 특정 프리미티브와 같은 다양한 모드로 들어가게됩니다.

마찬가지로 캡처 상태를 사용하여 장치에서 값을 "읽고"IR 또는 DR에 넣어 TDO를 통해 이동하여 궁극적으로 JTAG 프로그래머가 읽을 수 있습니다.


4

JTAG는 복잡한 IC 내의 내부 레지스터에 액세스 할 수 있도록 직렬 프로토콜 및 일부 명령을 정의합니다. 이를 통해 테스터는 관찰제어 가능성 을 얻을 수 있습니다 몇 개의 핀을 사용하여 표준 방식으로 있습니다.

원래는 '경계 스캔 (boundary scan)'에 사용되었으며, 모든 I / O 핀은 칩을 둘러싸는 큰 시프트 레지스터에 의해 읽고 구동 될 수있었습니다. 그러나 메모리를 포함하여 칩 내부에 액세스하기 위해 시프트 레지스터를 추가하는 기능이 빠르게 향상되었습니다.

JTAG를 거의 사용하지 않는 경우가 많으며 일반적으로 IC 제조업체에서 제공하는 라이브러리, 일명 드라이버를 통해 액세스하며 테스트 시스템 및 테스트 액세스 어댑터에서 사용합니다.


칩은 실제로 하드웨어와 소프트웨어 모두에서 JTAG를 지원해야합니까?
UnTraDe

@UnTraDe 아니요,이 칩은 하드웨어에서 JTAG를 지원하고 소프트웨어에서 (예 : FPGA가 JTAG와 사용자 디자인간에 일부 인터페이스를 노출 할 수 있음) 지원할 수 있지만 칩에서 소프트웨어를 지원할 필요는 없습니다. JTAG를 통해 장치와 상호 작용하는 데 사용하는 도구에는 소프트웨어 및 하드웨어 지원 (컴퓨터의 소프트웨어 및 해당 컴퓨터에 연결된 JTAG 프로그래머의 관점에서 하드웨어)이 모두 있습니다.
ζ--

3

JTAG '의미'가 있고 JTAG '의 의미'가 있습니다. 다른 JTAG 지적한 바와 같이, 시험 제조 산업 표준 버스 인터페이스 '는' J OINT T EST ction G의 roup한다.

임베디드 소프트웨어 개발자에게 JTAG가 의미하는 것은 칩에서 실행되는 임베디드 소프트웨어의 외부 디버그를위한 SoC / 마이크로 프로세서의 디버그 인터페이스입니다. 시장에 나와있는 거의 모든 CPU / SoC는 제조 테스트뿐만 아니라 소프트웨어 디버그 지원에도 JTAG 인터페이스를 사용합니다. 서버 클래스 x86 CPU에서 $ 50 미만의 가정용 WiFi 라우터에 이르기까지 모든 항목에서 JTAG 인터페이스를 찾을 수 있습니다. 올바른 인터페이스 하드웨어 및 올바른 소프트웨어를 사용하면 이러한 인터페이스를 통해 메모리를 읽고 쓸 수 있고 중단 점을 설정하고 단일 단계 코드를 작성할 수 있습니다.

물론 핵심은 올바른 하드웨어와 소프트웨어를 얻는 것입니다. 기본 JTAG 인터페이스는 표준화되어 있지만 장치에서 사용 가능한 특정 소프트웨어 디버그 기능은 그렇지 않을 수 있습니다. JTAG는 TCP / IP와 같습니다. 응용 프로그램 스택의 중간에 존재합니다. 장비와 통신하려면 올바른 물리 계층이 필요합니다 (즉,이 장치가 10-Base-2를 사용한다는 것은 무엇입니까?!?! ??). 그 위에 올바른 응용 프로그램 소프트웨어가 필요합니다 (고퍼가 필요하다는 것을 의미합니까? 고객?!?!?!). 그러나 ARM 에코 시스템의 강점은 어느 정도의 표준화를 이끌었습니다 (OpenOCD 참조).

JTAG를 사용하여 플래시를 프로그래밍하는 방법에 대해서도 질문했습니다. 예, 일부 소프트웨어는 해당 용도로도 사용합니다. SoC는 CPU 메모리 주소 공간에서 읽기 / 쓰기를위한 JTAG 기능을 제공하고, 플래시 컨트롤러에 직접 액세스 할 수 있으며, 최소한 JTAG는 칩 가장자리의 I / O 핀에 로우 레벨의 원시 액세스를 제공합니다. 제조 테스트 중 칩 간 상호 연결의 연속성 테스트를 가능하게하는 JTAG의 원래 목적, 즉 'JTAG 경계 스캔'). 이러한 기능은 영리한 프로그래머가 장치가 실수로 '브레이크'된 경우 플래시 칩을 다시 프로그래밍하는 데 필요한 신호를 구동하는 데 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.