JTAG란?
JTAG은 임베디드 시스템 개발환경의 하나로써 임베디드 시스템의 하드웨어가 만들어 졌을 때 flash에 부트로더를 fusing 하는 등 중요한 부분을 차지합니다. 그 밖에도 JTAG은 하드웨어 테스트, ARM의 디버깅 기능과 연동해서 소프트웨어 디버깅을 하는 등 매우 다양한 기능을 가지고 있습니다. 또한 JTAG 기능은 CPU와는 독립적으로 기능이 구현되어 있어도 CPU가 다른 시스템에 적용되더라도 JTAG의 기본 기능 그대로 유지되기 때문에 한번 JTAG을 이해하면 계속적으로 적용이 가능하도록 설계되어 있습니다.
70년대 중반에는 “bed-of nails”라는 테크닉을 사용하여 직접PCB(print circuit board)에 접촉하는 방식으로 board를 테스트 하였다(현재에도 지그라는 장비를 사용)그런데 board단자 사이의 거리가 좁아짐에 따라 테스트가 매우 어렵게 되었고 결정적으로 multi layer board가 나타남에 따라 위의 방법은 불가능하게 되어 테스트 하다가 하드웨어에 손상을 가져달 줄수 있고 고가의 비용등 여러 가지 문제점들이 발생하게 되었다. 이런 문제를 해결하기 위해 80년대 중반에 Joint European Test Access Group 이란 단체가 결성되었으며 그들은 a serial shift register around the boundary of the device라는 개념을 발전 시켰다.
JTAG의 기능
JTAG가 제공하는 기능을 먼저 살펴보면 프로세서(CPU)의 상태와는 상관없이 디바이스의 모든 외부 핀을 구동시키거나 값을 읽어 들일 수 있는 기능을 제공한다.
* 디바이스 내에서 모든 외부와의 연결점을 가로챈다.
(즉 외부로 나가는 각각의 핀들과 일대 일로 연결)
* 각각의 sell은 serial shift register (boundary scan register)형성하기 위해서 서로 연결되어 있다.
* 전체적인 인터페이스는 5개의 핀에 의해서 제어된다.
(TDI, TMS, TCK, nTRST, TDO)
* 회로의 배선과 소자의 전기적 연결상태 테스트
* 디바이스간의 연결상태 테스트
* flash memory fusing
다음 이미지는 리눅스상에서 jflash를 생성하는 과정이다.