Где я могу найти инструкции JTAG для конкретного устройства для Cortex-M3?

Я пытаюсь связаться с микроконтроллером на базе Cortex-M3 (LPC1769) через JTAG. У меня уже есть необходимое оборудование, и я смог заставить пример программы работать, но для дальнейшего продвижения мне нужно знать инструкции JTAG для конкретного устройства, которые доступны в этом случае. Я прочитал соответствующий раздел технического справочного руководства Cortex-M3 ( ссылка), и все, что мне было сказано, это то, что устройство использует стандартный порт отладки CoreSight. В частности, я хотел бы прочитать идентификатор устройства с помощью инструкции IDCODE. Некоторые сайты предполагают, что IDCODE может быть b0001 или b1110 для этого устройства, но ни один из них, похоже, не работает. b0001 мне кажется более вероятным, так как это значение, которое я прочитал с IR после сброса TAP.

Я также рассмотрел возможность, что инструкция, которую я использую, является правильной, и я просто не читаю регистрацию идентификатора устройства должным образом. Я использую кабель FTDI с чипом FT232H, и приложение, которое я использую, основано на примере кода FT12 от AN129 ( ссылка), используя команды MPSSE. Я использую команду 0x2A для синхронизации данных из TAP, команду 0x1B для синхронизации данных в TAP и команду 0x3B для одновременной работы. Если бы кто-нибудь мог дать некоторое представление о том, что я делаю неправильно (или я вообще использую правильную инструкцию IDCODE), это было бы очень ценно.

* РЕДАКТИРОВАТЬ: я сделал некоторый прогресс, но инструкция IDCODE все еще ускользает от меня. Мне удалось прочитать идентификатор устройства после установки контроллера TAP в состояние Test-Logic-Reset (которое загружает инструкцию IDCODE в IR). Тем не менее, я перепробовал все возможные (16) инструкции, и хотя некоторые из них приводили к различным чтениям из DR, ни одна из них не загружала регистр идентификатора устройства.

Это функция, которую я использую для вставки инструкции, когда контроллер TAP находится в состоянии Shift-IR:

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;
}

Параметр длины установлен в 4, а параметр данных установлен в 0x0X (где я перепробовал все возможные значения для X, ни одно из которых не привело к успеху)

1 ответ

Решение

Мне удалось заставить его работать. Проблема заключалась в том, что когда я отправил 4 бита в ИК-порт, он фактически получил 5. После завершения передачи следующий передний фронт TCK должен был изменить состояние контроллера TAP, но, поскольку он все еще находился в Состояние Shift-IR, оно не только изменило состояние, но и произвело выборку TDI, и сделало еще одну (пятую) смену. Чтобы противостоять этому, я только сдвинул младшие 3 бита инструкции, а затем использовал команду MPSSE 0x4B, чтобы одновременно отключить сигнал TMS (для изменения состояния) и отправить MSB команды.

Другие вопросы по тегам