2017-03-29 11 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命令をロードする)に設定した後、デバイス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の可能な値を試してみましたが、いずれも成功に至りませんでした)

答えて

0

私はそれをうまく動作させることができました。問題は、IRに4ビットを送信したときに、実際には5を受信したということでした。送信が完了したら、TCKの次の上昇エッジがTAPコントローラの状態を変更するはずでしたが、 Shift-IR状態では、状態を変更しただけでなく、TDIをサンプリングし、別の(5番目の)シフトを行いました。これを打ち消すために、命令の下位3ビットをシフトした後、0x4B MPSSEコマンドを使用して、(状態を変更するために)TMS信号を同時にクロックアウトし、コマンドのMSBを送出しました。

関連する問題