bDecriptorType bcdUSB bDeviceClass bDeviceSubClass bDevicePortocol bMaxPacketSize0 idVendor idProduct bcdDevice iManufacturer iProduct iSerialNumber bNumConfigurations 0x01 x0110 0x00 0x00 0x00 0x08 0x045E(Microsoft Corporation) 0x0047 0x300 0x01 0x03 0x00 0x01 2、配置描述符
配置描述符中包括了描述符的长度(属于此描述符的所有接口描述符和端点描述符的长度的和)、供电方式(自供电/总线供电)、最大耗电量等。主果主机发出USB标准命令Get_Descriptor要求得到设备的某个配置描述符,那么除了此配置描述符以外,此配置包含的所有接口描述符与端点描述符都将提供给USB主机。
表8、USB配置描述符的结构 偏移量 0 1 2 域 bLength bDescriptorType wTotalLength 大小 1 1 2 值 数字 常量 数字 描述 此描述表的字节数长度。 配置描述表类型(此处为0x02) 此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述符) 4 5 bNumInterfaces bCongfigurationValue 1 1 数字 数字 此配置所支持的接口个数 在SetConfiguration()请求中用作参数来选定此配置。 6 7 iConfiguration bmAttributes 1 1 索引 位图 描述此配置的字串描述表索引 配置特性: D7: 保留(设为一) D6: 自给电源 D5: 远程唤醒 D4..0:保留(设为一) 一个既用总线电源又有自给电源的设备会在MaxPower域指出需要从总线取的电量。并设置D6为一。运行时期的实际电源模式可由GetStatus(DEVICE) 请求得到。 8 MaxPower 1 mA 在此配置下的总线电源耗费量。以 2mA 为一个单位。 下面是一种硬盘的配置描述符示例:
表9、一种硬盘的配置描述符示例 字段 bLength bDescriptorType wTotalLength bNumInterfaces bCongfigurationValue iConfiguration bmAttributes MaxPower 描述符值(十六进制) 0x09 0x02 0x01F 0x01 0x01 0x00 0x0C 0x32 3、接口描述符
配置描述符中包含了一个或多个接口描述符,这里的“接口”并不是指物理存在的接口,在这里把它称之为“功能”更易理解些,例如一个设备既有录音的功能又有扬声器的功能,则这个设备至少就有两个“接口”。
如果一个配置描述符不止支持一个接口描述符,并且每个接口描述符都有一个或多个端点描述符,那么在响应USB主机的配置描述符命令时,USB设备的端点描述符总是紧跟着相关的接口描述符后面,作为配置描述符的一部分被返回。接口描述符不可直接用Set_Descriptor和Get_Descriptor来存取。
如果一个接口仅使用端点0,则接口描述符以后就不再返回端点描述符,并且此接口表现的是一个控制接口的特性,它使用与端点0相关联的默认管道进行数据传输。在这种情况下bNumberEndpoints域应被设置成0。接口描述符在说明端点个数并不把端点0计算在内。
表10、USB接口描述符的结构 偏移量 0 1 bLength bDescriptorType 域 大小 1 1 值 数字 常量 说明 此表的字节数 接口描述表类(此处应为0x04) 2 bInterfaceNumber 1 数字 接口号,当前配置支持的接口数组索引(从零开始)。 3 4 bAlternateSetting bNumEndpoints 1 1 数字 数字 可选设置的索引值。 此接口用的端点数量,如果是零则说明此接口只用缺省控制管道。 5 bInterfaceClass 1 类 接口所属的类值: 零值为将来的标准保留。 如果此域的值设为FFH,则此接口类由厂商说明。 所有其它的值由USB 说明保留。 6 bInterfaceSubClass 1 子类 子类码 这些值的定义视bInterfaceClass域而定。 如果bInterfaceClass域的值为零则此域的值必须为零。 bInterfaceClass域不为FFH则所有值由USB 所保留。 7 bInterfaceProtocol 1 协议 协议码:bInterfaceClass 和bInterfaceSubClass 域的值而定.如果一个接口支持设备类相关的请求此域的值指出了设备类说明中所定义的协议. 8 iInterface 1 索引 描述此接口的字串描述表的索引值。 对于bInterfaceClass字段,表示接口所属的类别,USB协议根据功能将不同的接口划分成不的类,其具体含义如下表所示:
表11、USB协议定义的接口类别(bInterfaceClass) 值(十六进制) 0x01 0x02 0x03 类别 音频类 CDC控制类 人机接口类(HID) 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0D 0xDC 0xE0 0xFE 0xFF 物理类 图像类 打印机类 大数据存储类 集线器类 CDC数据类 智能卡类 安全类 诊断设备类 无线控制器类 特定应用类(包括红外的桥接器等) 厂商定义的设备 4、端点描述符
端点是设备与主机之间进行数据传输的逻辑接口,除配置使用的端点0(控制端点,一般一个设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了数据的传输类型、传输方向、数据包大小和端点号(也可称为端点地址)等。
除了描述符中描述的端点外,每个设备必须要有一个默认的控制型端点,地址为0,它的数据传输为双向,而且没有专门的描述符,只是在设备描述符中定义了它的最大包长度。主机通过此端点向设备发送命令,获得设备的各种描述符的信息,并通过它来配置设备。
表12、USB端点描述符的结构 偏移量 0 1 域 bLength bDescriptorType 大小 1 1 值 说明 数字 此描述表的字节数长度 常量 端点描述表类(此处应为0x05) 此描述表所描述的端点的地址、方向: Bit 3..0 : 端点号. Bit 6..4 : 保留,为零 Bit 7: 方向,如果控制端点则略。 0:输出端点(主机到设备) 1:输入端点(设备到主机) 此域的值描述的是在bConfigurationValue域所指的配置下端点的特性。 Bit 1..0 :传送类型 00=控制传送 01=同步传送 10=批传送 2 bEndpointAddress 1 端点 3 bmAttributes 1 位图 11=中断传送 所有其它的位都保留。 当前配置下此端点能够接收或发送的最大数据包的大小。 对于实进传输,此值用于为每帧的数据净4 wMaxPacketSize 2 数字 负荷预留时间。在实际运行时,管道可能不完全需要预留的带宽,实际带宽可由设备通过一种非USB定义的机制汇报给主机。对于中断传输,批量传输和控制传输,端点可能发送比之短的数据包 周期数据传输端点的时间间隙。 此域的值对于批传送的端点及控制传送6 bInterval 1 数字 的端点无意义。对于同步传送的端点此域必需为1,表示周期为1ms。对于中断传送的端点此域值的范围为1ms到255ms。 下表是一种鼠标的端点描述符的示例,该端点是一个中断端点:
表13、一种鼠标的端点描述符示例 域 bLength bDescriptorType bEndpointAddress bmAttributes wMaxPacketSize bInterval 值(十六进制) 0x07 0x05 0x81 0x03 0x04 0x0A 5、字符串描述符
字符串描述符是一种可选的USB标准描述符,描述了如制商、设备名称或序列号等信息。如果一个设备无字符串描述符,则其它描述符中与字符串有关的索引值都必须为0。字符串使用的是Unicode编码。
主机请示得到某个字符串描述符时一般分成两步:首先主机向设备发出USB标准命令Get_Descriptor,其中所使用的字符串的索引值为0,设备返回一个字符串描述符,此描述符的结构如下:
表14、USB字符串描述符(响应主机请求时返回的表示语言ID的字符串描述符) 偏移量 0 域 bLength 大小 1 值 N+2 描述 此描述表的字节数