2017-03-29 3 views
2

JTAG를 통해 Cortex-M3 기반 마이크로 컨트롤러 (LPC1769)와 통신하려고합니다. 이미 하드웨어가 필요하고 작동하도록 예제 프로그램을 얻을 수 있었지만, 더 진행하려면이 경우 사용할 수있는 장치 별 JTAG 지침을 알아야합니다. Cortex-M3 기술 참조 설명서 (link)의 해당 부분을 읽었습니다.이 말은 장치가 표준 CoreSight 디버그 포트를 사용한다는 것입니다. 특히 IDCODE 명령으로 장치 ID를 읽는 것이 좋습니다. 일부 사이트에서는 IDCODE가이 장치의 b0001 또는 b1110 일 수 있지만 둘 다 작동하지 않는 것으로 보입니다. b0001은 TAP이 재설정 된 후 IR에서 읽은 값인 것처럼 나에게 더 많이 들릴 것 같습니다.Cortex-M3에 대한 장치 별 JTAG 명령어는 어디에서 찾을 수 있습니까?

나는 또한 내가 사용하고있는 지시가 정확하다는 가능성을 생각했다. 나는 장치 ID 레지스터를 제대로 읽지 못했다. 나는 FTDI 케이블을 FT232H 칩과 함께 사용하고 있으며, 사용중인 어플리케이션은 MPSSE 명령을 사용하여 FTDI의 AN129 예제 코드 (link)를 기반으로합니다. 나는 TAP에서 데이터를 클럭하기 위해 0x2A 명령을 사용하고, TAP에 데이터를 클럭하기 위해 0x1B 명령을, 그리고 동시에 둘 모두를 수행하기 위해 0x3B 명령을 사용한다. 누구든지 내가 뭘 잘못하고 있는지 (또는 내가 올바른 IDCODE 명령을 사용하고 있는지)에 대한 통찰력을 제공 할 수 있다면 많은 도움이 될 것입니다.

* 편집 : 나는 약간의 진전을 이루었지만 IDCODE 명령은 여전히 ​​나를 벗어난다. TAP 컨트롤러를 Test-Logic-Reset 상태 (IR에서 IDCODE 명령을로드)로 설정 한 후 Device ID를 읽었습니다. 그러나 가능한 모든 (16) 명령을 시도하고 그 중 일부가 DR에서 다른 읽기를 얻었지만 아무도 장치 ID 레지스터를로드하지 않았습니다.

이 I는 TAP 컨트롤러 시프트-IR 상태가되면, 상기 명령을 삽입하기 위해 사용하는 함수이다 : 길이 매개 변수가 4로 설정되어

int clockOut(FT_HANDLE* ftHandle, BYTE data, BYTE length) 
{ 
    FT_STATUS ftStatus = FT_OK; 
    BYTE byOutputBuffer[1024];  // Buffer to hold MPSSE commands and data to be sent to the FT232H 
    DWORD dwNumBytesToSend = 0;  // Index to the output buffer 
    DWORD dwNumBytesSent = 0;  // Count of actual bytes sent - used with FT_Write 

    byOutputBuffer[dwNumBytesToSend++] = 0x1B; 
    // Clock data out through Shift-DR 
    byOutputBuffer[dwNumBytesToSend++] = length - 1; 
    // Number of clock pulses = (length - 1) + 1; This way, the length given as the parameter of the function is the actual number of clock pulses. 
    byOutputBuffer[dwNumBytesToSend++] = data; 
    // Shift out data 
    ftStatus = FT_Write(*ftHandle, byOutputBuffer, dwNumBytesToSend, &dwNumBytesSent); 
    // Send off the TMS command 
    return ftStatus; 
} 

는, 데이터 파라미터 (0x0X로 설정된 X에 대한 모든 가능한 값을 시도했으나 성공하지 못했습니다.)

답변

0

나는 그럭저럭 작동 할 수있었습니다. 문제는 내가 IR에 4 비트를 전송했을 때 실제로 5를 수신했다는 것입니다. 전송을 마친 후 TCK의 다음 상승 에지가 TAP 컨트롤러의 상태를 변경하기로되어 있었지만 여전히 Shift-IR 상태에서는 상태를 변경했을뿐만 아니라 TDI를 샘플링하고 다른 다섯 번째 이동을 수행했습니다. 이 문제를 해결하기 위해 명령의 하위 3 비트 만 이동 한 다음 0x4B MPSSE 명령을 사용하여 TMS 신호를 동시에 클럭 아웃 (상태 변경)하고 명령의 MSB를 보냈습니다.

관련 문제