BIP AbstractJTAGProtocol

提供: tezos-wiki
2018年4月22日 (日) 20:55時点における240f:e2:7d6a:1:d58a:65ab:328b:a66a (トーク)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

このページではBIP(Bitcoin Improvement Proposal)について説明します。 BIPの詳細と作成方法については、BIP 2を参照してください。
wikiページを作成するだけではありません。

  BIP:?
  タイトル:Abstract JTAG Protocol
  著者:Luke Dashjr <luke + bipmhbp@dashjr.org>
  ステータス:下書き
  タイプ:標準トラック
  作成日:14-07-2012

要約[編集]

仕様[編集]

このプロトコルは、USBシリアルまたはUSB-CDCなどの低レベルプロトコルを信頼性の高い(エラー訂正を含む)ローカルデバイスに対してのみ使用できるように設計されています。

パケットフォーマット[編集]

  • 4バイト:magic:常に fd414a50 </ tt>
  • 1バイト:パケット長/タイプ
  • Nバイト:パケットデータ
  • 2バイト:パケットデータBSD "sum1" checksum

パケット長/タイプ:

  • <tt> 00 </ tt> - 中止
  • <tt> 01 </ tt>〜<tt> ef </ tt> - データパケットの長さ(1〜239バイト)
  • <tt> f0 </ tt>〜<tt> fc </ tt> - 予約済み
  • <tt> fd </ tt> - 不正なパケット(コマンドが中止されました)
  • <tt> fe </ tt> - ACK
  • <tt> ff </ tt> - コマンドの終了

239バイトのパケットごとにACKを送信する必要があります。ビットストリームのアップロードなどの一括データ転送は、パケットをさらに送信する前にACKが受信されるまで待機する必要があります。

チェックサムには、チェックサム自体まで完全なパケットを含める必要があります。これは破損を防止するためには使用されません(USBはこれを既に保証しています)。また外国から何かが送信されたとき(実際のAJPパケットと混在している可能性があります)チェックサムが一致しない場合、デバイスは "<tt> fd </ tt>"パケットを送り返して内容を無視する必要があります。

Abortパケットはコマンド全体を中止しますが、それが効果がないことを保証するものではありません。

最初の魔法までは無視されます。

コマンドフォーマット[編集]

  • 1バイト:要求ID
  • 1バイト:コマンドID
    • <tt> Cx </ tt> - JTAGインターフェースコマンド
    • <tt> Dx </ tt> - JTAGインターフェースコマンドへの返信
    • <tt> Ex </ tt> - JAPコントローラのコマンド
    • <tt> Fx </ tt> - JAPコントローラコマンドへの返信
  • 1バイト:デバイス番号(一部のコマンドでは無視されます)
    • <tt> 00 </ tt>はコントローラです
    • <tt> 01 </ tt>〜<tt> fe </ tt>はJTAGデバイス
    • "すべてのJTAGデバイス"の** <tt> ff </ tt>
  • 1バイト:ステータス(要求の場合は常に<tt> 00 </ tt>にする必要があります)
    • <tt> 00 </ tt> - 成功
    • <tt> 80 </ tt> - 失敗
  • Nバイト:データ

4バイト未満のコマンドは無視する必要があります。 予想以上の追加データは無視すべきである。

コマンド[編集]

<tt> c0 </ tt> - 時計[編集]

リクエストデータ:

  • 1バイト:ビットフィールド(ビット単位OR)
    • <tt> 10 </ tt> - TDIステータスを返す
    • <tt> 01 </ tt>〜<tt> 03 </ tt> - 最後に無視するクロック数
  • Nバイト:クロックあたり2ビット
    • 1ビット:TMSハイ
    • 1ビット:TDO高

返信データ(読んでいる場合のみ):

  • Nバイト:1クロックあたり1ビット
    • 1ビット:TDIハイ

<tt> c1 </ tt> - 読み書きレジスタ[編集]

ビッグエンディアンのビット順でデータの書き込み/読み出しが行われることに注意してください。つまり、最初に読み書きされるビットは<tt> 80 </ tt>、<tt> 40 </ tt>などとなります。 8ビットの倍数を使用していない場合でもこれは当てはまります。たとえば、7ビットすべてを読むと<tt> fe </ tt>、<tt> 7f </ tt>となります。

リクエストデータ:

  • 1バイト:ビット値(ビット単位またはビット単位)
    • モード:
      • <tt> 00 </ tt> - 既に起動しているr / wを続ける
      • <tt> 80 </ tt> - DRレジスタのr / w開始
      • <tt> 40 </ tt> - IRレジスタのr / wを開始する
    • <tt> 20 </ tt> - 仕上げr / w
    • <tt> 10 </ tt> - 読み取り+書き込み(デフォルトは書き込みのみ)
    • <tt> 01 </ tt>〜<tt> 07 </ tt> - 最後のNビットのデータをしない
  • Nバイト:書き込みデータ

返信データ(要求と並行する可能性があります):

  • Nバイト:データ読み出し(読み出し+書き込み要求がセットされている場合のみ)

<tt> c2 </ tt> - リセット[編集]

(リクエストまたは返信データなし)

<tt> c3 </ tt> - 実行[編集]

リクエストデータ:

  • 1バイト:実行する反復回数

<tt> e0 </ tt> - ping[編集]

デバイス番号は無視されます。 リクエストと同じデータで返信

<tt> e1 </ tt> - デバイス数を取得する[編集]

デバイス番号は無視されます。 デバイスにアクセスする前に必要な場合があります。

返信データ:

  • 1バイト:デバイス数
  • Nバイト:
    • 1バイト:デバイスID番号

<tt> e2 </ tt> - ハードウェアバージョン[編集]

注:コントローラでのみ動作することが予想されます

返信データ:

  • 4バイト:ハードウェアバージョン(ビッグエンディアン)
  • 2バイト:ハードウェアベンダID権限
    • <tt> 0000 </ tt> - USB
    • <tt> ffff </ tt> - アドホック
  • 1バイト:ハードウェアベンダーIDの長さ
  • Nバイト:ハードウェアベンダーID(バイナリ)
  • 1バイト:ハードウェアデバイスIDの長さ
  • Nバイト:ハードウェアデバイスID(バイナリ)
  • 1バイト:ハードウェアシリアル番号の長さ
  • Nバイト:ハードウェアシリアル番号(UTF-8)
  • 1バイト:人間が読めるハードウェアモデルの長さ
  • Nバイト:人間が読めるハードウェアモデル/バージョン文字列(UTF-8)

<tt> e3 </ tt> - ソフトウェアバージョン[編集]

注:コントローラでのみ動作することが予想されます

返信データ:

  • 4バイト:ソフトウェアバージョン(ビッグエンディアン)
    • <tt> ffffffff </ tt> - 不明
  • 1バイト:ソフトウェア固有の一意識別子の長さ(git commit?)
  • Nバイト:ソフトウェア固有の一意の識別子
  • 1バイト:人間が読めるソフトウェア名の長さ
  • Nバイト:人間が読めるハードウェアモデル/バージョン文字列(UTF-8)
  • 2バイト:サポートされているAJP機能の数

<tt> e4 </ tt> - デバイス機能[編集]

返信データ:

  • 2 * Nバイト:サポートされている機能
    • <tt> c000 </ tt> - JTAGプロトコルコマンド
    • <tt> e50x </ tt> - 最大同時並行時計数のwatch / pollコマンド

<tt> e5 </ tt> - watch / poll[編集]

リクエストデータ:

  • 1バイト:watcまでの時間