2

JTAG を介して Cortex-M3 ベースのマイクロコントローラー (LPC1769) と通信しようとしています。必要なハードウェアは既に用意されており、サンプル プログラムを動作させることができましたが、さらに先に進むには、この場合に使用できるデバイス固有の JTAG 命令を知る必要があります。Cortex-M3 テクニカル リファレンス マニュアル (リンク)の対応するセクションを読んだところ、デバイスが標準の CoreSight デバッグ ポートを使用していることがわかりました。特に、IDCODE命令でデバイスIDを読みたいです。一部のサイトでは、このデバイスの IDCODE は b0001 または b1110 であると示唆されていますが、どちらも機能していないようです。b0001 は、TAP がリセットされた後に IR から読み取った値であるため、私には可能性が高いようです。

また、使用している命令が正しく、デバイス ID レジスタを正しく読み取っていない可能性も考えました。FT232H チップを搭載した FTDI ケーブルを使用しています。使用しているアプリケーションは、MPSSE コマンドを使用した FTDI の AN129 サンプル コード (リンク) に基づいています。0x2A コマンドを使用して TAP からデータをクロック入力し、0x1B コマンドを使用してデータを TAP にクロック出力し、0x3B コマンドを使用して両方を同時に実行します。私が間違っていること(または正しいIDCODE命令を使用しているかどうか)について、誰かが洞察を提供できれば、それは大歓迎です。

*編集: ある程度の進歩はありましたが、IDCODE 命令はまだわかりません。TAP コントローラーを Test-Logic-Reset 状態 (IR に IDCODE 命令をロード) に設定した後、デバイス ID を読み取ることができました。ただし、考えられるすべての (16) 命令を試しましたが、DR からの読み取りが異なるものもありましたが、デバイス ID レジスタをロードしたものはありませんでした。

これは、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;
}

length パラメーターは 4 に設定され、data パラメーターは 0x0X に設定されています (X のすべての可能な値を試しましたが、どちらも成功しませんでした)。

4

1 に答える 1