USB协议 为 USB设备 定义了一套描述 设备功能和属性 的 有固定结构 的描述符,包括标准描述符
(设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符)和非标准描述符
(如类描述符、厂商自定义的描述符)。
USB设备 通过这些描述符向USB主机汇报设备的各种各样属性,主机通过访问这些描述符对设备进行类型识别、配置并为其提供相应的客户端驱动程序。
USB设备 通过描述符反映自己的设备特性。USB描述符是由特定格式排列的一组数据结构组成。
在USB设备枚举过程中,主机端的协议软件需要解析从USB设备读取的所有描述符信息。当USB主机向设备发送读取描述符的请求后,USB设备将所有的描述符以连续的数据流方式传输给USB主机。主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。
在 USB1.X 中,规定了5种标准描述符:
- 设备 描述符(Device Descriptor) //必须
- 配置 描述符(Configuration Descriptor) //必须
- 接口 描述符(Interface Descriptor)//必须
- 端点 描述符(Endpoint Descriptor)
- 字符串 描述符(String Descriptor)
上面5种标准描述符之间的关系:
1个USB设备只有1个设备描述符
;1个设备中可包含1个或多个配置描述符
,即USB设备可以有多种配置;- 设备的
1个配置中又可以包含1个或多个接口描述符或端点描述符
,即USB设备可以支持多种功能(接口),接口的特性通过描述符提供;
在USB主机访问USB设备描述符时,USB设备 依照 设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符顺序将所有描述符传给主机。
一个USB设备至少要包含 设备描述符、配置描述符和接口描述符,如果USB设备没有端点描述符,则它仅仅用默认管道与主机进行数据传输。
下面介绍的5个描述符统称标准描述符,它们有一个共同点,就是前面2B都是描述符长度和描述符类型,如下所示:
字段名 | 大小 | 类型 | 描述 |
---|---|---|---|
bLength | 1 | 数字 | 描述符长度(固定为0x12 ,即18字节) |
bDescriptorType | 1 | 常量 | 描述符类型(设备描述符固定为0x01 ) |