USB 设备描述符
			 2021-05-09
			  本文链接为:http://www.usbzh.com/article/detail-104.html ,欢迎转载,转载请附上本文链接。
	
			
			
			
			
		
			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    
		
			USB2.0规范
			




