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