JTAG는 하드웨어의 속도와 CPU 패키지의 복잡도가 점점 증가하면서 기존의 bed-of-nails타입 애뮬레이터로는 한계가 있기 때문에 80년대 초반부터 본격적으로 등장했다.(기존의 방식은 PGA타입으로 된 CPU 소켓에 점퍼로 호스트 컴퓨터와 연결해 동작을 트레이스하도록 되어 있었다) 80년대 중반 Joint European Test Access Group이란 단체가 a serial shift register around the boundary of the device 형태의 인터페이스를 개발한 것이 최초이다. JTAG는 현재 ARM과 일부 MPC에서 채택되고 있고, 요즘은 대부분의 임베디드 프로세서를 포함해 DSP, 8비트급까지 지원하고 있다.
JTAG는 다른 말로 '바운더리 스캔셀(Boundary-Scan Cell)'이라고 불리기도 하는데, 수많은 CPU핀들의 상태를 호스트 컴퓨터가 파악할 수 있게 해줄 뿐만 아니라 호스트 컴퓨터의 지시에 따라 인위적인 컨트롤이 가능하다. 이를 이용해 CPU와 디바이스간 연결을 확인할 수 있고, CPU에 연결된 디바이스를 조작할 수도 있게 된다. 결과적으로 5편 남짓한 연결을 통해 CPU의 모든 핀들을 컨트롤할 수 있게 된다는 뜻이다. JTAG는 TDI(Test Data In), TDO(Test Data Out), TCK(Test Clock Input), TMS(Test Mode Select), TRST(Test Reset)의 신호 인터페이스를 공통으로 제공하기 때문이다.
이 신호들을 통해 외부에서 칩 내부로 접근이 가능한데, 시프트 레지스터 및 MUX로 구성된 바운더리 스캔 셀이라는 유닛이 칩 내부의 신호선들을 감싸고 있기 때문이다. 외부에서 TCK 클럭에 동기하여 직렬로 데이터를 쓰고(TDI 이용), 읽을(TDO 이용)수 있으며, TMS를 통해 JTAG 내부에 있는 TAP(Test Access Port) 컨트롤러라는 state-machine을 제어한다. TRST는 JTAG 회로를 기본 상태로 리셋시킨다. 모든 신호는 TCK에 동기하여 동작하는데, TDI, TMS, TRST는 TCK의 상승 에지(rising-edge)에서 적용되며, TDO는 TCK의 하강 에지(falling-edge)에서 적용된다.
간단히 말해 JTAG 인터페이스를 갖고 있는 디바이스는 외부에서 JTAG 신호에 맞도록 직렬로 신호들을 주면 동작시킬 수 있는 것이다. 따라서 하드웨어 디버깅이 가능하게 된다. 이러한 기술을 사용하여 임베디드 시스템에서는 부트로더나 작은 응용 프로그램들을 비휘발성 메모리(주로 플래시 메모리)에 저장한다. 최근에 나오는 많은 컨트롤러나 코어 디바이스들은 JTAG 인터페이스를 지원해 고가의 별도 장비가 없어도 프로그래밍할 수 있도록 지원하고 있다. 타겟 보드의 초기 개발 단계에서 CPU에 연결되어 있는 플래시 메모리가 이상 업이 연결돼 있다는 것을 확인한 다음, 플래시 메모리 내부에 내용을 읽고 쓸 수도 있다. 이렇게 되면 별도의 롬 라이터를 사용하지 않고도 작업이 가능하다.
배선 상태를 확인하는 것 외에도 JTAG는 CPU 내부의 레지스터 상태까지도 읽고 쓰는 것이 가능하므로 완벽한 애뮬레이터 기능을 지원할 수 있다. 이밖에 JTAG는 CPU 개발사에 따라 표준에서 추가된 기능을 지원하기도 한다. 이렇게 다양한 기능을 가진 JTAG를 PC에서 이용하기 위해서는 일반적으로 동글(dongle)이라는 것을 이용한다. 동글은 패러럴 포트의 신호선을 사용해 JTAG와 인터페이스된다.
타겟 보드에 따라서는 동글 인터페이스가 포함되어 있는 경우가 있다. 이런 타겟 보드의 경우는 간단하게 패러럴 케이블만 연결하면 된다. 만약 타겟 보드에 이 회로가 포함되어 있지 않을 경우 직접 동글을 제작하여야 한다. 동글의 회로도는 http://www.lart.tudelft.nl/projects/jtag에서 구할 수 있다. 일반적으로 국내에서 판매되는 ARM 타겟 보드의 경우는 회로를 내장하는 경우가 대부분이다. 한편 JTAG로 타겟과 연결된 호스트 컴퓨터에는 JFlash 같은 간단한 프로그램으로 CPU의 조작이 가능하다.
'Embeded' 카테고리의 다른 글
OpenGL ES (0) | 2010.02.01 |
---|---|
tslib의 ts_test 에서 똥그라미로 그리기. grlib 사용. (0) | 2009.12.15 |
Clock Framework (0) | 2009.11.20 |