JTAG에 대한 내용을 정리한다. -- 김도집 (2006.3.2) [[TableOfContents]] = JTAG = == JTAG Pin == * nTRST : Power up 이후 적어도 한번은 Reset를 주어야 한다. * TCK : Clock * TMS : State machine signal * TDI : Data input * TDO : Data output == 스캔 체인 == ARM은 크게 네 개의 스캔 체인(scan chain)을 갖는다. * 스캔 체인0 - ARM7TDMI 코아 * 스캔 체인1 - 스캔 체인0의 서브 셋 (디버그 모드) * 스캔 체인2 - ICE * 스캔 체인3 - External * 스캔 체인6 - ? * 스캔 체인15 - 코프로세서 스캔 체인0은 ARM 코아 전체를 커버한다. 데비터 및 어드레스 버스[31:0], 코아 제어 신호, ICE 제어 신호를 모두 커버한다. 스캔 체인1은 스캔 체인 0의 서브 셋으로 데이터 버스[31:0]과 BREAKPT 신호를 커버한다. 스캔 체인2은 ICE 관련 신호들을 커버한다. 스캔 체인15은 코프로세서 관련 신호들을 커버한다. == TAP == TAP은 Test Access Port의 약자이다. 시리얼 테스트 및 디버그를 위해서는 JTAG 상태 머신을 통해 제어가 필요하다. 이러한 것을 처리하는 것이 TAP 컨트롤러이다. << TAP 컨트롤러 상태 변이>> === 레지스터 === * Bypass register * ID code register (32bits) * Instruction register (4bits) * Scan path select register (4bits) bypass 레지스터는 1 TCLK 지연을 두고 TDI입력이 TDO로 출력 될 때 사용된다. 이는 SHIFT-DR 상태에서 동작한다. ID code 레지스터는 32비트의 ID 코드 값을 갖고 있다. CAPTURE-DR 상태 동안 읽을 수 있다. TAP에서 사용하는 명령(instruction)은 다음과 같다: ||'''명령'''||'''이진코드'''||'''16진코드'''|| ||EXTEST||b0000||0x0|| ||SCAN_N||b0010||0x2|| ||SAMPLE/PRELOAD||b0011||0x3|| ||RESTART||b0100||0x4|| ||CLAMP||b0101||0x5|| ||HIGHZ||b0111||0x7|| ||CLAMPZ||b1001||0x9|| ||INTEST||b1100||0xC|| ||IDCODE||b1110||0xE|| ||BYPASS||b1111||0xF||