USB的设备描述符

1.设备描述符

每个USB设备都有有且仅仅有一个设备描述符,它也是主机与设备连接时候读取到的第一个描述符,其总长度为18字节,一共包含了14个字段

42ad414ac5ce4f75ad215d0cb4e74dbc.png

44a3eb08f7fa4a9584f976b9d03fd4d6.png

28fcebe44d634c2e8c70af80cee92ca4.png

第一个字段(bLength)代表设备描述符的长度,固定为18字节(0x12),所有标准描述符的第一个字节都代表相应描述符的长度信息。

第二个字段(bDescriptorType)表示描述符的类型。USB主机就是通过该字段进行描述符类型的区分的。如下表,所以这字段的值为0x01.

be7e205f752840a6b0f9665dedff0c38.png

第三个字段(bcdUSB)表示USB设备所遵守的USB规范版本号,其长度为2字节,并且以BCD码给出,相应的格式为0xJJMN,JJ为主版本号,M为次版本号,N为子次版本号,例如USB的版本号为2.0,则相应的字段为0x0200.这是小端模式,低字节在前,高字节在后,

第四个字段(bDeviceClass)表示该USB设备所属的设备类,当该字段值为0xFF时,表示其是由厂商自定义的设备类,当为0的时候,表示USB设备各个接口相互独立,分别属于不同的设备类,也就是说你的接口可以使用相同或不同的设备类,我们称为复合设备,这取决于你的设备定义。

当该字段数值是0x01到0xFE的时候,表示设备在不同接口支持不同的类,各个接口只能属于相同的设备类,只能是音频类,人机接口设备类等等

3779bab82bd9457ca08b66614165a7bb.png

第五个字段(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设备所支持的配置数量。

 

 

 

  • 27
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值