usb-descriptor(一 )

本文介绍了USB设备描述符的种类和结构,包括设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符。详细解释了每种描述符的作用及数据结构,并提供了鼠标和硬盘描述符实例。

USB协议为USB设备定义了一套描述设备功能和属性的有固定结构的描述符,包括标准的描述符:
1. 设备描述符
2. 配置描述符
3. 接口描述符
4. 端点描述符
5. 字符串描述符
6. 百标准描述符,如类描述符。
USB设备通过这些描述符向USB主机汇报设备的各种各样属性,主机通过对这些描述符的访问对设备进行类型识别、配置并为其提供相应的客户端驱动程序。

  USB设备通过描述符反映自己的设备特性。USB描述符是由特定格式排列的一组数据结构组成。

  在USB设备枚举过程中,主机端的协义软件需要解析从USB设备读取的所有描述符信息。在USB主向设备发送读取描述符的请求后,USB设备将所有的描述符以连续的数据流方式传输给USB主机。主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。

  USB描述符包含标准描述符、类描述符和厂商特定描述3种形式。任何一种设备必须USB标准描述符(队字符串描述符可选外)。

  在USB1.X中,规定了5种标准描述符:设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)和字符串描述符(String Descriptor)。

  每个USB设备只有一个设备描述符,而一个设备中可包含一个或多个配置描述符,即USB设备可以有多种配置。设备的每一个配置中又可以包含一个或多个接口描述符,即USB设备可以支持多种功能(接口),接口的特性通过描述符提供。

  在USB主机访问USB设备的描述符时,USB设备依照设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符顺序将所有描述符传给主机。一设备至少要包含设备描述符、配置描述符和接口描述符,如果USB设备没有端点描述符,则它仅仅用默认管道与主机进行数据传输。

设备描述符

  设备描述符给出了USB设备的一般信息,包括对设备及在设备配置中起全程作用的信息,包括制造商标识号ID、产品序列号、所属设备类号、默认端点的最大包长度和配置描述符的个数等。一个USB设备必须有且仅有一个设备描述符。设备描述符是设备连接到总线上时USB主机所读取的第一个描述符,它包含了14个字段,结构如下:


偏移量大小描述
0bLength1数字此描述表的字节数
1bDecriptorType1常量描述符的类型(此处应为0x01,即设备描述符)
2bcdUSB2 BCD码此设备与描述表兼容的USB设备说明版本号(BCD 码)
4 bDeviceClass 1 设备类码: 如果此域的值为0则一个设置下每个接口指出它自己的类,各个接口各自独立工作。 如果此域的值处于1~FEH之间,则设备在不同的接口上支持不同的类。并这些接口可能不能独立工作。此值指出了这些接口集体的类定义。 如果此域设为FFH,则此设备的类由厂商定义。
5 bDeviceSubClass 1 子类 子类挖码 这些码值的具体含义根据bDeviceClass 域来看。 如bDeviceClass 域为零,此域也须为零 如bDeviceClass 域为FFH,此域的所有值保留。
6 bDevicePortocol 1 协议 协议码 这些码的值视bDeviceClass 和 bDeviceSubClass 的值而定。 如果设备支持设备类相关的协议,此码标志了设备类的值。如果此域的值为零,则此设备不支持设备类相关的协议,然而,可能它的接口支持设备类相关的协议。如果此域的值为FFH,此设备使用厂商定义的协议。
7 bMaxPacketSize0 1 数字 端点0的最大包大小(仅8,16,32,64 为合法值)
8 idVendor 2 ID 厂商标志(由USB-IF组织赋值)
10 idProduct 2 ID 产品标志(由厂商赋值)
12 bcdDevice 2 BCD 码 设备发行号(BCD 码)
14 iManufacturer 1 索引 描述厂商信息的字符串描述符的索引值。
15 iProduct 1 索引 描述产品信息的字串描述符的索引值。
16 iSerialNumber 1 索引 描述设备序列号信息的字串描述符的索引值。
17 bNumConfigurations 1 数字 可能的配置描述符数目

其中bDescriptorType为描述符的类型,其含义可查下表(此表也适用于标准命令Get_Descriptor中wValue域高字节的取值含义):

表5、USB描述符的类型值

类型 描述符 描述符值
标准描述符 设备描述符(Device Descriptor) 0x01
配置描述符(Configuration Descriptor) 0x02
字符串描述符(String Descriptor) 0x03
接口描述符(Interface Descriptor) 0x04
端点描述符(EndPont Descriptor) 0x05
类描述符 集线器类描述符(Hub Descriptor) 0x29
人机接口类描述符(HID) 0x21
厂商定义的描述符 0xFF

设备类代码bDeviceClass可查下表:

表6、设备的类别(bDeviceClass)

值(十进制) 值(十六进制) 说明
0 0x00 接口描述符中提供类的值
2 0x02 通信类
9 0x09 集线器类
220 0xDC 用于诊断用途的设备类
224 0xE0 无线通信设备类
255 0xFF 厂商定义的设备类

下表列出了一个USB鼠标的设备描述符的例子,供大家分析一下:

表7、一种鼠标的设备描述符示例

字段描述符值(十六制)
bLength0x12
bDecriptorType0x01
bcdUSBx0110
DeviceClass0x00
bDeviceSubClass0x00
bDevicePortocol0x00
bMaxPacketSize00x08
idVendor0x045E(Microsoft Corporation)
idProduct0x0047
bcdDevice0x300
iManufacturer0x01
iProduct0x03
iSerialNumber0x00
bNumConfigurations0x01

2、配置描述符

  配置描述符中包括了描述符的长度(属于此描述符的所有接口描述符和端点描述符的长度的和)、供电方式(自供电/总线供电)、最大耗电量等。主果主机发出USB标准命令Get_Descriptor要求得到设备的某个配置描述符,那么除了此配置描述符以外,此配置包含的所有接口描述符与端点描述符都将提供给USB主机。

表8、USB配置描述符的结构

偏移量大小描述
0bLength1数字此描述表的字节数长度。
1bDescriptorType1常量配置描述表类型(此处为0x02)
2wTotalLength2数字此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述符)
4bNumInterfaces1数字此配置所支持的接口个数
5bCongfigurationValue1数字在SetConfiguration()请求中用作参数来选定此配置。
6iConfiguration1索引描述此配置的字串描述表索引
7bmAttributes1位图配置特性: D7: 保留(设为一) D6: 自给电源 D5: 远程唤醒 D4..0:保留(设为一)
8MaxPower1mA在此配置下的总线电源耗费量。以 2mA 为一个单位。

下面是一种硬盘的配置描述符示例:

表9、一种硬盘的配置描述符示例

字段描述符值(十六进制)
bLength0x09
bDescriptorType0x02
wTotalLength0x01F
bNumInterfaces0x01
bCongfigurationValue0x01
iConfiguration0x00
bmAttributes0x0C
MaxPower0x32
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值