BIP MinerHardwareBinaryProtocol

提供: tezos-wiki
移動先: 案内検索

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

  タイトル:専用マイニングハードウェアのプロトコル
  著者:Luke Dashjr <luke + bipmhbp@dashjr.org>
  ステータス:下書き
  タイプ:標準トラック
  作成:08-06-2012
 



仕様[編集]

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

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

1バイト:常にFE 1バイト:パケット長/タイプ Nバイト:パケットデータ 4バイト:パケットデータCRC32(データパケットのみ) パケット長/タイプ:

00 - 中止 01〜ef - データパケット長(1〜239バイト) f0〜fc - 予約済み fd - 不正なパケット(コマンドが中止されました) fe - ACK ff - コマンドの終わり 各250バイトのパケットに応答してACKを送信する必要があります。ビットストリームアップロードなどの一括データ転送は、パケットをもっと送信する前にACKが受信されるまで待つ必要があります(おそらくUSBがこれを処理しますか?)。

CRC32には、文字列 "mhbp"とパケット長/タイプバイトとすべてのデータを加えなければなりません。これは破損を防止するために使用されるものではありません(USBはこれを既に保証しています)。 CRC32が一致しない場合、デバイスは "fd"パケットを送り、コマンドを中止する必要があります。

ヌル・レングス・コマンド(すなわち、それに先行する有効なデータ・パケットのない「ff」)は、ACKで無視されなければなりません。

最初のFEまでは何も無視されます。

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

1バイト:リクエストID 1バイト:コマンドID Cx - 変更コマンド(潜在的に危険) Dx - 変更コマンドへの応答 例 - 情報コマンド Fx - 情報コマンドへの返信 1バイト:デバイス番号(一部のコマンドでは無視されます) 00はコントローラです 01〜feはマイニングデバイス 「すべてのマイニングデバイス」のためのff 1バイト:ステータス(要求は常に00にする必要があります) 00 - 成功 80 - 失敗 Nバイト:データ 4バイト未満のコマンドは無視する必要があります。予想以上の追加データは無視すべきである。

コマンド[編集]

c1 - プログラムソフトウェア[編集]

データ:

4バイト:ハードウェアバージョン(ビッグエンディアン) 2バイト:ハードウェア製造/権限 2バイト:ハードウェアモデル番号 4バイト:ハードウェア固有の情報(「IDコード」) 2バイト:ハードウェアコンポーネント 0000 - FPGAビットストリーム 0100 - JTAG抽象インタフェース 4バイト:ソフトウェアサイズ Nバイト:ソフトウェアデータ

c2 - クロック速度の取得/設定[編集]

データ:

4バイト:新しいクロック速度(Hz)(読み取り専用には省略) 00000000 - 許可された最小値 ffffffff - 許可される最大値 返信(取得と設定の両方):

4バイト:現在/新しいクロック速度

c3 - 新しい仕事を始める[編集]

データ:

1バイト:ビジーな挙動(既にジョブが走っている場合の対処方法) 00 - それを取り消し(そして待ち状態にあるすべてのジョブを保留)、直ちに新しいジョブを開始する 01 - エラー 02 - 現在のジョブが終了した後に実行するキュー (データはすべてのジョブをキャンセルして停止するためにここで終了することがあります) 1バイト:ジョブID 00 - 使用不可 Nバイト:ジョブデータ 標準のBitcoinカーネル(ただし、他のカーネルとは異なる場合があります): 32バイト:SHA256中間状態 4バイト:最後の32ビットのトランザクション・メークル・ルート 4バイト:ブロック時間ヘッダ 4バイト:コンパクトフォーマットのブロックターゲット( "ビット") 4バイト(オプション):最初の有効なノンス(省略した場合、00000000) 4バイト(オプション):last valid nonce(省略された場合、ffffffff) 2バイト(オプション):時間ヘッダを転記する回数(省略した場合、0000)

c4 - get / setレジスタ[編集]

データ:

2バイト:レジスタ番号 ffff - 有効な共有ナンス 値: 1バイト:ジョブID 00 - 不明 Nバイト:ノンス(標準Bitcoinカーネルの場合は4バイト) Nバイト:新しい値(読み込み省略) 返信(読んでいる場合):

Nバイト:現在の値

c5 - watch register[編集]

データ:

2バイト:レジスタ番号 1バイト:監視する時間(秒単位) 00 - 時計をキャンセル ff - 期限切れにならない 返信(すぐ):

Nバイト:現在の値 通知(条件が満たされ、コマンド= ffで同じ要求IDの場合):

2バイト:レジスタ番号 Nバイト:新しい値

e0 - ping[編集]

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

e1 - マイニングデバイス数を取得する[編集]

デバイス番号は無視されます。応答:

1バイト:マイニングデバイスの数

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

応答:

4バイト:ハードウェアバージョン(ビッグエンディアン) 2バイト:ハードウェア製造/権限 2バイト:ハードウェアモデル番号 4バイト:ハードウェア固有の情報(「IDコード」) 2バイト:プログラム可能なハードウェアコンポーネントの数 2 * Nバイト:ハードウェアコンポーネントID 1バイト:ハードウェアシリアル番号の長さ

Nバイト:ハードウェア