最終更新:2015-07-13 (月) 18:59:26 (3376d)
USB/HID
メモ
- コントロール転送とインタラプト転送をサポート
- ロースピードとハイスピードをサポート。(たぶんフルスピードもOK)
- This specification applies to both high-speed and low-speed HID class devices.
速度
USB.orgのドキュメント
- http://www.usb.org/developers/hidpage/
- Device Class Definition for Human Interface Devices
- HID Usage Tables
転送モード
- コントロール転送とインタラプト転送をサポート
- A HID class device communicates with the HID class driver using either the Control (default) pipe or an Interrupt pipe.
コントロール転送(エンドポイント0、双方向)
- Receiving and responding to requests for USB control and class data.
- Transmitting data when polled by the HID class driver (using the Get_Report request).
- Receiving data from the host.
インタラプト転送
- Receiving asynchronous (unrequested) data from the device.
- Transmitting low latency data to the device.
- インタラプトIN(デバイス→ホスト):必須
- インタラプトOUT(ホスト→デバイス):オプション
- インタラプトOUTが宣言されてない場合、OutputレポートはSet_Report(Output)を使ってエンドポイント0にコントロール転送で送られる。
- If no Interrupt Out endpoint is declared then Output reports are transmitted to a device through the Control endpoint, using Set_Report(Output) requests.
パケットサイズ
転送の種類 USB 1.1 LS USB 1.1 FS USB 2.0 USB 3.0 定義場所 コントロール転送 8 8/16/32/64 64 512 デバイスディスクリプタのbMaxPacketSize0 インタラプト転送 8 0〜64 0〜1024(HIDは最大64) 0〜1024 エンドポイントディスクリプタのwMaxPacketSize
転送間隔
- エンドポイントディスクリプタのbInterval
転送 ロースピード フルスピード ハイスピード スーパースピード インタラプト転送 10~255 [ms] 1~255 [ms] 1~16。2のn-1乗 x125 [μs] (125μs〜4.096s)
インタラプト転送で最低限保証されるパケット数とその間隔
ロースピード フルスピード ハイスピード スーパースピード 1/10ms 1/1ms 3/125us 3/125us
最大転送速度
- USB 2.0およびUSB 3.0仕様に準拠するために、デフォルトインターフェイスでのインタラプトエンドポイントは64KB/sを超えて要求してはいけない。(USB 2.0仕様P49)
- 超えるためには代替インターフェイス(USB/代替設定)が必要になるが、そうなると独自ドライバが必要になる。
- 1フレームで1024バイト以上送るには広帯域エンドポイントのサポートが必要だがWindowsでは未サポート(Windows 7でも)
転送 ロースピード フルスピード ハイスピード スーパースピード インタラプト転送 8 * 100B/s 64 * 1000B/s 1024 * 3 * 8 * 1000B/s(24.576MB/s)
(広帯域エンドポイント非サポートの場合、1024 * 1 * 8 * 1000B/s (8.192MB/s))1024 * 3 * 8 * 1000B/s(24.576MB/s) Windowsでの実質 8 * 100B/s 64 * 1000B/s 64(デフォルトインターフェイスの制限) * 1(広帯域エンドポイント非サポート) * 8 * 1000B/s(512KB/s) ?
- Universal Serial Bus Specification Revision 2.0 (P49)
- USB 2.0およびUSB 3.0仕様に準拠するために、デフォルトインターフェイスでのインタラプトエンドポイントは64KB/sを超えて要求してはいけない。
- All high-speed device default interface settings must not include any interrupt endpoints with a data payload size (specified via wMaxPacketSize in the endpoint descriptor) greater than 64 bytes.
- Alternate interface settings may specify larger data payload sizes for interrupt endpoints.
- If the interrupt endpoints have a large data payload size, it is recommended that additional configurations or alternate interface settings be used to specify a range of data payload sizes.
- This increases the chances that the device can be used successfully in combination with other USB devices.
- HIDは1トランザクションあたりハイスピードで最大64バイトまで。
- A device may send or receive a transaction every USB frame (1 millisecond).
- A transaction may be made up of multiple packets (token, data, handshake) but is limited in size to 8 bytes for low-speed devices and 64 bytes for high-speed devices.
ディスクリプタ
- HIDディスクリプタ - レポートディスクリプタとフィジカルディスクリプタ(オプション)をまとめる働き
- レポートディスクリプタ
HIDのクラスリクエスト
- コントロール転送でエンドポイント0にリスエスト送信。
bRequestの値 bRequest 0x01 GET_REPORT コントロール転送を使い、デバイスから USB ホストに HID データを転送要求 0x02 SET_IDLE インタラプト転送の間隔(アイドルレート)の現在値を報告要求 0x03 GET_PROTOCOL? 現在選択されているプロトコル(ブートプロトコルまたはレポートプロトコル)を報告要求 0x09 SET_REPORT コントロール転送を使い、USB ホストからデバイスに HID データを転送 0x0A SET_IDLE インタラプト転送の間隔(アイドルレート)を設定 0x0B SET_PROTOCOL? 使用するプロトコル(ブートプロトコルまたはレポートプロトコル)を設定