1.设备描述符
每个USB设备都有有且仅仅有一个设备描述符,它也是主机与设备连接时候读取到的第一个描述符,其总长度为18字节,一共包含了14个字段
第一个字段(bLength)代表设备描述符的长度,固定为18字节(0x12),所有标准描述符的第一个字节都代表相应描述符的长度信息。
第二个字段(bDescriptorType)表示描述符的类型。USB主机就是通过该字段进行描述符类型的区分的。如下表,所以这字段的值为0x01.
第三个字段(bcdUSB)表示USB设备所遵守的USB规范版本号,其长度为2字节,并且以BCD码给出,相应的格式为0xJJMN,JJ为主版本号,M为次版本号,N为子次版本号,例如USB的版本号为2.0,则相应的字段为0x0200.这是小端模式,低字节在前,高字节在后,
第四个字段(bDeviceClass)表示该USB设备所属的设备类,当该字段值为0xFF时,表示其是由厂商自定义的设备类,当为0的时候,表示USB设备各个接口相互独立,分别属于不同的设备类,也就是说你的接口可以使用相同或不同的设备类,我们称为复合设备,这取决于你的设备定义。
当该字段数值是0x01到0xFE的时候,表示设备在不同接口支持不同的类,各个接口只能属于相同的设备类,只能是音频类,人机接口设备类等等
第五个字段(bDeviceSubClass)表示设备所属的设备子类,主要就是进一步定义第四个字段(bDeviceClass)代表的设备类,如果bDeviceClass为0,则该字段也必须为0,如果为非0xFF,则该字段的所有值保留作为USB-IF组织分配。
第六个字段(bDeviceProtocol)表示USB设备所使用的设备类协议,也被定义在相应的设备类规范中,其值与第四个字段(bDeviceClass)和第五个字段(bDeviceSubClass)有关,也就是说这三个字段共同标识了设备的功能,到时候主机加载什么设备驱动就是依据这个,为0就是不使用设备类类型,为0xFF则表示设备类协议由厂商自定义。
第七个字段(bMaxPacketSize)表示USB设备端点0所支持的最大数据包的长度。低速设备为8字节,全速可以为8,16,32,64字节,高速设备直接为64字节。
第八个字段(idVendor)表示USB设备的厂商标识符(VID)
第九个字段(idProduct)表示产品表示符(PID)
VID是由厂商向USB-IF组织申请的,PID是可以供应商自己决定的
第十个字段(bcdDevice)表示设备的版本号
第十一个字段(imanufacturer)和第十二个字段(iproduct)分别表示厂商与产品字符串描述符的索引值。后面字符串描述符哪里会具体说一下。
第十三个字段(iserialNumber)表示设备序列号字符串描述的索引值,如果没有就是0,它可以区分多个相同设备,就是同一个USB系统连接了多个相同厂家生产的同一型号设备,这些设备的VID,PID,设备的版本号都是一样的,那该怎么区分,厂商会根据该iserialNumber字段中针对每一个产品设置不同的序列号即可,我们ST的官方例程也是这样做的,它根据单片机的唯一96位ID来设置iserialNumber字段。如果一个设备有序列号有序列号,当我们将他连接到一个PC的不同端口时,操作系统就不需要重新载入该设备的驱动。
最后一个字段(bNumConfigurations)表示该USB设备所支持的配置数量。
标签:表示,字节,版本号,描述符,设备,USB From: https://blog.csdn.net/Z1799369927/article/details/136767212