USB开发基础:USB命令(请求)和USB描述符
时间:12-13
来源:互联网
点击:
表10、USB接口描述符的结构 | ||||
偏移量 | 域 | 大小 | 值 | 说明 |
0 | bLength | 1 | 数字 | 此表的字节数 |
1 | bDescriptorType | 1 | 常量 | 接口描述表类(此处应为0x04) |
2 | bInterfaceNumber | 1 | 数字 | 接口号,当前配置支持的接口数组索引(从零开始)。 |
3 | bAlternateSetting | 1 | 数字 | 可选设置的索引值。 |
4 | bNumEndpoints | 1 | 数字 | 此接口用的端点数量,如果是零则说明此接口只用缺省控制管道。 |
5 | bInterfaceClass | 1 | 类 | 接口所属的类值: 零值为将来的标准保留。 如果此域的值设为FFH,则此接口类由厂商说明。 所有其它的值由USB说明保留。 |
6 | bInterfaceSubClass | 1 | 子类 | 子类码 这些值的定义视bInterfaceClass域而定。 如果bInterfaceClass域的值为零则此域的值必须为零。 bInterfaceClass域不为FFH则所有值由USB所保留。 |
7 | bInterfaceProtocol | 1 | 协议 | 协议码:bInterfaceClass和bInterfaceSubClass域的值而定.如果一个接口支持设备类相关的请求此域的值指出了设备类说明中所定义的协议. |
8 | iInterface | 1 | 索引 | 描述此接口的字串描述表的索引值。 |
表11、USB协议定义的接口类别(bInterfaceClass) | |
值(十六进制) | 类别 |
0x01 | 音频类 |
0x02 | CDC控制类 |
0x03 | 人机接口类(HID) |
0x05 | 物理类 |
0x06 | 图像类 |
0x07 | 打印机类 |
0x08 | 大数据存储类 |
0x09 | 集线器类 |
0x0A | CDC数据类 |
0x0B | 智能卡类 |
0x0D | 安全类 |
0xDC | 诊断设备类 |
0xE0 | 无线控制器类 |
0xFE | 特定应用类(包括红外的桥接器等) |
0xFF | 厂商定义的设备 |
端点是设备与主机之间进行数据传输的逻辑接口,除配置使用的端点0(控制端点,一般一个设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了数据的传输类型、传输方向、数据包大小和端点号(也可称为端点地址)等。
除了描述符中描述的端点外,每个设备必须要有一个默认的控制型端点,地址为0,它的数据传输为双向,而且没有专门的描述符,只是在设备描述符中定义了它的最大包长度。主机通过此端点向设备发送命令,获得设备的各种描述符的信息,并通过它来配置设备。
表12、USB端点描述符的结构 | ||||
偏移量 | 域 | 大小 | 值 | 说明 |
0 | bLength | 1 | 数字 | 此描述表的字节数长度 |
1 | bDescriptorType | 1 | 常量 | 端点描述表类(此处应为0x05) |
2 | bEndpointAddress | 1 | 端点 | 此描述表所描述的端点的地址、方向: Bit 3..0 :端点号. Bit 6..4 :保留,为零 Bit 7:方向,如果控制端点则略。 0:输出端点(主机到设备) 1:输入端点(设备到主机) |
3 | bmAttributes | 1 | 位图 | 此域的值描述的是在bConfigurationValue域所指的配置下端点的特性。 Bit 1..0 :传送类型 00=控制传送 01=同步传送 10=批传送 11=中断传送 所有其它的位都保留。 |
4 | wMaxPacketSize | 2 | 数字 | 当前配置下此端点能够接收或发送的最大数据包的大小。 对于实进传输,此值用于为每帧的数据净负荷预留时间。在实际运行时,管道可能不完全需要预留的带宽,实际带宽可由设备通过一种非USB定义的机制汇报给主机。对于中断传输,批量传输和控制传输,端点可能发送比之短的数据包 |
6 | bInterval | 1 | 数字 | 周期数据传输端点的时间间隙。 此域的值对于批传送的端点及控制传送的端点无意义。对于同步传送的端点此域必需为1,表示周期为1ms。对于中断传送的端点此域值的范围为1ms到255ms。 |
表13、一种鼠标的端点描述符示例 | |
域 | 值(十六进制) |
bLength | 0x07 |
bDescriptorType | 0x05 |
bEndpointAddress | 0x81 |
bmAttributes | 0x03 |
wMaxPacketSize | 0x04 |
bInterval | 0x0A |
字符串描述符是一种可选的USB标准描述符,描述了如制商、设备名称或序列号等信息。如果一个设备无字符串描述符,则其它描述符中与字符串有关的索引值都必须为0。字符串使用的是Unicode编码。
主机请示得到某个字符串描述符时一般分成两步:首先主机向设备发出USB标准命令Get_Descriptor,其中所使用的字符串的索引值为0,设备返回一个字符串描述符,此描述符的结构如下:
表14、USB字符串描述符(响应主机请求时返回的表示语言ID的字符串描述符) | ||||
偏移量 | 域 | 大小 | 值 | 描述 |
0 | bLength | 1 | N+2 | 此描述表的字节数 |
1 | bDescriptorType | 1 | 常量 | 字串描述表类型(此处应为0x03) |
2 | wLANGID[0] | 2 | 数字 | 语言标识(LANGID) 码0 |
… | … | … | … | … |
N | wLANGID[x] | 2 | 数字 | 语言标识(LANGID) 码X |
主机根据自己需要的语言,再次向设备发出USB标准命令Get_Descriptor,指明所要求得到的字符串的索引值和语言。这次设备所返回的是Unicode编号的字符串描述符,其结构如下:
USB开发基础USB命令USB描述 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)