回路 JTAG (IEEE1149.1)

Joint Test Action Group (IEEE1149.1-2013) FPGAやARMプロセッサや電子回路等のプログラムやデバッグ用の通信規格。 1987年にVersion1.0が発表された。

実際の回路を作る時の為に調べたのをまとめてあります。 まだ完全ではないですが、適宜追加していこうと思います。

信号

  • TDI : Test Data In
  • TDO : Test Data Out
  • TCK : Test Clock
  • TMS : Test Mode Select
  • VDD:基板のVrefに接続。 PCやアダプタ側から電源供給しない。
  • GND : Signal Ground
  • 信号線のピンアサイメントは基板によって異なるので要注意。

TDI, TDO, TCK, TMSは通信していない時は全ての信号線の状態はプルアップされていてHi。 プルアップは3.3V時 4.7k~10kΩを使用。

TRSTはデバイスによって異なる。 プルダウンが必要の場合もある。3.3V時 4.7k~10kΩを使用。

電圧、スピード、ピンアサイメント、

IEEE1149.1規格で定義されていないので、各デバイスメーカがデバイス毎に独自で定めている。 スピードは高速タイプで120MHzがあるが、ノイズの影響もあるので通常使用では10MHz程度。

基板上の複数のデバイスをJTAGに配線する回路(非常に良い。 基本回路や絶縁回路など含め、更に詳細情報を分かりやすく解説されている。)

TAP(Test Access Port) コントローラ

電子部品側に組み込まれたJTAG通信用のコントローラ。 JTAGの信号でTMSで状態(State)を変える事によってデータを読みこんだり書き込んだりを制御。

信号

  • TRST : Test Reset — TAPコントローラを初期化する専用ピン。 TMSがH状態でTCK立上りエッジ5回でも初期化できる(IEEE1149.1規格)。
  • SRST : System Reset システムリセット。 無い場合ある。 ある場合は必ずプルアップ抵抗が必要。
  • RTCK : ARM core専用のピン。 Adaptive Clock機能でTCKの周波数を自動で合わせる。
  • Vref : Voltage Reference ターゲットの電源電圧を取得する為のピン。

用語

  • BSR : Boundary Scan Register
    • ICのピンの状態等をスキャンしたデータを保持するレジスタ
  • IR : Instruction Register
    • 命令を保持するレジスタ?
  • DR : Data Register

バウンダリースキャン

  • ICのピンの状態を取得したり制御する技術
  • I/Oピンの手前にいるScan Cell(Shift Register)の値を使ってポートの状態を読書、または制御する。
  • JTAGの生い立ちはチップのバウンダリースキャンアーキテクチャとそれにアクセスする為のシリアルポートの規格。 ボードのテスト用だった。
https://www.cqpub.co.jp/dwm/contents/0027/dwm002700200.pdfから引用

その他よく出る用語(まだ分からないところがあります)

  • DAP —Debug Access Port, SoC外部からのアクセスを複数のAP(Access Port)に接続する。 Physical Interfaceは通常JTAG。
  • Cross Trigger Interface
  • opcode
  • MEM-AP ポートーーーMemory Access Port?
  • gdb : GNU Project Debugger GNUプロジェクトが開発したUnix系システムで動作するデバッグ用フリーソフト。
  • openOCD : Open on-Chip Debugger ICEの代わりに使用される。

ステートマシン

TMS信号によって何を実行するかを順番に切替て言っています。 全部で16の状態があります。 電源を入れた時の最初の状態は『Run-Test/Idle』のアイドル状態でTMS信号がLow(1)になるのを待ちます。 The JTAG Test Access Port (TAP) State Machine 英語ですが、このページが良く書かれています。 下の図はこのサイトからの引用です。 JTAGのアーキテクチャなどいろいろ説明されています。

Raspberry PiのJTAG有効化

  • config.txtにenable_jtag_gpio=1 を書込む。 arm_64bit=1 でなければならないかもしれない。
  • ARM-USB-TINY-H ケーブルが良く使われている
  • Raspberry Pi Picoの場合
    • JTAGはJTAG-SWDに対応しておらず、このケーブルはJTAG-SWDのSWDIO信号をJTAG信号に適宜振り分ける。
    • Pico–> ARM-JTAG-SWDの場合
      • SWDIO–>SWDIO(7)
      • SWDCLK –>SWDCLK(9)
      • GND –> GND (4,6,8,10,12,14,16,18,20)
      • VSYS –> VCC(1)
    • Picoの場合、Pico SDKのOpenSDKを使い、同梱のOpenOCDを使用
  • Raspberry Pi 4Bの場合
    • RPi4B–>ARM-USB-TINY-Hとの接続
      • TRST 15 => 3
      • RTCK 16 => 11
      • TDO 18 => 13
      • TCK 22 => 9
      • TDI 37 => 5
      • TMS 13 => 7
      • VTref 1 or 17 => 1
      • GND 6,9,14,20,25,30,34,39 => 4,6,8,10,12,14,16,18,20

JTAG-USBケーブル(参考)

  • JTAG-USB Type-A 変換ケーブル(Diligent製 JTAG-HS2) —Clock初期値10MHz 最大20MHz
  • ARM-USB-TINY-H

参考

コメント