USB 设备描述符
2021-05-09
24584
158
USB设备描述符是USB设备在进行插拔和初始化过程中,最先被主机读取的一部分信息,它包含了设备的一些基本属性信息,如USB规范版本、设备类、设备子类、设备协议、最大数据包长度等。
USB设备描述符通常是在设备插入时被主机读取,在获取到设备描述符后,主机可以自动加载相应的驱动程序,完成设备的初始化和配置。
设备描述符是USB设备的第一个描述符,每个USB设备都得具有设备描述符,且只能拥有一个。
设描述符符的定义:
windows系统中设描描述符的结构体定义如下:
struct _DEVICE_DESCRIPTOR_STRUCT
{
BYTE bLength; //设备描述符的字节数大小,为0x12
BYTE bDescriptorType; //描述符类型编号,为0x01
WORD bcdUSB; //USB版本号
BYTE bDeviceClass; //USB分配的设备类代码,0x01~0xfe为标准设备类,0xff为厂商自定义类型
//0x00不是在设备描述符中定义的,如HID
BYTE bDeviceSubClass; //usb分配的子类代码,同上,值由USB规定和分配的
BYTE bDeviceProtocol; //USB分配的设备协议代码,同上
BYTE bMaxPacketSize0; //端点0的最大包的大小
WORD idVendor; //厂商编号
WORD idProduct; //产品编号
WORD bcdDevice; //设备出厂编号
BYTE iManufacturer; //描述厂商字符串的索引
BYTE iProduct; //描述产品字符串的索引
BYTE iSerialNumber; //描述设备序列号字符串的索引
BYTE bNumConfiguration; //可能的配置数量
}
设备描述符的含义:
- bLength : 描述符大小.固定为0x12.
- bDescriptorType : 设备描述符类型.固定为0x01.
- bcdUSB : USB 规范发布号.表示了本设备能适用于那种协议,如2.0=0200,1.1=0110等.
- bDeviceClass : 类型代码(由USB指定)。当它的值是0时,表示所有接口在配置描述符里,并且所有接口是独立的。当它的值是1到FEH时,表示不同的接口关联的。当它的值是FFH时,它是厂商自己定义的.
- bDeviceSubClass : 子类型代码(由USB分配).如果bDeviceClass值是0,一定要设置为0.其它情况就跟据USB-IF组织定义的编码.
bDeviceProtocol : 协议代码(由USB分配).如果使用USB-IF组织定义的协议,就需要设置这里的值,否则直接设置为0。如果厂商自己定义的可以设置为FFH.
操作系统使用bDeviceClass、bDeviceSubClass和bDeviceProtocol来查找设备的类驱动程序。通常只有 bDeviceClass 设置在设备级别。大多数类规范选择在接口级别标识自己,因此将 bDeviceClass 设置为 0x00。这允许一个设备支持多个类,即USB复合设备。
bMaxPacketSize0 : 端点0最大分组大小(只有8,16,32,64有效).
- idVendor : 供应商ID(由USB分配).
- idProduct : 产品ID(由厂商分配).由供应商ID和产品ID,就可以让操作系统加载不同的驱动程序.
- bcdDevice : 设备出产编码.由厂家自行设置.
- iManufacturer : 厂商描述符字符串索引.索引到对应的字符串描述符. 为0则表示没有.
- iProduct : :产品描述符字符串索引.同上.
- iSerialNumber : 设备序列号字符串索引.同上.
- bNumConfigurations : 可能的配置数.定义设备以当前速度支持的配置数量
设备描述符示例
通过windbg查看设描述符
0: kd> dt _USB_DEVICE_DESCRIPTOR 0xffffbe09`51e0be20
xxx!_USB_DEVICE_DESCRIPTOR
+0x000 bLength : 0x12 ''
+0x001 bDescriptorType : 0x1 ''
+0x002 bcdUSB : 0x200
+0x004 bDeviceClass : 0 ''
+0x005 bDeviceSubClass : 0 ''
+0x006 bDeviceProtocol : 0 ''
+0x007 bMaxPacketSize0 : 0x40 '@'
+0x008 idVendor : 0x1234
+0x00a idProduct : 0x5678
+0x00c bcdDevice : 0
+0x00e iManufacturer : 0x19 ''
+0x00f iProduct : 0x2a '*'
+0x010 iSerialNumber : 0x65 'e'
+0x011 bNumConfigurations : 0x1 '' 配置数量
使用UsbView获取Logitech鼠标设备描述符
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936