私は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命令をロードする)に設定した後、デバイス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;
}
長パラメータが4に設定され、データパラメータが(0x0Xに設定されていますXの可能な値を試してみましたが、いずれも成功に至りませんでした)