最終更新:2014-09-30 (火) 04:51:19 (3488d)
USB/エニュメレーション
シーケンス
USB/標準リクエスト 処理 メモ ホスト(またはハブ)はデータ信号線上で装置のプルアップ抵抗により新規装置の接続を検知します。
ホストはプラグが完全に挿入され、装置への安定給電を可能とするため、最低100ms待機します。
ホストは装置を既定状態に置くためにリセットを送出します。これで装置は既定のアドレス0で応答できるようになります。GET_DESCRIPTOR(DEVICE) Windowsのホストはデバイスディスクリプタの先頭64バイトを要求します。
デバイスディスクリプタの最初の8バイト受信後直後、更にバスリセットを行います。デバイスによっては18バイト返す SET_ADDRESS ホストは装置をアドレス指定状態にするアドレス設定命令を送出します。 GET_DESCRIPTOR(DEVICE) ホストはデバイスディスクリプタの18バイト全体を要求します。 GET_DESCRIPTOR(CONFIGURATION) そして容量関係を決めるためにコンフィグレーションディスクリプタの9バイトを要求します。 GET_DESCRIPTOR(CONFIGURATION) ホストはコンフィグレーションディスクリプタの255バイトを要求します。 GET_DESCRIPTOR(STRING) それらで指定されているなら、ホストは対応するストリングディスクリプタを要求します
例
HIDデバイスの場合
- 例:Unifyingレシーバー
リクエスト 要求バイト 応答バイト メモ GET_DESCRIPTOR(DEVICE) 64 8 64バイト要求して8バイト帰ってきたらリセット SET_ADDRESS GET_DESCRIPTOR(DEVICE) 18 18 コンフィグレーション=1つだけ GET_DESCRIPTOR(CONFIGURATION) 255 84 ?全体が返ってる GET_DESCRIPTOR(STRING) 255 4 LANG IDリクエスト GET_DESCRIPTOR(STRING) iProduct? GET_DESCRIPTOR(DEVICE_QUALIFIER) 10 8 エラー GET_DESCRIPTOR(DEVICE) 18 18 GET_DESCRIPTOR(CONFIGURATION) 9 9 wTotalLength=84、bNumInterfaces?=3。 GET_DESCRIPTOR(CONFIGURATION) 84 84 コンフィグレーション+(インターフェイス+HID+エンドポイント)*3 SET_CONFIGURATION(1) コンフィグレーション1に切り替え SET_IDLE GET_DESCRIPTOR(REPORT) 123 59 wIndex=0 SET_IDLE GET_DESCRIPTOR(REPORT) 212 148 wIndex=1 GET_STATUS GET_DESCRIPTOR(REPORT) 98 98 wIndex=2 SET_REPORT 何かをデバイスに送信
UVCデバイスの場合
- 例
リクエスト 要求バイト 応答バイト メモ GET_DESCRIPTOR(DEVICE) 64 18 64バイト要求して8バイト帰ってきたらリセット。なんか18バイト帰ってきた SET_ADDRESS GET_DESCRIPTOR(DEVICE) 18 18 コンフィグレーション=1つだけ GET_DESCRIPTOR(CONFIGURATION) 255 255 wTotalLength=1197、bNumInterfaces?=4。 GET_DESCRIPTOR(CONFIGURATION) 1197 1197 57ディスクリプタ。コンフィグレーション+IAD+(インターフェイス、VC_HEADER、VC_OUTPUT_TERMINAL、VC_EXTENSION_UNIT、VC_INPUT_TERMINAL、VC_PROCESSING_UNIT、エンドポイント) GET_DESCRIPTOR(STRING) 255 4 LANG IDリクエスト GET_DESCRIPTOR(STRING) iProduct? GET_DESCRIPTOR(DEVICE) 18 18 GET_DESCRIPTOR(CONFIGURATION) 9 9 wTotalLength=1197、bNumInterfaces?=4。 GET_DESCRIPTOR(CONFIGURATION) 1197 1133 47ディスクリプタ。最後の方謎データ。 SET_CONFIGURATION(1) コンフィグレーション1に切り替え SET_INTERFACE wIndex=1 SET_INTERFACE wIndex=3 GET_DESCRIPTOR(STRING) iFunction? GET_DESCRIPTOR(STRING) iFunction? SET_INTERFACE wIndex=1 GET_LEN 2 2 ControlSelector?=1 GET_INFO 1 1 ControlSelector?=1 GET_MIN? 4 4 ControlSelector?=1 GET_MAX? 4 4 ControlSelector?=1 GET_RES? 4 4 ControlSelector?=1 GET_DEF 4 4 ControlSelector?=1