您好,欢迎访问三七文档
1、设备描述符设备描述符给出了USB设备的一般信息,包括对设备及在设备配置中起全程作用的信息,包括制造商标识号ID、产品序列号、所属设备类号、默认端点的最大包长度和配置描述符的个数等。一个USB设备必须有且仅有一个设备描述符。设备描述符是设备连接到总线上时USB主机所读取的第一个描述符,它包含了14个字段,结构如下:表4、USB设备描述符的结构偏移量域大小值描述0bLength1数字此描述表的字节数1bDecriptorType1常量描述符的类型(此处应为0x01,即设备描述符)2bcdUSB2BCD码此设备与描述表兼容的USB设备说明版本号(BCD码)4bDeviceClass1类设备类码:如果此域的值为0则一个设置下每个接口指出它自己的类,各个接口各自独立工作。如果此域的值处于1~FEH之间,则设备在不同的接口上支持不同的类。并这些接口可能不能独立工作。此值指出了这些接口集体的类定义。如果此域设为FFH,则此设备的类由厂商定义。5bDeviceSubClass1子类子类挖码这些码值的具体含义根据bDeviceClass域来看。如bDeviceClass域为零,此域也须为零如bDeviceClass域为FFH,此域的所有值保留。6bDevicePortocol1协议协议码这些码的值视bDeviceClass和bDeviceSubClass的值而定。如果设备支持设备类相关的协议,此码标志了设备类的值。如果此域的值为零,则此设备不支持设备类相关的协议,然而,可能它的接口支持设备类相关的协议。如果此域的值为FFH,此设备使用厂商定义的协议。7bMaxPacketSize01数字端点0的最大包大小(仅8,16,32,64为合法值)8idVendor2ID厂商标志(由USB-IF组织赋值)10idProduct2ID产品标志(由厂商赋值)12bcdDevice2BCD码设备发行号(BCD码)14iManufacturer1索引描述厂商信息的字符串描述符的索引值。15iProduct1索引描述产品信息的字串描述符的索引值。16iSerialNumber1索引描述设备序列号信息的字串描述符的索引值。17bNumConfigurations1数字可能的配置描述符数目其中bDescriptorType为描述符的类型,其含义可查下表(此表也适用于标准命令Get_Descriptor中wValue域高字节的取值含义):表5、USB描述符的类型值类型描述符描述符值标准描述符设备描述符(DeviceDescriptor)0x01配置描述符(ConfigurationDescriptor)0x02字符串描述符(StringDescriptor)0x03接口描述符(InterfaceDescriptor)0x04端点描述符(EndPontDescriptor)0x05类描述符集线器类描述符(HubDescriptor)0x29人机接口类描述符(HID)0x21厂商定义的描述符0xFF设备类代码bDeviceClass可查下表:表6、设备的类别(bDeviceClass)值(十进制)值(十六进制)说明00x00接口描述符中提供类的值20x02通信类90x09集线器类2200xDC用于诊断用途的设备类2240xE0无线通信设备类2550xFF厂商定义的设备类下表列出了一个USB鼠标的设备描述符的例子,供大家分析一下:表7、一种鼠标的设备描述符示例字段描述符值(十六制)bLength0x12bDecriptorType0x01bcdUSBx0110bDeviceClass0x00bDeviceSubClass0x00bDevicePortocol0x00bMaxPacketSize00x08idVendor0x045E(MicrosoftCorporation)idProduct0x0047bcdDevice0x300iManufacturer0x01iProduct0x03iSerialNumber0x00bNumConfigurations0x012、配置描述符配置描述符中包括了描述符的长度(属于此描述符的所有接口描述符和端点描述符的长度的和)、供电方式(自供电/总线供电)、最大耗电量等。主果主机发出USB标准命令Get_Descriptor要求得到设备的某个配置描述符,那么除了此配置描述符以外,此配置包含的所有接口描述符与端点描述符都将提供给USB主机。表8、USB配置描述符的结构偏移量域大小值描述0bLength1数字此描述表的字节数长度。1bDescriptorType1常量配置描述表类型(此处为0x02)2wTotalLength2数字此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述符)4bNumInterfaces1数字此配置所支持的接口个数5bCongfigurationValue1数字在SetConfiguration()请求中用作参数来选定此配置。6iConfiguration1索引描述此配置的字串描述表索引7bmAttributes1位图配置特性:D7:保留(设为一)D6:自给电源D5:远程唤醒D4..0:保留(设为一)一个既用总线电源又有自给电源的设备会在MaxPower域指出需要从总线取的电量。并设置D6为一。运行时期的实际电源模式可由GetStatus(DEVICE)请求得到。8MaxPower1mA在此配置下的总线电源耗费量。以2mA为一个单位。下面是一种硬盘的配置描述符示例:表9、一种硬盘的配置描述符示例字段描述符值(十六进制)bLength0x09bDescriptorType0x02wTotalLength0x01FbNumInterfaces0x01bCongfigurationValue0x01iConfiguration0x00bmAttributes0x0CMaxPower0x323、接口描述符配置描述符中包含了一个或多个接口描述符,这里的“接口”并不是指物理存在的接口,在这里把它称之为“功能”更易理解些,例如一个设备既有录音的功能又有扬声器的功能,则这个设备至少就有两个“接口”。如果一个配置描述符不止支持一个接口描述符,并且每个接口描述符都有一个或多个端点描述符,那么在响应USB主机的配置描述符命令时,USB设备的端点描述符总是紧跟着相关的接口描述符后面,作为配置描述符的一部分被返回。接口描述符不可直接用Set_Descriptor和Get_Descriptor来存取。如果一个接口仅使用端点0,则接口描述符以后就不再返回端点描述符,并且此接口表现的是一个控制接口的特性,它使用与端点0相关联的默认管道进行数据传输。在这种情况下bNumberEndpoints域应被设置成0。接口描述符在说明端点个数并不把端点0计算在内。表10、USB接口描述符的结构偏移量域大小值说明0bLength1数字此表的字节数1bDescriptorType1常量接口描述表类(此处应为0x04)2bInterfaceNumber1数字接口号,当前配置支持的接口数组索引(从零开始)。3bAlternateSetting1数字可选设置的索引值。4bNumEndpoints1数字此接口用的端点数量,如果是零则说明此接口只用缺省控制管道。5bInterfaceClass1类接口所属的类值:零值为将来的标准保留。如果此域的值设为FFH,则此接口类由厂商说明。所有其它的值由USB说明保留。6bInterfaceSubClass1子类子类码这些值的定义视bInterfaceClass域而定。如果bInterfaceClass域的值为零则此域的值必须为零。bInterfaceClass域不为FFH则所有值由USB所保留。7bInterfaceProtocol1协议协议码:bInterfaceClass和bInterfaceSubClass域的值而定.如果一个接口支持设备类相关的请求此域的值指出了设备类说明中所定义的协议.8iInterface1索引描述此接口的字串描述表的索引值。对于bInterfaceClass字段,表示接口所属的类别,USB协议根据功能将不同的接口划分成不的类,其具体含义如下表所示:表11、USB协议定义的接口类别(bInterfaceClass)值(十六进制)类别0x01音频类0x02CDC控制类0x03人机接口类(HID)0x05物理类0x06图像类0x07打印机类0x08大数据存储类0x09集线器类0x0ACDC数据类0x0B智能卡类0x0D安全类0xDC诊断设备类0xE0无线控制器类0xFE特定应用类(包括红外的桥接器等)0xFF厂商定义的设备4、端点描述符端点是设备与主机之间进行数据传输的逻辑接口,除配置使用的端点0(控制端点,一般一个设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了数据的传输类型、传输方向、数据包大小和端点号(也可称为端点地址)等。除了描述符中描述的端点外,每个设备必须要有一个默认的控制型端点,地址为0,它的数据传输为双向,而且没有专门的描述符,只是在设备描述符中定义了它的最大包长度。主机通过此端点向设备发送命令,获得设备的各种描述符的信息,并通过它来配置设备。表12、USB端点描述符的结构偏移量域大小值说明0bLength1数字此描述表的字节数长度1bDescriptorType1常量端点描述表类(此处应为0x05)2bEndpointAddress1端点此描述表所描述的端点的地址、方向:Bit3..0:端点号.Bit6..4:保留,为零Bit7:方向,如果控制端点则略。0:输出端点(主机到设备)1:输入端点(设备到主机)3bmAttributes1位图此域的值描述的是在bConfigurationValue域所指的配置下端点的特性。Bit1..0:传送类型00=控制传送01=同步传送10=批传送11=中断传送所有其它的位都保留。4wMaxPacketSize2数字当前配置下此端点能够接收或发送的最大数据包的大小。对于实进传输,此值用于为每帧的数据净负荷预留时间。在实际运行时,管道可能不完全需要预留的带宽,实际带宽可由设备通过一种非USB定义的机制汇报给主机。对于中断传输,批量传输和控制传输,端点可能发送比之短的数据包6bInterval1数字周期数据传输端点的时间间隙。此域的值对于批传送的端点及控制传送的端点无意义。对于同步传送的端点此域必需为1,表示周期为1ms。对于中断传送的端点此域值的范围为1ms到255ms。下表是一种鼠标的端点描述符的示例,该端点是一个中断端点:表13、一种鼠标的端点描述符示例域值(十六进制)bLength0x07bDescriptorType0x05bEndpointAddress0x81bmAttributes0x03wMaxPacketSize0x04bInterval0x0A5、字符串描述符字符串描述符是一种可选的USB标准描述符,描述了如制商、设备名称或序列号等信息。如果一个设备无字符串描述符,则其它描述符中与字符串有关的索引值都必须为0。字符串使用的是Unicode编码。主机请示得到某个字符串描述符时一般分成两步:首先主机向设备发出USB标准命令Get_Descriptor,其中所使用的字符串的索引值为0,设备返回一个字符串描述符,此描述符的结构如下:表14、USB字符串描述符(响应主机请求时返回的表示语言ID的字符串描述符)偏移量域大小值描述0bLength1N+2此描述表的字节数1bDescriptorType1常量字串描述表类型(此处应为0x03)2wLANGID[0]2数字语言标识(LANGID)码0……………NwLANGID[x]2数字语言标识(LANGID)码X该字符串描述符双字节的语言ID的数组,wLANGID[0]~wLANGID[x]指明了设备支持的语言,具体含义可查看USB_LANGIDs.pdf。主机根据自己需要的语言,再次向设备发出USB标准命令Get_Descriptor,指明所要求得到的字符串的
本文标题:usb知识总结
链接地址:https://www.777doc.com/doc-2865337 .html