2線匏JTAGプロトコルを分解したす





2線匏JTAG2線匏JTAG、別名CompactJTAG、別名cJTAGは、IEEE 1149.7-2009暙準の䞀郚である新しい圢匏のむンタヌフェヌスです。 通垞のJTAGIEEE 1149.1ず同じ機胜を提䟛したすが、4぀ではなく2぀の信号のみを䜿甚したす。



残念ながら、むンタヌネットのロシア語圏でも英語圏でも、マヌケタヌによっお曞かれたいく぀かの蚘事を陀いお、この暙準に関する情報はありたせん。 それにもかかわらず、しばらく前、矩務の問題ずしお、私はこの基準に察凊しなければなりたせんでしたが、今、あなたは私の研究の結果を知るナニヌクな機䌚を持っおいたす。



通垞のJTAGに粟通しおいるこずを前提ずしおいたす。 ここで蚘憶をリフレッシュできたす habrahabr.ru/post/190012



IEEE 1149.7ず2線匏JTAGは同矩語であるずしばしば信じられおいたす。 実際、IEEE 1149.7には2぀ず4぀の信号の䞡方を䜿甚するモヌドが含たれおいるため、これはそうではありたせん。 したがっお、2線匏JTAGはIEEE 1149.7のサブセットです。



公匏には、IEEE 1149.7は瞮小ピンおよび拡匵機胜のIEEE暙準ず呌ばれおいたす。 IEEE 1149.7は2線匏テクノロゞヌに加えお100の新機胜も提䟛しおいるずいう事実にもかかわらず、私の経隓では、開発者を最も惹き付ける2本の足をチップ本䜓に保存する機䌚です。



残念ながら、IEEE 1149.7の䜜成者は䜕の察策もなしにハヌドドラッグを䜿甚しおいたため、巚倧な文曞が誕生したした。 ほが10倍に成長したずいう事実1037ペヌゞ察叀いJTAGの139に加えお、䜕も理解できないように曞かれおいたす。



ただし、ある日、4぀のJTAGレッグTCK、TMS、TDI、およびTDOの代わりに2぀TCKCおよびTMSC-最埌の「C」は「コンパクト」を意味するのマむクロ回路に盎面し、完成したもの䜿甚する゜フトりェアがない堎合は、䜕かをする必芁がありたす。



゚ンゞニアが身元䞍明のJTAGポヌトを備えたチップを目の前で芋たずきに通垞行うこず。 もちろん、どのデバむスがそれに接続されおいるかを把握しようずしたす。 IDCODEを読むず確認できたす。 通垞のJTAGの堎合、手順は簡単で、 www.fpga4fun.com / JTAG3.htmlで説明されおいるように芋えたす。

  1. たず、チェヌン内のデバむスの数を決定したす。

    • テストモヌドリセットに移動
    • Shift-IRに移動
    • チェヌン内のすべおのIRにTDIを介しお倚数のナニットどれだけ残念なこずに、たずえば1000をプッシュしたす。 バむパス内のすべおのデバむス
    • Shift-IRからShift-DRぞの移行
    • チェヌン内のすべおのDRでTDIを介しおれロの束どれだけ残念なこずに1000などを抌しお、それらをリセットしたす
    • DRのTDIナニットのプッシュを開始したす。 TDOからナニットを受け取ったらすぐに停止したす。 チェヌン内のデバむスの数は、撀回されたナニットの数ず同じです。
  2. 次に、デバむスごずにIDCODEを読み取りたす。

    • テストモヌドリセットに進みたす-結果ずしお、IDCODEレゞスタアドレスがすべおのIRに曞き蟌たれたす。
    • Shift-DRに移動
    • デバむスごずにTDOから32ビットを読み取りたすずころで、このためには、TDIに䜕かをプッシュする必芁がありたす。 TDOから読み取られる最初の32ビットはチェヌンの最埌のデバむスのIDCODE、次の32ビットは最埌から2番目のデバむスのIDCODEなどです。


最初は、2線匏JTAGを䜿甚しお同じこずを行う方法を瀺したかったのですが、この手順は䞀䟋ずしお少し長いこずがわかりたした。 そのため、JTAGチェヌンにデバむスが1぀しかなく、そのIDCODEレゞスタのアドレスがわかっおいるず仮定しお、単玔化するこずにしたした。 したがっお、IDCODEの読み取りは次のようになりたす。

  1. 呜什レゞスタヌIRにIDCODEアドレスを曞き蟌みたす。

    • Shift-IRに移動
    • Shift-IRで、IDCODEレゞスタアドレスをTDIにプッシュしたす
  2. IDCODEからデヌタを読み取りたす。

    • Shift-DRに移動
    • Shift-DRでは、32個の任意のビットをTDIにプッシュするず同時に、TDOを介しおIDCODEのコンテンツを取埗したす


明らかに、簡玠化された手順を実行できるので、同じコマンドを䜿甚するため、問題なく完党な手順を実装できたす。 ただし、2線匏JTAGにはないTDIおよびTDOがないず、䞊蚘のいずれも機胜したせん。 それらなしでどのように提案するのですか 非垞に簡単TMS、TDI、およびTDOを含むスキャンパケットは、TMSCを介しお送信されたす。 これは、2぀の連続したパケットの倖芳ですnTDIは、反転TDIが送信されおいるこずを意味したす。









実際、これは暙準で蚘述されおいる可胜な圢匏の1぀にすぎたせん-OScan1ず呌ばれたす。 たた、JScan、MScan、SScan、およびOScanは最倧8個です。 確かに、2線匏JTAGにはJScan0-3、MScan、Oscan0、およびOscan1のみが必芁です。



ここで、通垞のTMSずは異なり、TMSC信号は双方向であるこずに泚意する必芁がありたす。これは、各パケットでTMSずTDIが䞀方向に、TDOが他の方向に送信されるためです。



ただし、OScanパケットの転送を開始しようずするず、䞍快な驚きがありたす。 ぀たり、䜕も機胜したせん。 そしお、デフォルトでは、IEEE 1149.7をサポヌトするデバむスは1149.1暙準ずの互換モヌドいわゆる「暙準モヌド」-暙準モヌドにあり、そのようなパケットを受け入れないためです。 したがっお、OSを送信する前に、そのようなデバむスを目的の圢匏で動䜜するように構成し、「アドバンスモヌド」アドバンスモヌドにする必芁がありたす。



これを行う方法を䌝える前に、少し䜙談が必芁です。 IEEE 1149.7の開発における䞻な目暙の1぀は、既存のハヌドりェアずの互換性を確保するこずでした。これは垞に次のようなものです。









マむクロチップ開発者にJTAGロゞック党䜓のやり盎しを芁求する代わりに、暙準では、2線匏むンタヌフェヌスを通垞の4線匏むンタヌフェヌスに倉換するアダプタヌを远加するこずを掚奚しおいたす。









このアダプタヌには、TAP.7ず呌ばれる独自のテストアクセスポヌトTAPが含たれおいるため、通垞のTAP別名TAP.1ず区別できたす。 内郚のTAP.7コントロヌラヌはTAP.1ずたったく同じマシンですが、たずえば呜什レゞスタヌはありたせんが、TAP.1にはない他の倚くのレゞスタヌがあるなど、いく぀かの違いがありたす。



デフォルトでは、TAP.7は透過的です。 TCKC信号はTCKに盎接接続され、TMSCはTMSに接続されたす。 したがっお、TCKCおよびTMSCによっお送信されるすべおの信号は、TCKおよびTMSを倉曎せずに送信されたす。









明らかに、このモヌドでOscan1パケットを送信しようずするず、「nTDI」はTMSラむンを介しお送信される最初のビット、2番目のビットずしお「TMS」などずしおTAP.1コントロヌラヌによっお認識されたす。 そのため、パケットを送信する前に、TAP.7コントロヌラヌを「アドバンスモヌド」に移行する必芁がありたす。 これは、内郚TAPレゞスタの1぀に曞き蟌むこずで実行されたす。 構成䞭、TCKずTMSは無効になりたすTDIずTDOは以前に無効にされおいたす。









構成が完了するず、TCK、TMS、TDI、およびTDOはコントロヌラヌの内郚ロゞックによっお制埡されたす。









したがっお、「拡匵モヌド」に切り替えるプロセスず、IDCODEの埌続の読み取りは次のようになりたす。

  1. TAP.7およびTAP.1コントロヌラヌを初期化する
  2. TCKおよびTMSを無効にする
  3. 垌望の送信圢匏を遞択したす
  4. OScan、MScan、たたはSScan圢匏が遞択されおいる堎合は、「詳现モヌド」に切り替えたす
  5. TCK、TMS、TDI、TDOを接続したす
  6. 呜什レゞスタにIDCODEアドレスを蚘録したす
  7. IDCODEからデヌタを読み取る


TAPの初期化7。 ゚スケヌプリセット


TAP.7およびTAP.1マシンの状態を知るこずはできないため、䜜業を開始する前にリセットする必芁がありたす。 TAP.7コントロヌラをリセットするには、゚スケヌプリセットが䜿甚されたす。これは、暙準で定矩されおいる゚スケヌプシヌケンスのタむプの1぀です。 ゚スケヌプシヌケンスは、TMS倀がTCKのリヌディング゚ッゞからではなく非同期的に読み取られるずいう点で、他のすべおのJTAGコマンドず異なりたす。 TAP.7コントロヌラヌは、TCKCが倉曎されおいない間に到着したTMS信号の゚ッゞの数をカりントしたす。 前線の数によっお、゚スケヌプシヌケンスのタむプが決たりたす。 ゚スケヌプリセットの堎合、7぀以䞊にする必芁がありたす。









Escape Resetは、TAP.7をTest Logic Reset状態にしたす。 ゚スケヌプシヌケンスの利点は、TAP.1にたったく効果がないこずです。 TAP.1はTCKの立ち䞊がり゚ッゞでのみTMS倀を読み取るため、残りの時間にTMSがどうなるかは気にしたせん。

これは、オシロスコヌプ画面で゚スケヌプリセットがどのように衚瀺されるかで、 Digilent HS2 USB-JTAGアダプタが転送されたす。









ご芧のずおり、8぀の前線はすべお揃っおいたすが、6番目ず7番目の距離は疑わしいようです。 私はすでにDigilentに䞍満を蚀いたした-圌らはそれを修正するず玄束したした。



TAP.1の初期化


TAP.7の埌にTAP.1をリセットするために、暙準ではTMSCを介しお5぀のナニットを送信するこずを掚奚しおいたす絶察に他の状態からTAPコントロヌラヌをTest-Logic-Resetに転送するこずが保蚌されおいたす自分で確認できたす









Test-Logic-Resetに戻る予定はもうないので、5ナニット埌に0を送信し、それによっおマシンをRun-Test / Idle状態にするこずが理にかなっおいたす。 コントロヌラヌがTCKのリヌディング゚ッゞの瞬間にTMS倀を読み取り、これらの倀に埓っおマシンの状態を盎ちに倉曎するこずを思い出させおください。









TCKおよびTMSの無効化


TCMずTMSを無効にするには、TAP.7コントロヌラヌを制埡モヌド2に転送する必芁がありたす。合蚈で、コントロヌラヌは0から7たでの8぀の異なる制埡モヌドをサポヌトしたす。 制埡モヌド2に関心があるのは、コントロヌラのサヌビスレゞスタぞのアクセスのみが衚瀺されるためです。そのうちの1぀は、OScan1のパケット圢匏を倉曎する必芁がありたす。



制埡モヌド間の切り替えは、いわゆるれロビットDRシフトZBSを実行するこずにより順次実行されたす。 実行される各ZBSは、制埡モヌドを1぀ず぀増やしたす。 ゚スケヌプシヌケンスずは異なり、理論䞊、ZBSはTAP.1コントロヌラヌに圱響を䞎える可胜性がありたすが、実際にはこれはほずんどありたせん。 IEEE 1149.1芏栌の芳点から、れロビットDRシフトはたったく意味をなさないため、開発者は、2線匏JTAGの前に開発されたハヌドりェアも゜フトりェアも、ニヌズに応じおZBSを䜿甚しないこずを望みたした。 。 タむムラむンでは、ZBSは次のようになりたす。









ご芧のずおり、ZBSはRun-Test / Idle状態で開始および終了するため、最初のZBSを送信する前にEscape ResetおよびTest-Logic-Resetの埌にRun-Test / Idleに移動するこずを忘れないこずが重芁です。



目的のモヌドが遞択されたら、ロックLOCKする必芁がありたす。その埌、埌続のZBSはモヌドの遞択に圱響を䞎えるこずができなくなりたす。 LOCKはZBSずほずんど同じですが、Shift-DRに゚ントリがありたす









TAP.7ずは異なり、TAP.1の状態は倉曎されおいないこずに泚意しおください。 これは、ただ修正されおいない堎合でも、制埡モヌド番号が2になるずすぐにTCKずTMSが無効になるためです。

したがっお、制埡モヌド2に移行するには、次のものが必芁です。

  1. 2぀のZBSを送信する
  2. ロックを送信


フォヌマット遞択


コントロヌルモヌド2になったので、サヌビスレゞスタに曞き蟌むこずができたす。 この芏栌では、特別なコマンドによっお曞き蟌たれる倚くのレゞスタに぀いお説明しおいたす。 チヌムは2぀のグルヌプ2぀の郚分2぀の郚分からなるコマンドず3぀のセクション3぀の郚分からなるコマンドに分けられたすが、これらは考慮したせん。



2぀のセクションからなるチヌムの堎合、コマンドの番号は最初のセクションで送信され、デヌタは2番目のセクションで送信されたす。 䞡方のセクションは同じ方法で送信されたす。Run-Test/ Idle状態からShift-DRに移動しおから、Run-Test / Idleに戻りたす。 送信される倀は、Shift-DRで費やされるメゞャヌの数に等しくなりたす。

コマンド番号3に興味がありたす-STFMTストアスキャンフォヌマットは、2番目のセクションで送信される目的のフォヌマットOScan1の堎合は9の番号をSCNFMTスキャンフォヌマットレゞスタに曞き蟌みたす。



したがっお、最初のセクションでは3぀、2番目のセクションでは9぀を枡す必芁がありたす。 たず、Shift-DR状態の3぀のメゞャヌを埅機しおいるコマンド番号を曞き留めたすTAP.1状態は倉化しないため、衚瀺されたせん。









次に、デヌタを曞き蟌みたすShift-DR状態の9぀のメゞャヌ









SCNFMTレゞスタぞの曞き蟌みは、フォヌマット自䜓を倉曎したせん。 コントロヌラが圢匏を切り替えるためには、特別なチェックパケットを送信する必芁がありたす。



パケットを確認


怜蚌パッケヌゞは蚭定が正しいこずを確認し、すべおが正垞である堎合、コントロヌラヌはフォヌマットを切り替え、必芁に応じお「アドバンスモヌド」に切り替えたす。 IEEE 1149.7の他のすべおず同様に、テストスむヌトにはさたざたなオプションがありたす。 次のようなENDディレクティブを持぀パッケヌゞが必芁であるずいうそしお、それが䜕を意味するのかを尋ねないでくださいずいう私の蚀葉を受け入れなければなりたせん。









やあ、今は「アドバンスモヌド」で、぀いにOScan1を䜿えるようになりたした 「暙準モヌド」に戻るには、Test-Logic-Resetに移動したす。



TCK、TMS、TDI、TDOを接続したす


したがっお、私たちは「アドバンスモヌド」ですが、コントロヌルモヌド2のたたです。぀たり、TAP.1はただ無効であり、IDCODEを読み取るこずができたせん。 暙準では、制埡モヌドを終了する4぀の方法に぀いお説明しおいたす。

  1. Test-Logic-Resetに移動したす
  2. Select-IR-Scanに移動
  3. 2セクションのSTMCコマンドを䜿甚しお、ナニットをECLExit Control Levelレゞスタに曞き蟌む
  4. TAP.7コントロヌラヌの同期に関連する未知のこずを行うには


Test-Logic-Resetではできたせん。そうしないず、コントロヌラヌは「暙準モヌド」に戻りたす。 2セクションのコマンドを長時間送信したす。 ただし、Select-IR-Scanに進み、Test-Logic-Resetを経由せずにRun-Test / Idleに戻るのは非垞に簡単です-TMSを介しおシヌケンス011011を送信するだけですShift-IRを入力する必芁はありたせん。 JTAGでは、䞋䜍ビットが垞に最初に送信されるこずに泚意しおください。









赀い点は、コントロヌラヌがTMSC入力からTMSビットを読み取る堎所を瀺したす。 れロはTDIを介しお送信されたす぀たり、すべおのパケットで、nTDIビットは1に等しくなりたす。ただし、Shift-IR状態に入らないため、それらは無芖されたす。



ちなみに、「暙準モヌド」ずは異なり、TAP.7の状態は新しいTMSビットを受信した埌すぐには倉曎されず、OScan1パケットのTCKCの3番目最埌のリヌディング゚ッゞで倉曎されたすこれらの瞬間は図の黒い矢印で瀺されおいたす-これはコントロヌラがTDOビットをOScan1パケットに挿入しおホストに送信するように管理したすこの特定の堎合、コントロヌラはTDOでれロを返したす。



IDCODEの読み取り


TAP.1がTAP.7に再接続されたので、IDCODEレゞスタの内容を最終的に読み取るこずができたす。



IDCODEレゞスタアドレスは芏栌に蚘茉されおいないため、すべおのコントロヌラヌで異なりたす私の堎合は4ビットで0xCに等しい。 ナヌザヌの生掻を楜にするために、呜什レゞスタはTest-Logic-Reset状態のIDCODEアドレスで初期化されたす。 ただし、Capture-IR状態では、テスト䞭に開回路を怜出できるように、呜什レゞスタの内容が番号0x1で䞊曞きされたす呜什レゞスタの長さに関係なく、その最䞋䜍ビットが1に蚭定され、他のすべおがれロに蚭定されたす。 前の段階でCapture-IRに入ったため、IDCODEアドレスは既に䞊曞きされおいるため、最初に曞き換える必芁がありたす。



レゞスタアドレスを曞き蟌むには、Shift-IR状態に入り、TDIの䞋䜍ビットでアドレス0xCをプッシュする必芁がありたす。 同時に、その前に呜什レゞスタにあった倀、すなわち 0x1再び、最䞋䜍ビット順。 埓来の4線匏JTAG IEEE 1149.1の堎合、次のようになりたす。









そしお、これはOScan1パッケヌゞを䜿甚した堎合の倖芳です









赀い点はコントロヌラヌがTMSビットを読み取る堎所を瀺し、緑の点はTMSC入力からのnTDIビットを瀺したす。 玫色のドットは、OScan1パケットに挿入する前にコントロヌラヌがTDOビットを読み取る堎所を瀺したす。

矢印はいく぀かの䟝存関係を瀺しおいたす。たずえば、TMSおよびTDI信号はTCKCの察応する゚ッゞに沿っお倉化し、TDO信号はTCKの立ち䞋がり゚ッゞに沿っお倉化したす。



ここで残っおいるのは、Shift-DR状態に移行し、TDIで32ビットの任意のビットをプッシュし、IDCODEを含むTDOから32ビットを読み取るこずです。 あなたの蚱可を埗お、IDCODEの䞀時的な読曞図を提䟛したせん。



おわりに


IEEE 1149.7の機胜の玄5に぀いお説明したした。 それにもかかわらず、私はあなたがそれの根底にある原則に぀いお䜕らかの理解を持っおいるこずを願っおいたす。



この蚘事の図はすべお、Digilent HS2 USB-JTAGアダプタヌ、゜ヌスコヌドにアクセスできる垂販の2線匏JTAGコントロヌラヌ、FPGAデバッグボヌド、Xilinx ChipScopeロゞックアナラむザヌを䜿甚しお、実際のハヌドりェアでテストされおいたす。



シヌケンスを生成するためのプログラムは、 Digilent Adept SDKでダりンロヌドでき、LinuxずWindowsの䞡方で正垞に機胜するサンプルに基づいお、HS2のAPIを䜿甚しお䜜成されたした。



All Articles