1、设备描述符:
bLength:设备描述符长度,,固定值0x12
bDescriptorType:设备描述符类型,这里是1
bcdUSB:USB发布号,例如 2.10 即0x0210
bDeviceClass:设备类别,由USB-IF分配,比较常见的USB设备:HID(鼠标)、CDC(串口)、SmartCard(智能卡)、Miscellaneous(复合设备)、Mass Storage(U盘)、Vendor Specific(自定义USB设备)。
如下表格:
bDeviceSubClass:设备子类别,由USB-IF分配,举例
bDeviceProtocol:设备协议代码,由USB-IF分配,举例:
bMaxPacketSize0:端点0的最大包大小只有这几个有效值8、16、32、64
idVendor:厂商ID,USB-IF分配,厂商向USB-IF申请
idProduct:产品ID
bcdDevice:设备发布编码,厂商自行定义
iManufacturer:厂商字符串索引,如果没有置为0
iProduct:产品字符串索引,如果没有置为0
iSerialNumber:设备序列号字符串索引,如果没有置为0
bNumConfigurations:配置数量,一个设备可以有多个配置,至少为1
2、配置描述符
bLength:配置描述符长度,固定为0x09
bDescriptorType:设配置描述符类型,这里是2
wTotalLength:描述符总长度,包括配置描述符、接口描述符、端点描述符等。
bNumInterfaces:一个配置下可以有多个接口,这里是接口数量
bConfigurationValue:配置值,作为SetConfiguration() 的参数
iConfiguration:描述此配置的字符串索引,如果没有置为0
bmAttributes:配置属性
Bit7:保留设置为1
Bit6:自供电
Bit5:远程唤醒
Bi4-Bit0:保留置为0
bMaxPower:总线供电(非自供电)情况下的最大电流,2mA为单位
3、接口描述符
bLength:接口描述符长度
bDescriptorType:接口描述符类型,这里是0x04
bInterfaceNumber:一个配置可以有多个接口,这是接口索引
bAlternateSetting:一个接口可以由多个替代接口描述符,这是替代接口描述符索引,使用 SetInterface()进行设置。
bNumEndpoints:这个接口有多少个端点,不包含端点0
bInterfaceClass:接口类别,由USB-IF分配,见下面HID键盘例子
bInterfaceSubClass:接口子类别,由USB-IF分配,见下面HID键盘例子
bInterfaceProtocol:接口协议,,由USB-IF分配,见下面HID键盘例子
iInterface:接口字符串索引,如果没有置为0
4、端点描述符
bLength:端点描述符长度
bDescriptorType:端点描述符类型,这里是0x05
bEndpointAddress:
Bit3-Bit0:端点号
Bit6-Bit4:保留为设置为0
Bit7: 传输方向0:OUT端点,1:IN端点
bmAttributes:端点地址
Bit1-Bit0:端点传输类型
00:控制传输类型
01:同步传输类型
10:批量传输类型
11:中断传输类型
Bit5-Bit2:非同步传输保留为设置为0,同步传输有特殊定义,这里不做介绍
Bit7-Bit6:保留位,设置为0
wMaxPacketSize:端点大小
bInterval:中断传输轮训间隔时间,全速设备1ms为单位,高速设备125us为单位
5、字符串描述符
bLength:描述符长度
bDescriptorType:字符串描述符类型,这里是0x03
bString:UNICODE编码的字符串
注意:索引为0的字符串描述符是语言ID
添加关注,了解更多干货!