最終更新:2022-08-23 (火) 08:05:23 (778d)
USB/ディスクリプタ
USBデバイスの機能・属性を示すデータの集合体
概要
- 全USBクラス共通のUSB/標準ディスクリプタ
- デバイスクラス別のUSB/クラスディスクリプタ
- USB/ベンダディスクリプタ?というのもある
取得方法
- コントロール転送 (エンドポイント0)でUSBの標準リクエストのコマンドを使って取得
- GET_DESCRIPTOR(bDescriptorType)
- USB/標準リクエストのbRequest = 0x06
- 引数によって戻り値のタイプが違う。
USB/標準ディスクリプタ
名前 英語 bDescriptorType メモ デバイスディスクリプタ DEVICE 1 VIDとかPIDとかのデバイス情報 コンフィグレーションディスクリプタ CONFIGURATION 2 USBのコンフィグレーション情報 ストリングディスクリプタ STRING 3 文字テーブル インターフェイスディスクリプタ INTERFACE 4 インターフェイスの情報 エンドポイントディスクリプタ ENDPOINT 5 エンドポイントの情報
親子関係
デバイスディスクリプタ └コンフィグレーションディスクリプタ └インターフェイスディスクリプタ └エンドポイントディスクリプタ
デバイスディスクリプタ (bDescriptorType=1) 18バイト固定
- USBデバイスなら必須。デバイスに1つだけ
- デバイスのplug-in時の一番初めに取得される。18バイト固定
- USBクラス (bDeviceClass)
- USBサブクラス (bDeviceSubClass)
- VID/PID
- コンフィグレーションディスクリプタの数の情報
- など
コンフィグレーションディスクリプタ (bDescriptorType=2) 9バイト固定
- デバイスの構成情報を記述
- 構成の番号とかインタフェース(インターフェイスディスクリプタ)の数。
ストリングディスクリプタ (bDescriptorType=3) 可変サイズ
- デバイスディスクリプタで使われている文字列を定義
インターフェイスディスクリプタ (bDescriptorType=4) 9バイト
- デバイスの機能を表すためのディスクリプタ
- インターフェイス自身の番号
- USBクラス
- サブクラス
- プロトコル情報
- エンドポイントの数
エンドポイントディスクリプタ (bDescriptorType=5) 7バイト固定
- エンドポイントのデータ転送種別、転送方向、パケットサイズ、ポーリング時間
USB 2.0で追加
名前 英語 bDescriptorType メモ デバイスクオリファイアディスクリプタ DEVICE_QUALIFIER? 6 Hi-Speed USB をサポートする場合、必要 アザースピードコンフィグレーションディスクリプタ OTHER_SPEED_CONFIGURATION? 7 Hi-Speed USB をサポートする場合、必要
標準以外のディスクリプタ
USB 2.0のECNとかで追加
インターフェイスパワーディスクリプタ INTERFACE_POWER? 8 Microsoft の拡張仕様 OTGディスクリプタ 9 OTGの仕様で定義 DEBUG 10(0x0A) インターフェイスアソシエーションディスクリプタ 11(0x0B) 複合デバイス設定,UVCで定義 BOSディスクリプタ BOS? (Binary Device Object Store) 15(0x0F) デバイスキャパビリティディスクリプタ?指定,LPMサーポートに必要,USB 2.0のECNで定義 デバイスキャパビリティディスクリプタ? DEVICE_CAPABILITY? 16(0x10) Super Speed/High Speed時のLink Message対応通知,LPMサーポトに必要,USB 2.0のECNで定義
USB 3.0で追加
SUPERSPEED_USB_ENDPOINT_COMPANION? 0x30 Burst転送最大長
USB/クラスディスクリプタ
HID/ディスクリプタ
- HID クラスのファンクションには、他の USB ファンクションがもっているディスクリプタ情報に加え下記のディスクリプタが必要。
親子関係
デバイスディスクリプタ └コンフィグレーションディスクリプタ └インターフェイスディスクリプタ └HIDディスクリプタ | └レポートディスクリプタ | └フィジカルディスクリプタ └エンドポイントディスクリプタ
HIDディスクリプタ (bDescriptorType=0x21)
- レポートディスクリプタとフィジカルディスクリプタをまとめる働き
- クラスディスクリプタ数
- クラスディスクリプタのサイズ
- クラスディスクリプタの型
- レポートディスクリプタ (0x22)
- フィジカルディスクリプタ (0x23)
レポートディスクリプタ
- HIDデバイスからホストに通知するデータのフォーマットを定義