微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > USB开发基础:USB命令(请求)和USB描述符

USB开发基础:USB命令(请求)和USB描述符

时间:12-13 来源:互联网 点击:
总线上时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描述符的类型值
类型描述符描述符值
标准描述符设备描述符(Device Descriptor)0x01
配置描述符(Configuration Descriptor)0x02
字符串描述符(String Descriptor)0x03
接口描述符(Interface Descriptor)0x04
端点描述符(EndPont Descriptor)0x05
类描述符集线器类描述符(Hub Descriptor)0x29
人机接口类描述符(HID)0x21
厂商定义的描述符0xFF
设备类代码bDeviceClass可查下表:
表6、设备的类别(bDeviceClass)
值(十进制)值(十六进制)说明
00x00接口描述符中提供类的值
20x02通信类
90x09集线器类
2200xDC用于诊断用途的设备类
2240xE0无线通信设备类
2550xFF厂商定义的设备类
下表列出了一个USB鼠标的设备描述符的例子,供大家分析一下:
表7、一种鼠标的设备描述符示例
字段描述符值(十六制)
bLength0x12
bDecriptorType0x01
bcdUSBx0110
bDeviceClass0x00
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:保留(设为一)
一个既用总线电源又有自给电源的设备会在MaxPower域指出需要从总线取的电量。并设置D6为一。运行时期的实际电源模式可由GetStatus(DEVICE)请求得到。
8MaxPower1 mA在此配置下的总线电源耗费量。以2mA为一个单位。
下面是一种硬盘的配置描述符示例:
表9、一种硬盘的配置描述符示例
字段描述符值(十六进制)
bLength0x09
bDescriptorType0x02
wTotalLength0x01F
bNumInterfaces0x01
bCongfigurationValue0x01
iConfiguration0x00
bmAttributes0x0C
MaxPower0x32
3、接口描述符
  配置描述符中包含了一个或多个接口描述符,这里的“接口”并不是指物理存在的接口,在这里把它称之为“功能”更易理解些,例如一个设备既有录音的功能又有扬声器的功能,则这个设备至少就有两个“接口”。
  如果一个配置描述符不止支持一个接口描述符,并且每个接口描述符都有一个或多个端点描述符,那么在响应USB主机的配置描述符命令时,USB设备的端点描述符总是紧跟着相关的接口描述符后面,作为配置描述符的一部分被返回。接口描述符不可直接用Set_Descriptor和Get_Descriptor来存取。
  如果一个接口仅使用端点0,则接口描述符以后就不再返回端点描述符,并且此接口表现的是一个控制接口的特性,它使用与端点0相关联的默认管道进行数据传输。在这种情况下bNumberEndpoints域应被设置成0。接口描述符在说明端点个数并不把端点0计算在内。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top