USB 描述符分类及关系
2020-09-28
3784
1
标准的描述符有5种,USB为这些描述符定义了编号:
1——设备描述符
2——配置描述符
3——字符串描述符
4——接口描述符
5——端点描述符
0x21——HID描述符
0x22——报表描述符/报告描述符
上面的描述符之间有一定的关系,一个设备只有一个设备描述符,而一个设备描述符可以包含多个配置描述符,而一个配置描述符可以包含多个接口描述符,一个接口使用了几个端点,就有几个端点描述符。
还有一些不太常用的描述符:
6——限定描述符 DEVICE_QUALIFIER
7—其它速率配置描述符 OTHER_SPEED_CONFIGURATION
8—接口功率描述符 INTERFACE_POWER
标准描述符定义
#define USB_DEVICE_DESCRIPTOR_TYPE 0x01
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
#define USB_STRING_DESCRIPTOR_TYPE 0x03
#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
//
// USB 2.0: 9.4 Standard Device Requests, Table 9-5. Descriptor Types
//
#define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE 0x06
#define USB_OTHER_SPEED_CONFIGURATION_DESCRIPTOR_TYPE 0x07
#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08
//
// USB 3.0: 9.4 Standard Device Requests, Table 9-5. Descriptor Types
//
#define USB_OTG_DESCRIPTOR_TYPE 0x09
#define USB_DEBUG_DESCRIPTOR_TYPE 0x0A
#define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE 0x0B
#define USB_BOS_DESCRIPTOR_TYPE 0x0F
#define USB_DEVICE_CAPABILITY_DESCRIPTOR_TYPE 0x10
#define USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_TYPE 0x30
//
// USB 3.1: 9.4 Standard Device Requests, Table 9-6. Descriptor Types
//
#define USB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR_TYPE 0x31
对于一些特殊设备,除过这些标准的设备描述,如HID设备还有报告描述符,符合UVC规范的报像头还有其专用的描述符如关联描述符。
描述符的获取
USB设备描述符关系
- 一个USB设备只有一个设备描述符。
- 一个USB设备可以有多个配置描述符(在设备描述符的bNumConfigurations下指定),但设备只能工作在一个配置描述符下。
- 一个配置描述符下可以有多个(在配置描述符的bNumInterfaces下指定)接口描述符。
- 一个接口描述符下可以有多个(在接口描述符的bNumEndPoints下指定)端点描述符。
设备描述符、配置描述符和接口描述符都有一些相关的功能描述,这是定义在其对应的字符描述符中。
如在设备描述符中就有以下三个字符串索引值,通过查询其对应的字符串值就可以知道其字符串功能描述。
BYTE iManufacturer; //描述厂商字符串的索引
BYTE iProduct; //描述产品字符串的索引
BYTE iSerialNumber; //描述设备序列号字符串的索引
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936