BIP AbstractJTAGProtocol
このページではBIP(Bitcoin Improvement Proposal)について説明します。 BIPの詳細と作成方法については、BIP 2を参照してください。 wikiページを作成するだけではありません。
BIP:? タイトル:Abstract JTAG Protocol 著者:Luke Dashjr <luke + bipmhbp@dashjr.org> ステータス:下書き タイプ:標準トラック 作成日:14-07-2012 </ pre>目次
- 1 要約
- 2 仕様
- 2.1 パケットフォーマット
- 2.2 コマンドフォーマット
- 2.3 コマンド
- 2.3.1 <tt> c0 </ tt> - 時計
- 2.3.2 <tt> c1 </ tt> - 読み書きレジスタ
- 2.3.3 <tt> c2 </ tt> - リセット
- 2.3.4 <tt> c3 </ tt> - 実行
- 2.3.5 <tt> e0 </ tt> - ping
- 2.3.6 <tt> e1 </ tt> - デバイス数を取得する
- 2.3.7 <tt> e2 </ tt> - ハードウェアバージョン
- 2.3.8 <tt> e3 </ tt> - ソフトウェアバージョン
- 2.3.9 <tt> e4 </ tt> - デバイス機能
- 2.3.10 <tt> e5 </ tt> - watch / poll
要約
仕様
このプロトコルは、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までの時間