JTAG
JTAGJTAG(Joint Test Action Group을 코드화한 공동 테스트 액션 그룹의 이름을 따서 명명)는 제조 후 설계를 검증하고 회로 기판을 테스트하기 위한 업계 표준입니다.
JTAG는 전자설계자동화(EDA)에 온칩 인스트루먼테이션 표준을 디지털 [1]시뮬레이션의 보완 도구로서 실장하고 있습니다.시스템 주소 및 데이터 버스에 대한 직접 외부 액세스를 필요로 하지 않고 저오버헤드액세스를 위한 시리얼 통신 인터페이스를 실장하는 전용 디버깅포트의 사용을 지정합니다.인터페이스는 칩 로직 레벨과 다양한 부품의 디바이스 기능을 제공하는 테스트 레지스터 세트에 액세스하기 위한 스테이트 풀 프로토콜을 구현하는 온칩 테스트 액세스 포트(TAP)에 연결됩니다.
1985년 제조 후 설계를 검증하고 프린트 기판을 테스트하는 방법을 개발하기 위해 합동 테스트 행동 그룹이 결성되었습니다.1990년 전기전자공학협회는 IEEE 표준 1149.1-1990의 노력 결과를 표준 테스트 액세스 포트와 경계 스캔 아키텍처로 성문화했다.
JTAG 표준은 벤더 고유의 [2]기능을 제공하기 위해 많은 반도체 칩 제조업체에 의해 확장되었습니다.
역사
1980년대에는 볼 그리드 어레이 및 이와 유사한 실장 기술을 사용하는 다층 회로 기판과 집적회로(IC)가 표준이 되어 탐침에 사용할 수 없는 IC 간 연결이 이루어졌습니다.회로 기판의 제조 및 필드 결함의 대부분은 기판의 납땜 조인트 불량, 기판 연결부 결함 또는 IC 패드에서 핀 리드 프레임까지의 본드와 본드 와이어가 원인입니다.JTAG(Joint Test Action Group)는 IC 패드에서 다른 패드로 핀아웃 뷰를 제공하여 이러한 고장을 발견하기 위해 1985년에 결성되었습니다.
산업 표준은 수년간의 초기 사용 후 1990년에 IEEE 규격 1149.1-1990으로[3] IEEE 표준이 되었다.같은 해, 인텔은 JTAG(80486)를 탑재한 최초의 프로세서를 발매했습니다.이로 인해, 모든 메이커의 업계에서의 도입이 고속화되었습니다.1994년에는 BSDL(Boundary Scan Description Language)에 대한 설명이 포함된 부록이 추가되었습니다.EXTEST에 All-zero를 사용하는 것에 관한 추가 개선사항, PRELOAD에서 SAMPLE 사용을 분리하여 OVERATE_ONLY 셀을 위한 더 나은 구현이 [4]2001년에 이루어졌고 발표되었습니다.1990년 이후, 이 표준은 전 세계 전자 회사들에 의해 채택되어 왔습니다.경계 스캔은 현재 JTAG와 거의 동일하지만 JTAG는 이러한 제조 어플리케이션 이외의 중요한 용도를 가지고 있습니다.
디버깅
JTAG의 초기 어플리케이션에서는 보드 레벨의 테스트를 대상으로 하고 있습니다만, 여기서 JTAG 표준은 디바이스, 보드 및 시스템 테스트, 진단 및 장애 분리에 도움이 되도록 설계되어 있습니다.현재 JTAG는 집적회선의 서브블록에 액세스하는 주요 수단으로 사용되며 다른 디버깅 대응 통신 [citation needed]채널이 없는 임베디드 시스템을 디버깅하기 위한 필수 메커니즘입니다.대부분의 시스템에서 JTAG 기반의 디버깅은 CPU 리셋 후 첫 번째 명령부터 사용할 수 있기 때문에 셋업 전에 실행되는 조기 부트소프트웨어 개발에 도움이 됩니다.인서킷 에뮬레이터(또는 「JTAG 어댑터」)는, 타겟 CPU내의 온칩 디버깅 모듈에 액세스 하기 위한 전송 메카니즘으로서 JTAG 를 사용합니다.이러한 모듈을 통해 소프트웨어 개발자는 필요할 때 기계 명령 수준에서 직접 임베디드 시스템의 소프트웨어를 디버깅할 수 있습니다.또한 (더 일반적으로) 고급 언어 소스 코드로도 디버깅할 수 있습니다.
시스템 소프트웨어의 디버깅서포트는 많은 소프트웨어 개발자가 JTAG에 관심을 갖는 주된 이유입니다.PowerPC, MIPS, ARM, x86 등의 많은 실리콘 아키텍처는 기본적인 JTAG 프로토콜을 중심으로 소프트웨어 디버깅, 명령 트레이스 및 데이터 트레이스 인프라스트럭처 전체를 구축했습니다.그러나 대부분의 경우 개별 실리콘 벤더는 이러한 확장 기능의 일부만 구현합니다.예를 들어 ARM CoreSight 및 Nexus 및 인텔의 BTS(Branch Trace Storage), LBR(Last Branch Record), IPT(Intel Processor Trace) 구현 등이 있습니다.이러한 실리콘 벤더 고유의 확장은, NDA 이외에는 문서화되어 있지 않은 경우가 있습니다.JTAG 표준 채택으로 JTAG 중심의 디버깅 환경이 초기 프로세서 고유의 설계에서 벗어날 수 있게 되었습니다.프로세서는 보통 정지, 싱글스텝 또는 자유롭게 동작할 수 있습니다.RAM 내의 코드(종종 특수한 머신명령 사용)와 ROM/플래시 내의 코드에 대해 코드 브레이크 포인트를 설정할 수 있습니다.RAM으로의 벌크 데이터 다운로드와 마찬가지로 데이터 중단점을 사용할 수 있는 경우가 많습니다.대부분의 설계에는 "halt mode debugging"이 있지만 일부 설계에서는 디버깅되는 코어를 정지할 필요 없이 디버거가 레지스터와 데이터 버스에 액세스할 수 있습니다.일부 툴체인은 ARM Embedded Trace Macrocell(ETM; 임베디드 트레이스 매크로 셀) 모듈 또는 다른 아키텍처의 동등한 구현을 사용하여 복잡한 하드웨어 이벤트에서 디버거(또는 트레이스) 액티비티를 트리거할 수 있습니다.예를 들어 특정 서브루틴에서 레지스터에 대한 첫 7개의 액세스를 무시하도록 프로그램된 로직아나라이저입니다.
FPGA 개발자도 JTAG를 사용하여 디버깅툴을 [5]개발할 수 있습니다.CPU 내부에서 동작하는 소프트웨어의 디버깅에 사용되는 것과 같은 JTAG 기술을 사용하면 FPGA 내의 다른 디지털 설계 블록을 디버깅할 수 있습니다.예를 들어 커스텀 JTAG 명령어를 제공하여 FPGA 내의 임의의 신호 세트에서 작성된 레지스터를 읽을 수 있도록 하고 경계 스캔 동작에 보이지 않는 동작을 가시화할 수 있습니다.마찬가지로, 이러한 레지스터를 작성하는 것은 다른 방법으로는 이용할 수 없는 제어성을 제공할 수 있습니다.
펌웨어 저장
JTAG를 통해 디바이스 프로그래머 하드웨어는 데이터를 내부 비휘발성 디바이스 메모리(CPLD 등)로 전송할 수 있습니다.일부 디바이스 프로그래머는 디바이스의 디버깅과 프로그래밍에 이중의 목적을 가지고 있습니다.FPGA의 경우 보통 개발 작업 중에 휘발성 메모리 장치를 JTAG 포트를 통해 프로그래밍할 수도 있습니다.또한 내부 모니터링 기능(온도, 전압 및 전류)은 JTAG 포트를 통해 액세스할 수 있습니다.
JTAG 프로그래머는 플래시 메모리에 소프트웨어와 데이터를 쓰는 데도 사용됩니다.이는 보통 CPU가 사용하는 것과 동일한 데이터 버스액세스를 사용하여 이루어지며 CPU에 의해 처리되는 경우도 있습니다.그 외의 경우는, 메모리 칩 자체에 JTAG 인터페이스가 있습니다.일부 최신 디버깅아키텍처에서는 CPU를 정지하거나 인계할 필요 없이 내부 및 외부 버스마스터 액세스를 제공합니다.최악의 경우 일반적으로 경계 스캔 기능을 사용하여 외부 버스 신호를 구동할 수 있습니다.
실제로 임베디드 시스템을 개발할 때 명령 저장소를 에뮬레이트하는 것이 디버깅 사이클(편집, 컴파일, 다운로드, 테스트 및 디버깅)[citation needed]을 구현하는 가장 빠른 방법입니다.이는 명령 스토어를 시뮬레이트하는 회로 내 에뮬레이터는 USB를 통해 개발 호스트에서 매우 신속하게 갱신할 수 있기 때문입니다.시리얼 UART 포트와 부트로더를 사용하여 펌웨어를 플래시에 업로드하면 이 디버깅사이클이 매우 느리고 툴의 관점에서 비용이 많이 들 수 있습니다.펌웨어를 JT 경유로 플래시(또는 플래시 대신 SRAM)에 설치하는 경우).AG는 이 극단들 사이의 중간 해결책이다.
경계 스캔 테스트
JTAG 경계 스캔테크놀로지는 디바이스 핀을 포함한 복잡한 집적회로의 많은 논리 신호에 대한 접근을 제공합니다.신호는 TAP을 통해 액세스할 수 있는 BSR(Boundary Scan Register)에 표시됩니다.이를 통해 테스트 및 디버깅을 위한 신호 상태 제어 및 테스트가 가능합니다.따라서, 소프트웨어와 하드웨어(제조)의 양쪽 모두의 장해가 발견되어 조작 디바이스를 감시할 수 있습니다.
삽입 셀프 테스트(BIST)와 조합하면, JTAG 스캔 체인에 의해서, 저오버헤드의 임베디드 솔루션에 의해서, 특정의 정적 장해(쇼트, 오픈, 및 로직 에러)를 테스트할 수 있습니다.일반적으로 스캔 체인 메커니즘은 발생할 수 있는 타이밍, 온도 또는 기타 동적 작동 오류를 진단하거나 테스트하는 데 도움이 되지 않습니다.테스트 케이스는 SVF 또는 그 바이너리 형제 XSVF와 같은 표준화된 형식으로 제공되며 프로덕션 테스트에 사용됩니다.완제품 보드에서 이러한 테스트를 수행할 수 있는 기능은 오늘날 제품에서 Design For Test의 필수 요소입니다.이 때문에, 제품을 고객에게 출하하기 전에 검출할 수 있는 장해의 수가 증가하고 있습니다.
전기적 특성
JTAG 인터페이스는 칩에 추가된 특별한 인터페이스입니다.JTAG 버전에 따라 2핀, 4핀 또는 5핀이 추가됩니다.4핀 인터페이스와 5핀 인터페이스는 특정 조건이 충족될 [6]경우 보드 상의 여러 칩을 데이지 체인으로 연결할 수 있도록 설계되었습니다.2핀 인터페이스는 여러 개의 칩을 스타 토폴로지로 연결할 수 있도록 설계되었습니다.어느 경우든 테스트 프로브는 회로 기판의 모든 칩에 액세스하기 위해 단일 "JTAG 포트"에 연결하기만 하면 됩니다.
데이지 체인 JTAG(IEEE 1149.1)
커넥터 핀은 다음과 같습니다.
- TDI(테스트 데이터 입력)
- TDO(테스트 데이터 출력)
- TCK(테스트 클럭)
- TMS(테스트 모드 선택)
- TRST(Test Reset) 옵션.
TRST 핀은 테스트 로직에 대한 옵션의 액티브-로우 리셋입니다.일반적으로 비동기적이지만 칩에 따라서는 동기화할 수도 있습니다.핀을 사용할 수 없는 경우 TCK 및 TMS를 사용하여 동기적으로 리셋 상태로 전환하여 테스트 로직을 리셋할 수 있습니다. 테스트 로직을 리셋한다고 해서 반드시 다른 것을 리셋하는 것은 아닙니다.일반적으로 디버깅되는 칩의 전부 또는 일부를 리셋할 수 있는 프로세서 고유의 JTAG 동작이 있습니다.
사용할 수 있는 데이터 라인은 1개뿐이므로 프로토콜은 직렬입니다.클럭 입력은 TCK 핀에 있습니다.1비트의 데이터는 TDI에서 TDO로 전송되며 TCK 상승 클럭에지마다 전송됩니다.다른 명령을 로드할 수 있습니다.일반적인 IC의 명령에서는 칩 ID, 샘플 입력 핀, 드라이브(또는 플로트) 출력 핀, 칩 기능 조작 또는 바이패스(여러 칩의 체인을 논리적으로 단축하기 위해 TDI에서 TDO로 파이프 연결)가 있습니다.
클럭된 신호와 마찬가지로 TDI에 표시되는 데이터는 관련된 클럭 에지(여기서, 상승) 이후 칩 고유의 Setup 시간 및 Hold 시간 동안 유효해야 합니다.TDO 데이터는 TCK의 하강 에지 후 칩 고유의 시간 동안 유효합니다.
TCK의 최대 동작 주파수는 체인 내의 모든 칩에 따라 다르지만(최저속도를 사용해야 함) 일반적으로 10-100MHz(비트당 100-10ns)입니다.또한 TCK 주파수는 보드 레이아웃과 JTAG 어댑터의 기능과 상태에 따라 달라집니다.1개의 칩에 40MHz JTAG 클럭이 탑재되어 있는 경우도 있습니다만, JTAG 이외의 동작에 200MHz 클럭을 사용하고 있는 경우에 한정됩니다.또, 저전력 모드일 때는, 훨씬 느린 클럭을 사용할 필요가 있습니다.따라서 일부 JTAG 어댑터는 RTCK(Return TCK) 신호를 사용한 적응 크로킹을 갖추고 있습니다.고속 TCK 주파수는 프로그램 실행 가능 파일을 플래시 메모리에 저장하는 등 많은 데이터를 전송하기 위해 JTAG를 사용하는 경우에 가장 유용합니다.
표준화된 JTAG 스테이트 머신을 통한 TMS 스텝에서의 크로킹 변경.JTAG 스테이트 머신은 명령 레지스터를 리셋하거나 명령 레지스터에 액세스하거나 명령 레지스터에 의해 선택된 데이터에 액세스할 수 있습니다.
JTAG 플랫폼에서는 IEEE 1149.1 사양에서 정의된 소수의 신호에 신호가 추가되는 경우가 많습니다.System Reset(SRST; 시스템리셋) 신호는 매우 일반적이며 디버거는 JTAG를 지원하는 부품뿐만 아니라 시스템 전체를 리셋합니다.경우에 따라서는 호스트 또는 JTAG를 통해 감시되고 있는 디바이스에 의한 액티비티를 트리거하기 위해 사용되는 이벤트신호가 있을 수 있습니다.또한 추가 제어회선도 있을 수 있습니다.
명시적인 JTAG 포트 커넥터를 갖춘 소비자 제품은 거의 없지만 대부분의 경우 개발 프로토타이핑 및/또는 생산의 잔여물로서 프린트 회로 기판에 접속할 수 있습니다.이러한 접속이 악용되면 리버스 엔지니어링에 가장 적합한 수단이 되는 경우가 많습니다.
핀 수 감소 JTAG(IEEE 1149.7)
핀 수를 줄인 JTAG는 클럭 와이어와 데이터 와이어의 2개의 와이어만 사용합니다.이것은 IEEE 1149.7 [7]표준의 일부로서 정의되어 있습니다.커넥터 핀은 다음과 같습니다.
- TMSC(테스트 시리얼 데이터)
- TCKC(테스트 클럭)
콤팩트 JTAG에서는 cJTAG라고 불립니다.
2개의 와이어 인터페이스를 통해 핀 수에 대한 압력이 감소하여 스타 [8]토폴로지로 디바이스를 연결할 수 있습니다.스타 토폴로지를 사용하면 시스템의 전원을 끌 수 있는 부분과 JTAG를 통해 액세스할 수 있는 부분이 있습니다.데이지 체인을 사용하려면 모든 JTAG 인터페이스에 전원이 공급되어야 합니다.시리얼 와이어 디버깅 등 다른 2선 인터페이스가 존재합니다.
커뮤니케이션 모델
JTAG에서는 디바이스가 1개 또는 복수의 Test Access Port(TAP; 테스트액세스 포트)를 표시합니다.위의 그림은 3개의 TAP을 나타내고 있습니다.각 칩 또는 1개의 칩 내부에 모듈이 있을 수 있습니다.TAP의 데이지 체인은 스캔 체인 또는 (느슨한) 타깃이라고 불립니다.스캔 체인은 임의로 길 수 있지만 실제로는 20개의 TAP가 비정상적으로 [citation needed]길다.
JTAG 를 사용하려면 , 호스트는, 레벨 시프트나 갈바닉 분리등의 문제를 처리할 필요가 있는 JTAG 어댑터를 개입시켜 타겟의 JTAG 신호(TMS, TCK, TDI, TDO 등)에 접속합니다.어댑터가 USB, PCI, 이더넷 등의 일부 인터페이스를 사용하여 호스트에 연결됩니다.
원어민
호스트는 TMS 및 TDI를 TCK와 함께 조작하고 TDO(유일한 표준 호스트 측 입력)를 통해 결과를 읽음으로써 TAP와 통신합니다.TMS/TDI/TCK 출력 천이는 상위 계층 프로토콜이 구축되는 기본 JTAG 통신 프리미티브를 만듭니다.
- 상태 전환 중...모든 TAP이 같은 상태이며 TCK 이행 시 상태가 바뀝니다.이 JTAG 스테이트머신은 JTAG 사양의 일부이며 16개의 스테이트가 포함되어 있습니다.TMS를 안정적으로 유지하는 것이 상태의 변화를 막는 6가지 '안정 상태'가 있습니다.그 외의 모든 상태에서는 TCK는 항상 그 상태를 변경합니다.또한 TRST를 어설트하면 TMS를 하이로 유지하고 TCK를 5회 재투입하는 방법보다 약간 빠른 방법으로 이들 안정상태 중 하나(Test_Logic_Reset)로 이행합니다.
- 이동 중...JTAG 스테이트 머신의 대부분은 데이터 전송에 사용되는2개의 안정된 상태를 서포트하고 있습니다.각 TAP은 명령 레지스터(IR)와 데이터 레지스터(DR)를 가진다.이러한 레지스터의 크기는 TAP에 따라 다르며, 이러한 레지스터는 TDI와 TDO를 통해 결합되어 큰 시프트 레지스터를 형성합니다.(DR의 크기는 해당 TAP의 현재 IR 값 및 SCAN_N 명령에 의해 지정된 값의 함수입니다.)이 시프트 레지스터에는 다음 세 가지 연산이 정의되어 있습니다.
- 임시 값 캡처
- Shift_에 대한 엔트리_IR 안정 상태가 Capture_를 통과합니다.IR 상태, 시프트 레지스터를 부분적으로 고정된 값으로 로드(현재 명령이 아님)
- Shift_DR 안정 상태로의 이행은 Capture_를 경유합니다.DR 상태, TAP의 현재 IR에 의해 지정된 데이터 레지스터의 값을 로드합니다.
- Shift_에서 값을 조금씩 이동시킨다.IR 또는 Shift_DR 안정 상태; TCK 전환은 디바이스의 데이지 체인을 통한 SPI 모드 1 데이터 전송과 동일하게 TDI를 TDI에서 TDO로 1비트로 전환합니다(TMS=0은 칩 선택 신호, TDI는 MOSI 등).
- Update_를 통해 이행할 때 임시 값에서 IR 또는 DR을 업데이트합니다.IR 또는 업데이트_DR 상태레지스터를 쓰기(업데이트)하지 않고는 읽기(캡처)가 불가능하며, 그 반대도 마찬가지입니다.일반적인 관용구는 업데이트에 부작용이 있는지 또는 하드웨어가 이러한 부작용을 실행할 준비가 되어 있는지 여부를 나타내기 위해 플래그 비트를 추가합니다.
- 임시 값 캡처
- 실행 중...안정된 상태는 Run_Test/Idle이라고 불립니다.구별은 TAP에 따라 다릅니다.아이돌 상태에서 TCK를 클로킹해도 특별한 부작용은 없지만 Run_Test 상태에서 클로킹하면 시스템 상태가 변경될 수 있습니다.예를 들어 일부 ARM9 코어는 명령 파이프라인을 구동하는 TCK 사이클을 지원하는 디버깅모드를 지원합니다.
따라서 기본 수준에서 JTAG를 사용하려면 명령 및 관련 데이터 레지스터의 읽기 및 쓰기가 필요합니다.또한 여러 테스트사이클이 필요할 수 있습니다.이러한 레지스터의 이면에는 JTAG에 의해 지정되지 않은 하드웨어가 있으며 JTAG 액티비티의 영향을 받는 자체 상태가 있습니다.
대부분의 JTAG 호스트는 2개의 상태 간에 최단 경로를 사용합니다(어댑터의 퀴크에 의해 제약될 수 있습니다). (예를 들어 1개의[which?] 어댑터는 길이가 7비트의 배수인 경로만 처리합니다.)JTAG 위에 구축된 일부 레이어는 상태 천이를 감시하고 일반적이지 않은 경로를 사용하여 보다 높은 수준의 동작을 트리거합니다.일부 ARM 코어에서는 이러한 시퀀스를 사용하여 2-와이어(비JTAG) SWD 모드를 시작 및 종료합니다.ZBS(Zero[7] Bit Scan) 시퀀스는 IEEE 1149.7에서 TAP의 스캔 체인 전환, 전원 관리 및 다른 2선 모드와 같은 고급 기능에 액세스하기 위해 사용됩니다.
JTAG IEEE 규격 1149.1(경계 스캔) 명령
명령 레지스터의 크기는 작은 경향이 있으며, 폭이 4비트 또는 7비트 정도일 수 있습니다.BYPASS 및 EXTEST를 제외한 모든 명령 opcode는 관련된 데이터 레지스터와 마찬가지로 TAP 구현자에 의해 정의됩니다.정의되지 않은 명령 코드를 사용하면 안 됩니다.두 가지 주요 지침은 다음과 같습니다.
- BYPASS 명령(TAP의 명령 레지스터 크기에 관계없이 모든 명령어)은 모든 TAP에서 지원되어야 합니다.이 명령은 단일 비트 데이터 레지스터(BYPASS라고도 함)를 선택합니다.이 명령을 사용하면 스캔 경로의 다른 장치가 [4]연습되는 동안 이 장치를 바이패스(아무것도 하지 않음)할 수 있습니다.
- 구현자가 정의한 opcode를 포함한 옵션의 IDCODE 명령.IDCODE는 32비트 레지스터(IDCODE)와 관련지어집니다.데이터에는 제조업체 코드(JEDEC 표준 제조업체 식별 코드, JEP-106에서 파생됨), 제조업체가 할당한 부품 번호 및 부품 버전 코드가 포함된 표준화된 형식이 사용됩니다.IDCODE는 널리 지원되지만 보편적이지는 않습니다.
RESET 상태를 종료하면 명령 레지스터에 BYPASS 또는 IDCODE가 사전 로드됩니다.이것에 의해, JTAG 호스트는, 접속처의 스캔 체인의 사이즈와 적어도 부분적으로 내용을 식별할 수 있습니다.(RESET 상태로 들어간 후 쓴 데이터를 다시 읽을 때까지 데이터 레지스터를 스캔할 수 있습니다.BYPASS 레지스터는 0비트밖에 없지만 IDCODE 레지스터는 32비트이며 1로 시작합니다.따라서 호스트에 의해 기록되지 않은 비트를 TAP에 쉽게 매핑할 수 있습니다.)IDCODE가 고유하지 않은 경우가 많기 때문에 이러한 식별은 수동 설정의 건전성을 체크하기 위해 자주 사용됩니다.예를 들어 ARM Cortex-M3 기반의 마이크로컨트롤러를 특정할 수 있지만 마이크로컨트롤러의 벤더나 모델, 특정 FPGA를 특정할 수는 없습니다.
일반적인 관용구는 BYPASS를 다른 명령을 수신하는 TAP을 제외한 모든 TAP의 명령 레지스터로 전환하는 것입니다.이렇게 하면 단일 비트 데이터 레지스터를 제외한 모든 TAP에서 다른 TAP에 영향을 주지 않고 선택적으로 해당 TAP의 데이터 레지스터로 값을 이동시킬 수 있습니다.
IEEE 1149.1(JTAG) 표준은 경계 스캔 애플리케이션을 지원하기 위한 여러 지침을 설명합니다.이러한 명령의 일부는 "필수"이지만 경계 스캔테스트 대신 디버깅에 사용되는 TAP은 이러한 명령의 지원을 최소화하거나 전혀 제공하지 않을 수 있습니다.이러한 「필수」의 순서는, BSDL 파일에 정의되어 있는 BSR(Boundary Scan Register)로 동작합니다.이러한 순서는 다음과 같습니다.
- 외부 테스트용 EXTEST(핀을 사용하여 보드 수준 동작을 프로브하는 등)
- EXTEST 전 PRELOAD 로드 핀 출력 값(SAMPLE과 조합되기도 함)
- 경계 스캔 레지스터에 대한 샘플 판독 핀 값
IEEE 정의의 「옵션」의 순서는, 다음과 같습니다.
- PRELOADED 값을 사용하여 출력 핀을 구동하는 BYPASS의 변형 클램프
- HIGHZ는 모든 핀의 출력을 비활성화합니다.
- 핀을 사용하여 온칩 동작을 조사하는 등 내부 테스트용 OUT
- RUNBIST는 칩을 셀프 테스트 모드로 합니다.
- USERCODE는 사용자 정의 코드를 반환합니다. 예를 들어 어떤 FPGA 이미지가 활성화되어 있는지 식별하기 위한 코드입니다.
디바이스는 더 많은 명령을 정의할 수 있으며 이러한 정의는 제조업체가 제공하는 BSDL 파일의 일부여야 합니다.대부분의 경우 PRIVATE로만 표시됩니다.
경계 스캔 레지스터
장치는 입력 및 출력 핀 세트를 통해 세상과 통신합니다.이러한 핀 자체는 장치의 작동에 대한 가시성을 제한합니다.단, 경계 스캔을 지원하는 디바이스에는 디바이스의 각 신호 핀에 대한 시프트 레지스터 셀이 포함되어 있습니다.이러한 레지스터는 디바이스 경계(따라서 이름) 주변의 전용 경로로 연결됩니다.이 경로를 통해 일반 입력 및 출력을 우회하는 가상 액세스 기능이 생성되어 장치를 직접 제어하고 [9]신호를 세부적으로 볼 수 있습니다.
신호 I/O 기능을 포함한 경계 스캔 레지스터의 내용은 일반적으로 제조업체에서 부품별 BSDL 파일을 사용하여 설명합니다.이들은 CAD/EDA 시스템의 설계 '넷리스트'와 함께 보드 제조에 사용되는 테스트를 개발하기 위해 사용됩니다.상용 테스트 시스템은 전체 시스템에 수천 달러의 비용이 드는 경우가 많으며, 개방 회로 및 단락과 같은 고장을 정확히 파악하기 위한 진단 옵션이 포함되어 있습니다.또한 고장을 그래픽 방식으로 묘사할 수 있는 개략도 또는 레이아웃 뷰어를 제공할 수도 있습니다.
경계 스캔을 활성화하기 위해 IC 벤더는 각 신호 핀의 스캔 셀을 포함하여 각 장치에 논리를 추가합니다.그런 다음 이러한 셀이 서로 연결되어 경계 스캔 시프트 레지스터(BSR)를 형성하고 TAP 컨트롤러에 연결됩니다.이러한 설계는 대부분의 Verilog 또는 VHDL 라이브러리의 일부입니다.이 추가 로직의 오버헤드는 최소이며, 일반적으로는 이사회 차원에서 효율적인 테스트를 가능하게 하는 데 충분한 가치가 있습니다.
예: ARM11 디버깅 TAP
예를 들어 실제 시스템에서의 JTAG 동작을 나타냅니다.다음 예시는 ARM11 프로세서의 디버깅 TAP, 즉[10] ARM1136 코어를 나타내고 있습니다.프로세서 자체는 다른 CPU 코어와 마찬가지로 광범위한 JTAG 기능을 갖추고 있으며 JTAG를 통해 보다 광범위한 기능에 액세스 할 수 있는 칩에 통합되어 있습니다.
이것은 JTAG 대응 시스템의 중요한 단면을 나타내는 간단한 예입니다.또한 JTAG의 레지스터 읽기/쓰기 프리미티브를 사용하여 제어 메커니즘을 구축하는 방법과 복잡한 논리 요소의 테스트와 디버깅을 용이하게 하기 위해 이들 메커니즘이 어떻게 조합되는지를 보여 줍니다.CPU는 일반적이지만 FPGA와 ASIC에는 디버깅이 필요한 다른 복잡한 요소가 포함되어 있습니다.
이 코어의 라이센스 계약자는 칩에 내장하고, 보통 다른 TAP 및 수많은 주변기기 및 메모리와 결합합니다.이들 중 하나의 TAP은 칩 전체의 경계 스캔테스트를 처리합니다.디버깅 TAP에서는 지원되지 않습니다.이러한 칩의 예는 다음과 같습니다.
- OMAP2420에는 경계 스캔 TAP, ARM1136 디버깅 TAP, ETB11 트레이스 버퍼 TAP, C55x DSP 및 ARM7 TDMI 기반 이미징 엔진용 TAP이 포함되어 있으며, 경계 스캔 TAP('ICE PICK-B')은 JTAG에서 스캔하여 JTAG로 출력할 수 있습니다.
- i.MX31 프로세서는 비슷하지만 ICEpick과는 매우 다른 "System JTAG" 경계 스캔 [12]TAP이며 DSP 및 이미징 엔진 대신 DMA 엔진용 TAP이 포함되어 있습니다.
이들 프로세서는 모두 휴대전화 등의 무선 핸드셋에서 사용하기 위한 것입니다.이는 JTAG 스캔체인을 변경하는 TAP 컨트롤러가 포함되어 있는 이유 중 하나입니다.저전력 동작을 디버깅하려면 칩의 전원이 대부분 꺼졌을 때 칩에 액세스해야 합니다.따라서 모든 TAP이 동작하지 않을 때는 칩에 액세스해야 합니다.이 스캔 체인 수정은 곧 출시될 IEEE 1149.7[7] 표준의 한 가지 주제이다.
JTAG 설비
이 디버깅 TAP에서는 소프트웨어 툴('디버깅')이 JTAG를 사용하여 디버깅 대상 시스템과 통신하는 표준 명령과 하드웨어 지원 디버깅용으로 특별히 설계된 명령어가 몇 가지 공개되어 있습니다.
BYPASS
그리고.IDCODE
, 위에서 설명한 표준 절차EXTEST
,INTEST
외부 경계 스캔 체인이 아닌 코어로 동작합니다.EXTEST
명목상 핵심에 데이터를 쓰기 위한 것입니다.INTEST
는 일반적으로 읽기 위한 것이지만 두 개의 스캔 체인은 이 규칙의 예외입니다.SCAN_N
에 사용되는 번호부 스캔 체인을 선택하기 위한 ARM 지침EXTEST
또는INTEST
. 스캔 체인은 6개 있습니다.0
- 디바이스 ID 레지스터, 40비트 읽기 전용 식별 데이터1
- DSCR(Debug Status and Control Register), 디버깅 기능을 조작하는 데 사용되는 32비트4
- 특별한 "디버깅 모드"에서 프로세서 명령을 실행하기 위해 사용되는 명령 전송 레지스터(ITR), 33비트(32개의 명령과 1개의 상태 비트)5
- Debug Communications Channel(DCC; 디버깅 통신 채널), 34비트(1개의 긴 데이터 워드+2개의 상태 비트)를 코어로의 양방향 데이터 전송에 사용합니다.이는 디버깅 모드 및 디버거 인식 소프트웨어와 대화할 때 모두 사용됩니다.6
- 패시브 명령 및 데이터 트레이스 메커니즘의 동작을 제어하기 위해 사용되는 Embedded Trace Module(ETM; 임베디드 트레이스 모듈), 40비트(7비트 주소, 32비트 긴 데이터 워드, R/W 비트)이것은 온칩 Embedded Trace Buffer(ETB; 임베디드 트레이스 버퍼) 또는 외부 고속 트레이스 데이터 수집 포드를 공급합니다.트레이스에서는 퍼포먼스 조정을 위한 패시브디버깅(실행 이력 조사)과 프로파일링을 지원합니다.7
- 하드웨어 중단점, 워치포인트 등에 액세스하기 위해 사용되는 디버깅모듈, 40비트(7비트 주소, 32비트 긴 데이터 워드 1개 및 R/W 비트)프로세서가 실행 중일 때 쓸 수 있습니다.디버깅 모드로 할 필요는 없습니다.
HALT
그리고.RESTART
CPU를 정지 및 재기동하는 ARM11 고유의 순서.정지하면 코어가 「디버깅 모드」가 됩니다.이 모드에서는, DCC 를 사용해 디버깅(JTAG) 호스트와 CPU 사이의 데이터 전송을 포함한 명령의 실행에 ITR 를 사용할 수 있습니다.ITRSEL
, ITR에 의한 몇 가지 조작을 고속화하는 ARM11 고유의 순서.
그 모델은 다른 ARM 코어에서 사용되는 모델과 유사합니다.비 ARM 시스템은 일반적으로 유사한 기능을 가지고 있으며 JTAG 또는 기타 벤더 고유의 스킴에 Nexus 프로토콜을 사용하여 구현될 수 있습니다.
오래된 ARM7 및 ARM9 코어에는 내장형ICE 모듈은[13] 대부분의 기능을 결합하지만 명령 실행을 위한 어색한 메커니즘을 가지고 있습니다. 디버거는 CPU 명령 파이프라인을 시계별로 구동하고 CPU에 데이터를 읽고 쓰기 위해 데이터 버스에 직접 액세스해야 합니다.ARM11은 트레이스 지원(ETM, ETB)에 오래된 코어와 동일한 모델을 사용합니다.
새로운 ARM Cortex 코어는 이 디버깅모델과 매우 유사하지만 CPU에 직접 액세스하는 대신 DAP(Debug Access Port)를 기반으로 합니다.이 아키텍처(CoreSight Technology라는 이름)에서는 코어 모듈과 JTAG 모듈은 완전히 독립되어 있습니다.또, 6선식 JTAG 인터페이스가 아니고, ARM의 2선식 SWD 인터페이스(아래를 참조)를 개입시켜 호스트 할 수 있도록 JTAG로부터 분리되어 있습니다(ARM은 4개의 표준 JTAG 신호를 받아들여 옵션의 TRST와 적응 크로킹에 사용되는 RTCK 신호를 추가합니다).CoreSight JTAG-DP는 코어 클럭과 비동기이며 RTCK는 [14]구현되지 않습니다.또, 새로운 코어의 트레이스 서포트도 갱신되고 있습니다.
정지 모드 디버깅
소프트웨어를 디버깅하는 기본적인 방법 중 하나는 단일 스레드 모델을 제시하는 것입니다.여기서 디버거는 정기적으로 프로그램 실행을 중지하고 레지스터 콘텐츠와 메모리(주변 컨트롤러 레지스터 포함)에 의해 노출된 상태를 검사합니다.대상 프로그램 이벤트가 다가오면 특정 오류가 어떻게 발생하는지 보기 위해 단일 단계 명령(또는 소스 코드 행)을 수행할 수 있습니다.
예를 들어 JTAG 호스트는 코어를 HALT 하고 디버깅모드로 이행한 후 ITR 및 DCC를 사용하여 CPU 레지스터를 읽을 수 있습니다.프로세서 상태를 저장한 후 필요한 값을 사용하여 레지스터를 쓴 다음 CPU에서 임의 알고리즘을 실행하여 메모리 및 주변기기에 액세스하여 시스템 상태를 파악할 수 있습니다.디버거가 이러한 작업을 수행한 후 RESTART 명령을 사용하여 상태를 복원하고 실행을 계속할 수 있습니다.
디버깅 모드는 디버깅모듈이 워치포인트 또는 브레이크포인트를 트리거하거나 디버깅되는 소프트웨어에서 BKPT(브레이크포인트) 명령을 발행하여 비동기적으로 시작됩니다.명령 트레이스에 사용되지 않는 경우 ETM은 엔트리를 디버깅모드로 트리거할 수도 있습니다.디버깅모듈에 의해 공개되는 단순한 주소 비교뿐만 아니라 스테이트와 이력에 민감한 복잡한 트리거도 지원합니다.디버깅 모드로의 비동기 이행은 DSCR 레지스터를 폴링함으로써 검출됩니다.싱글 스테핑의 실장은 다음과 같습니다.코어를 HALT, 다음 명령 또는 다음 개략적인 스테이트먼트에서 임시 브레이크 포인트를 설정하고 디버깅스테이트에 대한 비동기 엔트리를 검출하여 임시 브레이크 포인트를 삭제하고 반복할 때까지 DSCR을 폴링합니다.
모니터 모드 디버깅
최신 소프트웨어는 너무 복잡해서 단일 스레드 모델에서는 제대로 작동하지 않는 경우가 많습니다.예를 들어 모터 제어에 사용되는 프로세서(아마 톱날을 구동하는 프로세서)는 안전하게 정지 모드로 들어가지 못할 수 있으며, 사람 및/또는 기계의 물리적 안전을 보장하기 위해 인터럽트를 계속 처리해야 할 수 있습니다.JTAG를 사용하여 HALT 명령을 발행하는 것은 위험할 수 있습니다.
ARM 프로세서는 이러한 상황에서 동작하기 위해 모니터모드라고 불리는 대체 디버깅모드를 지원합니다.(이것은, 새로운 ARM 코어의 시큐어 확장의 일부로서 실장되고 있는 시큐어 모니터 모드와는 다릅니다.보안 이행이 아닌 디버깅 조작을 관리합니다).이 경우 브레이크포인트와 워치포인트는 특별한 종류의 하드웨어 예외를 트리거하여 시스템소프트웨어의 일부로 동작하는 "디버깅모니터"로 제어를 이관합니다.이 모니터는 DCC를 사용하여 디버거와 통신하며 예를 들어 다른 프로세스(및 인터럽트 핸들러)가 계속 실행되는 동안 단일 프로세스만 수행하도록 설정할 수 있습니다.
공통 내선번호
마이크로프로세서 벤더는 자체 코어 고유의 디버깅 확장을 정의하는 경우가 많습니다.이러한 벤더에는 Infineon, MIPS with EJTAG 등이 있습니다.공급업체가 표준(ARM 프로세서 또는 Nexus에서 사용되는 표준 등)을 채택하지 않은 경우 공급업체는 자체 솔루션을 정의해야 합니다.경계 스캔을 서포트하고 있는 경우는, 통상은 JTAG 경유로 디버깅을 구축합니다.
프리스케일은 COP와 OnCE(On-Chip Emulation)가 있습니다.OnCE에는 JTAG 명령어가 포함되어 있습니다.JTAG 명령어를 사용하면 TAP은 싱글스테핑, 브레이크 포인트, 레지스터 또는 메모리의 액세스 등의 조작을 위해 IR이 OnCE 디버깅명령어를[15] 유지할 수 있습니다.또, EOnCE(Enhanced On-Chip Emulation)[16]는, 리얼 타임의 문제에 대처하는 것으로서 정의되고 있습니다.
ARM은 Embedded에서 시작된 광범위한 프로세서 코어 디버깅 아키텍처(CoreSight)를 갖추고 있습니다.ICE(대부분의 ARM 코어에서 사용 가능한 디버깅 기능)는 고속 트레이스 포트를 갖춘 ETM(Embedded Trace Macrocell) 등 많은 추가 컴포넌트를 포함하고 있어 멀티코어 및 멀티스레드 트레이스를 지원합니다.추적은 비침습적이어서 추적하기 위해 시스템 작동을 중지할 필요가 없습니다.(단, 트레이스 데이터는 용량이 너무 커서 JTAG를 트레이스 제어 채널로 사용할 수 없습니다).
Nexus는 벤더에 크게 의존하지 않는 프로세서 디버깅인프라스트럭처를 정의합니다.하드웨어 인터페이스의 1개는 JTAG입니다.또, 트레이스 등에 사용되는 고속의 보조 포토 인터페이스도 정의합니다.Nexus는 Atmel AVR32 및 Freescale MPC5500 시리즈프로세서 등 일부 새로운 플랫폼에서 사용됩니다.
사용하다
- 일부 최하위 시스템을 제외하고 기본적으로 모든 임베디드 시스템플랫폼에는 인서킷 디버깅과 펌웨어 프로그래밍 및 경계 스캔테스트를 지원하는 JTAG 포트가 있습니다.
- ARM 아키텍처 프로세서는 JTAG를 지원하며 2선식 "SWD" 배리언트 또는 명령 또는 데이터 버스에서의 트래픽 고속 트레이스를 지원하는 경우가 있습니다.
- Atmel AVR 및 TI MSP430 칩 등 최신 8비트 및 16비트 마이크로컨트롤러 칩은 JTAG 프로그래밍 및 디버깅을 지원합니다.단, 가장 작은 칩에는 충분한 핀이 없는 경우가 있습니다(따라서 독자적인 싱글 와이어 프로그래밍 인터페이스에 의존하는 경향이 있습니다).핀 수가 32를 넘으면 JTAG 옵션이 있을 수 있습니다.
- 현재 사용되는 거의 모든 FPGA 및 CPLD는 JTAG 포트를 통해 프로그래밍할 수 있습니다.표준 테스트 및 프로그래밍 언어는 PLD의 JTAG 프로그래밍을 위해 JEDEC 표준 JESD-71에 의해 정의됩니다.
- 많은 MIPS 및 PowerPC 프로세서는 JTAG를 지원합니다.
- 인텔 Core, Xeon, ATOM 및 Quark 프로세서는 모두 JTAG 프로브 모드를 지원하며, 이른바 60핀 eXtended Debug Port(XDP)를 사용합니다.또한 쿼크 프로세서는 기존의 10핀 커넥터를 지원합니다.
- 네트워킹어플라이언스나 위성TV 내장 리시버/디코더등의 소비자 제품에서는, JTAG 를 서포트하는 마이크로프로세서를 사용하는 경우가 많아, 기존의 부트로더가 파손되었을 경우에 펌 웨어를 새로고침 하는 대체 수단을 제공합니다.
- PCI 버스 커넥터 규격에는 핀 1~5에 [17]옵션 JTAG 신호가 포함되어 있으며, PCI Express에는 핀 5~[18]9에 JTAG 신호가 포함되어 있습니다.특수한 JTAG 카드를 사용하여 파손된 BIOS를 재플래시할 수 있습니다.
- 경계 스캔 테스트 및 시스템 내(디바이스) 프로그래밍 애플리케이션은 간단한 구문을 사용하여 JTAG 동작을 텍스트로 표현한 시리얼 벡터 포맷을 사용하여 프로그래밍되는 경우가 있습니다.다른 프로그래밍 형식으로는 'JAM'과 STAPL이 있으며 최근에는 IEEE 규격 1532에서 정의된 형식 'ISC'(In-System Configuration의 줄임말)가 있습니다.ISC 형식은 IEEE 1149.1 기본 최소 명령 외에 ISC_<operation> 명령 추가가 포함된 프로그래머블로직 디바이스(FPGA 및 CPLD)용 확장 BSDL 모델과 함께 사용됩니다.Xilinx, Altera, Ratis, Cypress, Actel 등의 FPGA 프로그래밍 도구는 일반적으로 이러한 파일을 내보낼 수 있습니다.
- 앞서 설명한 바와 같이 많은 보드에는 제조 동작을 지원하기 위한 JTAG 커넥터 또는 패드만 포함되어 있습니다.여기서 경계 스캔 테스트는 보드 품질 확인(부정한 납땜 조인트 등) 및 플래시 메모리 또는 FPGA 초기화에 도움이 됩니다.
- JTAG는 필드 업데이트 및 트러블 슈팅도 지원합니다.
클라이언트 지원
타깃의 JTAG 인터페이스는 일부 JTAG 지원 애플리케이션과 일부 JTAG 어댑터 하드웨어를 사용하여 액세스합니다.이러한 하드웨어는 생산 테스트, 고속 시스템 디버깅, 저비용 마이크로컨트롤러 개발 등 다양한 용도로 최적화되어 있습니다.마찬가지로 이러한 하드웨어를 구동하는 데 사용되는 소프트웨어는 상당히 다양할 수 있습니다.소프트웨어 개발자는 펌웨어 디버깅 및 업데이트에 주로 JTAG를 사용합니다.
커넥터
JTAG 어댑터의 물리 커넥터에 관한 공식 표준은 없습니다.개발 보드에는 일반적으로 선호하는 개발 도구를 지원하기 위한 헤더가 포함되어 있습니다. 경우에 따라서는 이러한 여러 개의 헤더를 포함할 수 있습니다. 왜냐하면 이러한 툴은 여러 개 지원되어야 하기 때문입니다.예를 들어 마이크로컨트롤러, FPGA 및 ARM 어플리케이션프로세서는 툴을 공유하는 경우가 거의 없기 때문에 이들 컴포넌트를 모두 사용하는 개발 보드에는 3개 이상의 헤더가 있을 수 있습니다.프로덕션 보드는 헤더를 생략하거나 공간이 제한된 경우 테스트 포인트를 사용하여 JTAG 신호 액세스를 제공할 수 있습니다.
2.54mm(0.100인치) 핀 헤더의 일반적인[19] 핀 배치는 다음과 같습니다.
- ARM 2×10핀(또는 구형 2×7핀), 거의 모든 ARM 기반 시스템에서 사용
- MIPS 기반 시스템에 사용되는 MIPS EJTAG(2×7핀)
- 2×5핀 Altera Byte Blaster 호환 JTAG는 많은 벤더가 확장
- 2×5핀 AVR은 SRST를 사용하여 Altera JTAG를 확장합니다(경우에 따라서는 TRST 및 이벤트 출력).
- 2×7핀 텍사스 인스트루먼트는 DSP 및 OMAP 등의 ARM 기반 제품과 함께 사용
- 8핀(단열) 범용 PLD JTAG, 다수의 Ratis ispDOWNload 케이블과 호환
- JTAG, cJTAG 및 SWD용 MIPI10/20 커넥터(1.27mm 050인치)
이러한 커넥터에는 4개의 표준화된 신호(TMS, TCK, TDI, TDO)만이 포함되어 있는 것이 아닙니다.일반적으로 리셋 신호는 TRST(TAP 리셋)와 SRST(시스템 리셋) 중 하나 또는 둘 다입니다.커넥터는 보통 테스트 대상 보드의 로직 전원 전압을 공급하므로 JTAG 어댑터는 적절한 로직레벨을 사용합니다.보드 전압은 "보드 존재" 디버거 입력으로도 사용할 수 있습니다.보다 복잡한 디버깅아키텍처를 지원하기 위해 기타 이벤트 입력 또는 출력 신호 또는 범용 I/O(GPIO) 회선이 제공될 수 있습니다.
하이엔드 제품에서는 고밀도 커넥터(대부분 38핀 MICTOR 커넥터)를 사용하여 JTAG 동작과 함께 고속 트레이스를 지원합니다.최근의 경향은 개발 보드에 USB 인터페이스를 JTAG에 통합시키는 것입니다.JTAG에서는 시리얼 포트에 두 번째 채널을 사용합니다.(소형 보드는 USB를 통해 전원을 공급할 수도 있습니다.현대 PC에서는 시리얼 포트가 생략되는 경향이 있기 때문에 이러한 통합 디버깅링크는 개발자의 혼란을 크게 줄일 수 있습니다.)생산 보드는 테스트 및 프로그래밍을 위해 테스트 지점에 대한 베드오브네일(bed-of-nails) 연결에 의존하는 경우가 많습니다.
어댑터 하드웨어
어댑터 하드웨어는 매우 다양합니다.개발 보드에 내장되어 있지 않은 경우 타깃보드의 JTAG 커넥터에 접속하기 위한 짧은 케이블, USB, PCI, 이더넷링크 등의 디버깅호스트 접속 및 2개의 통신 도메인을 조정하기 위한 충분한 전자장치(및 경우에 따라서는 갈바닉 분리)가 필요합니다.별도의 전원장치가 필요할 수 있습니다.「덤」어댑터에는, 호스트가 모든 JTAG 의 조작을 결정해 실행하는 「덤」어댑터와 그 작업의 일부를 어댑터내에서 실행하는 「스마트」어댑터가 있습니다(많은 경우 마이크로 컨트롤러에 의해 구동됩니다).「스마트」어댑터를 사용하면, 순서간의 상태 변경에 폴링을 수반하는 동작 시퀀스의 링크 지연이 없어지기 때문에, throughput이 고속이 됩니다.
2018년 현재[update] 호스트로부터 USB 링크가 있는 어댑터가 가장 일반적인 접근 방식입니다.하이엔드 제품에서는 대부분의 경우 이더넷을 지원하며 디버깅호스트가 상당히 리모트할 수 있다는 장점이 있습니다.고속 트레이스 포트를 지원하는 어댑터에는 일반적으로 몇 MB의 트레이스 버퍼가 포함되어 있으며 호스트에 데이터를 전송하기 위한 고속 링크(USB 또는 이더넷)를 제공합니다.
병렬 포트 어댑터는 단순하고 저렴하지만 호스트 CPU를 사용하여 각 비트를 변경('비트 뱅잉')하기 때문에 비교적 느립니다.최근 몇 년 동안 대부분의 컴퓨터에 병렬 포트가 없기 때문에 이러한 시스템의 유용성은 감소했습니다.어댑터에 따라 핀 사용법이 크게 다르기 때문에 드라이버 지원도 문제가 됩니다.병렬 포트는 5V 로직레벨을 기반으로 하기 때문에 대부분의 어댑터는 3.3V 또는 1.8V 목표전압에 대한 전압변환 지원이 없었습니다.
RS-232 시리얼 포트 어댑터도 존재하며, 마찬가지로 유용성이 저하되고 있습니다.일반적으로 병렬 포트보다 느린 비트뱅잉 또는 일부 명령어프로토콜을 JTAG 동작으로 변환하는 마이크로컨트롤러 중 하나입니다.이러한 직렬 어댑터도 속도가 빠르지 않지만 일반적으로 명령 프로토콜을 고속 링크에서 재사용할 수 있습니다.
모든 JTAG 어댑터에서 소프트웨어 지원은 기본적인 문제입니다.많은 벤더가 JTAG 어댑터 하드웨어에서 사용하는 프로토콜을 공개하지 않기 때문에 고객은 해당 벤더가 지원하는 툴 체인으로 한정됩니다.이것은, 「스마트」어댑터의 특수한 문제이며, 그 중 일부는, 특정의 CPU와의 상호 작용 방법에 관한 많은 지식을 포함하고 있습니다.
소프트웨어 개발
임베디드 소프트웨어의 대부분의 개발 환경에는 JTAG 지원이 포함되어 있습니다.대략적으로 말하면, 이러한 소프트웨어에는 다음의 3가지 소스가 있습니다.
- 칩 벤더가 툴을 제공하는 경우가 있습니다.보통 JTAG 어댑터가 필요합니다.예를 들어 Xilinx 및 Altera 등의 FPGA 벤더, AVR8 및 AVR32 제품군용 Atmel, DSP 및 마이크로 제품 대부분용 Texas Instruments 등이 있습니다.이러한 툴은 많은 기능을 갖추고 있는 경향이 있으며 FPGA나 DSP와 같은 고도로 전문화된 칩에는 유일한 실제 옵션이 될 수 있습니다.로우엔드 소프트웨어 도구는 무료로 제공될 수 있습니다.JTAG 어댑터 자체는 무료는 아니지만 개발 보드에 번들되어 있는 경우도 있습니다.
- 툴 벤더는 크로스 플랫폼 개발 지원을 위해 일반적으로 여러 칩 벤더와 연계하여 제공할 수 있습니다.ARM 기반 제품에는 특히 풍부한 서드파티 시장이 있으며, 이들 벤더의 상당수는 MIPS 및 PowerPC와 같은 비 ARM 플랫폼으로 확장되었습니다.툴 벤더는 때때로 GCC나 GDB와 같은 무료 소프트웨어를 기반으로 제품을 구축하며, 이클립스를 사용하는 GUI 지원을 자주 받습니다.JTAG 어댑터는 지원 번들과 함께 판매되는 경우가 있습니다.
- 오픈 소스 도구가 존재합니다.앞서 설명한 바와 같이 GCC와 GDB는 양호한 툴체인의 핵심을 형성하고 있으며 이들을 지원하는 GUI 환경이 있습니다.
이러한 모든 소프트웨어는 기본적인 디버거 지원(정지, 정지, 싱글 스테핑, 중단점, 데이터 구조 브라우징 등)을 포함하는 경향이 있습니다.상용 툴은 매우 정확한 시뮬레이터나 트레이스 분석과 같은 툴을 제공하는 경향이 있습니다.이러한 툴은 현재 오픈 소스로는 이용할 수 없습니다.
유사한 인터페이스 표준
시리얼 와이어 디버깅(SWD)은 동일한 프로토콜을 사용하는 대체 2핀 전기 인터페이스입니다.기존 GND 접속을 사용합니다.SWD는 ARM Debug Interface [20]v5에서 정의된 ARM CPU 표준 양방향 와이어 프로토콜을 사용합니다.이를 통해 디버거는 시스템 메모리와 주변기기 또는 디버깅 레지스터에 액세스하기 위한 다른 AMBA 버스 마스터가 될 수 있습니다.데이터 레이트는 50MHz에서 최대 4MB/s입니다.SWD에는 에러 검출 기능도 내장되어 있습니다.SWD 기능을 갖춘 JTAG 디바이스에서는 TMS와 TCK가 SWDIO 및 SWCLK 신호로 사용되며 듀얼 모드프로그래머를 지원합니다
「 」를 참조해 주세요.
레퍼런스
- ^ Neal Stollon (2011). On-Chip Instrumentation. Springer.
- ^ Randy Johnson, Studd Christie (Intel Corporation, 2009), JTAG 101 - IEEE 1149.x 및 소프트웨어 디버깅
- ^ IEEE 1149.1-1990 의 카피 또는 2001 의 업데이트는, IEEE 로부터 구입할 수 있습니다.
- ^ a b "IEEE 1149.1-2001".
- ^ 올바른 FPGA 디버깅 방법(2010년 4월 27일 Wayback Machine presents)을 선택합니다.
- ^ "FAQ: Under what conditions can I daisy-chain JTAG?". www.jtagtest.com.
- ^ a b c Texas Instruments는 이 표준을 채택한 기업 중 하나이며, 자세한 정보가 포함된 IEEE 1149.7 Wiki 페이지 Archived 2014년 4월 6일 Wayback Machine에 있습니다.
- ^ "Major Benefits of IEEE 1149.7".
- ^ Oshana, Rob (29 October 2002). "Introduction to JTAG". Embedded Systems Design. Retrieved 5 April 2007.
- ^ ARM1136JF-S 및 ARM1136J-S 기술 참조 매뉴얼 개정판 r1p5, ARM DDI 0211K.14장에서는 Debug TAP에 대해 설명합니다.다른 ARM11 코어는 디버깅 TAP을 통해 동일한 모델을 제공합니다.
- ^ OMAP2420의 매뉴얼은 공개되어 있지 않습니다.그러나 Texas Instruments 문서 DBGJTAG 사용자 가이드에서 JTAG 진단 도구에 대해 설명합니다. 이 OMAP2420 스캔 체인 예(및 기타)를 보여 줍니다.
- ^ Freescale 웹사이트에서 "i.MX35 (MCIMX35) Multimedia Applications Processor Reference Manual"을 참조하십시오.제44장에서는 "Secure JTAG Controller"(SJC)에 대해 설명합니다.
- ^ ARM9EJ-S 기술 참조 매뉴얼 개정판 r1p2.부록 B "Debug in Deepth"는 임베디드 기기용일반적인 ARM926ejs 코어에서 볼 수 있는 ICE-RT 모듈.
- ^ "CoreSight Components Technical Reference Manual: 2.3.2. Implementation specific details". infocenter.arm.com.
- ^ AN1817/D, "MMC20xx M•CORE OnCE 포트 통신 및 제어 시퀀스", Freescale Semiconductor, Inc., 2004.모든 프로세서가 동일한 OnCE 모듈을 지원하는 것은 아닙니다.
- ^ AN2073 "EOnCE 포트와 OnCE 포트의 차이"; Freescale Semiconductor, Inc; 2005.
- ^ "PCI Local Bus Technical Summary, 4.10 JTAG/Boundary Scan Pins". Archived from the original on 7 November 2006. Retrieved 13 July 2007.
- ^ "Serial PCI Express Bus 16x Pinout and PCIe Pin out Signal names". www.interfacebus.com.
- ^ JTAG 핀 할당에는 광범위한 도구 지원을 가진 JTAG 전용 헤더 레이아웃이 몇 가지 나열되어 있습니다.
- ^ "ARM Information Center". infocenter.arm.com. Retrieved 10 August 2017.
외부 링크
- IEEE 규격(Leduced-Pin and Enhanced-Functional Test Access Port and Boundary-Scan Architecture) 공식 IEEE 1149.7 규격
- JTAG 101 - IEEE 1149.x 및 소프트웨어 디버깅인텔의 광범위한 아키텍처에 걸친 시스템소프트웨어 디버깅에서의 JTAG 사용에 관한 화이트 페이퍼.
- IEEE 규격 1149.1(JTAG) 테스트 가능성 프라이머 JTAG에 관한 강력한 기술 프레젠테이션과 테스트용 설계 장 포함.
- IEEE 표준, BSDL, DFT 및 기타 토픽의 상세 내용을 포함한 경계 스캔 / IEEE 1149 튜토리얼
- JTAG 튜토리얼 JTAG 테크놀로지에 관한 유용한 튜토리얼 및 정보.
- JTAG란?JTAG, 타임라인, 아키텍처 등에 관한 유용한 정보.
- JTAG Applications JTAG 제품 개발, 라이프 사이클, 테스트, 필요한 도구 및 기타 토픽.