1、USB描述符
USB协议为USB设备定义了一套描述设备功能和属性的有固定结构的描述符。USB设备通过这些描述符向USB主机汇报设备的各种各样属性,主机通过对这些描述符的访问对设备进行类型识别、配置并为其提供相应的客户端驱动程序。USB描述符是由特定格式排列的一组数据结构组成。USB描述符包含标准描述符、类描述符和厂商特定描述3种形式。标准描述符包括设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(InterfaceDescriptor)、端点描述符(Endpoint Descriptor)和字符串描述符(String Descriptor)。类描述符包括集线器类描述符(HubDescriptor)和人机接口类描述符(HID)。
| 描述符类型bDescriptorType |
||
| 类型 |
描述符 |
描述符值 |
| 标准描述符 |
设备描述符(Device Descriptor) |
0x01 |
| 配置描述符(Configuration Descriptor) |
0x02 |
|
| 字符串描述符(String Descriptor) |
0x03 |
|
| 接口描述符(Interface Descriptor) |
0x04 |
|
| 端点描述符(Endpoint Descriptor) |
0x05 |
|
| 设备限定(Device Qualifier) |
0x06 |
|
| Other Speed Configuration |
0x07 |
|
| Interface Power |
0x08 |
|
| 类描述符 |
集线器类描述符(Hub Descriptor) |
0x29 |
| 人机接口类描述符(HID) |
0x21 |
|
| 厂商定义的描述符 |
|
0xFF |
每个USB设备只有一个设备描述符,而一个设备中可包含一个或多个配置描述符,即USB设备可以有多种配置。设备的每一个配置中又可以包含一个或多个接口描述符,即USB设备可以支持多种功能(接口),接口的特性通过描述符提供。
在USB主机访问USB设备的描述符时,USB设备依照设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符顺序将所有描述符传给主机。一设备至少要包含设备描述符、配置描述符和接口描述符,如果USB设备没有端点描述符,则它仅仅用默认管道与主机进行数据传输。
在USB设备枚举过程中,主机端的协议软件需要解析从USB设备读取的所有描述符信息。在USB主向设备发送读取描述符的请求后,USB设备将所有的描述符以连续的数据流方式传输给USB主机。主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。
1.1 设备描述符
设备描述符具有18字节的长度,是主机向设备请求的第一个描述符。
| USB设备描述符的结构 |
|||
| 偏移量 |
域 |
大小 |
描述 |
| 0 |
bLength |
1 |
设备描述符的字节数大小 |
| 1 |
bDescriptorType |
1 |
描述符类型,设备描述符为0x01 |
| 2 |
bcdUSB |
2 |
USB版本号 |
| 4 |
bDeviceClass |
1 |
USB分配的设备类代码,0x01~0xfe为标准设备类,0xff为厂商自定义类型 |
| 5 |
bDeviceSubClass |
1 |
USB分配的子类代码 |
| 6 |
bDeviceProtocol |
1 |
USB分配的设备协议代码 |
| 7 |
bMaxPacketSize0 |
1 |
端点0的最大信息包大小 |
| 8 |
idVendor |
2 |
制造商ID |
| 10 |
idProduct |
2 |
产品ID |
| 12 |
bcdDevice |
2 |
设备出厂编号 |
| 14 |
iManufacturer |
||

本文深入探讨USB描述符,包括设备描述符、配置描述符、字符串描述符、接口描述符和端点描述符。同时介绍了USB命令请求,如清除特性、获取描述符、设置地址和设置状态,详述了USB设备与主机间通信的关键过程。
最低0.47元/天 解锁文章
1300

被折叠的 条评论
为什么被折叠?



