ポチなりのUSBプロトコルの解釈や、散逸している参考資料(主にデバッグで使用する)を纏めてみます。資料は主にPDFで提供されているのですが、PDFではアクセスが不便です。デバッグ中は、直ぐに欲しい情報が見つかる必要があります(とは言うものの、面倒な事(Web化)を初めてしまい後悔しています)
レイヤや体系は無視して順不同です
バイト | フィールド | ビット | 説明 | 内容 |
---|---|---|---|---|
0 | bmRequestType | 7 | データ転送方向 リクエストなのでホスト→デバイス これは続くデータの方向かな? | 0 : ホスト→デバイス・・・・・・ 1 : デバイス→ホスト |
6,5 | リクエストタイプ | 00 : 標準 01 : クラス 10 : ベンダ 11 : リザーブ | ||
4-0 | 対象ディスクリプタ | 0 : デバイス 1 : インタフェース 2 : エンドポイント 3 : その他 4〜: 予約 | ||
1 | bRequest | リクエスト・コード | ||
2 | wValue | 下位 | リクエストで使用する任意の数値 | |
3 | 上位 | |||
4 | wIndex | 下位 | リクエストで使用するインデックス またはオフセット | |
5 | 上位 | |||
6 | wLength | 下位 | データ・ステージでのデータ長 | |
7 | 上位 |
なんか、、、人に優しくない構造ですよね!?
リクエストには、標準、クラス(マスストレージ、CDCなど)、ベンダの3種類があるようです
標準リクエストの名称はWebを探せば一杯出てきます。でもコードが載っているサイトは珍しいと思います。表面的に理解するなら名称だけで十分なのですが、いざデバッグするとなると、名称は役に立ちません
3種類のリクエストの種別はリクエストタイプで決まるようです。TCP/IPのポート番号などは1023まではWell knownポートとして予約されています。1024以降はベンダが自由に使用できる。考え方がシンプルですよね・・・、USBが好きになれない理由の例です
視覚的に認識し辛いだけでなく、ソースが複雑になります
リクエスト コード | 標準リクエスト |
---|---|
00h | Get_Status・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ |
01h | Clear_feature |
03h | Set_Feature |
05h | Set_Address |
06h | Get_Descriptor |
07h | Set_Descriptor |
08h | Get_Configuration |
09h | Set_Configuration |
0Ah | Get_Interface |
0Bh | Set_Interface |
0Ch | Synch_Frame |
以下は、GET_DESCRIPTORのwValueのhigh byteのことです
(ホント!分かり難いですよlネ。これって、bmRequestTypeのDescriptorとどういう関係?)
Value | Descriptor Types |
---|---|
1 | DEVICE・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ |
2 | CONFIGURATION |
3 | STRING |
4 | INTERFACE |
5 | ENDPOINT |
6 | DEVICE_QUALIFIER |
7 | OTHER_SPEED_CONFIGURATION |
8 | INTERFACE_POWER |
コメントをかく