USB获取描述符GetDescriptor
2020-10-31
10253
37
描述述包括设备描述符请求,配置描述符请求、字符串描述符请求和其它描述符请求。
ID | 请求码 | 说明 |
---|---|---|
6 | GET_DESCRIPTOR | 用于主机获取设备的特定描述符 |
GetDescriptor用于USB主机读取设备的描述符,在请求数据阶段,USB设备将向主机返回指定的描述符。
bmRequestType(1) | bRequest(1) | wValue(2) | wIndex(2) | wLength(2) |
---|---|---|---|---|
80 | 06 | 类型(高字节)和索引(低字节) | 0或语言ID(注1) | 接收的描述符长度 |
- bmRequestType:x80表示从设备到主机,请求标准命令,接收者为设备。
- bRequest:0x06,表示读取描述符。
- wValue表示要获取描述符的索类型。(高字节为描述符类型,低字节为描述符索引)
描述符的类型有:
1——设备描述符
2——配置描述符
3——字符串描述符
4——接口描述符 //随配置描述符一并获取
5——端点描述符 //随配置描述符一并获取 - wIndex字段表示字符串描述符的语言ID,其它描述符为0
- wLength指定了描述符的字节数。
一个配置描述符的请求将在一个请求事务中返回设备描述符和所有的接口、端点描述符。
- 端点描述符:不能直接通过 SetDescriptor/GetDescriptor 请求访问;
- 接口描述符:不能直接通过 SetDescriptor/GetDescriptor 请求访问;
- 字符串描述符:wIndex 中包含语言 ID,支持多语言。
注1:获取描述符有一个常用的特殊的,就是获取HID设备的报告描述符0X22,该请求是发送给USB接口的,所以这时bmRequestType应是0x81,wIndex这时的低字节应为接口描述符的索引ID.如
81 06 00 22 03 00 2f 00
它的解释为:
0x81, // bmRequestType: Dir: D2H, Type: Standard, Recipient: Interface
0x06, // bRequest (Get Descriptor)
0x00, // wValue[0:7] Desc Index: 0
0x22, // wValue[8:15] Desc Type: (HID Report)
0x03, 0x00, // wIndex ID: 0x03,Interface Descriptor Id
0x2F, 0x00, // wLength = 47
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936