USB---设备描述符

在USB上电枚举的过程中,有几个描述符是经常要用到的,它们分别是:设备描述符、配置描述符、接口描述符、端点描述符、HID描述符、字符串描述符以及语言ID描述符,最后是报告描述符。

其中设备描述符是USB主机申请的第1个描述符,然后配置描述符,接口描述符端点描述符hId描述符,以配置集合的形式返回给USB主机。字符串描述符是可选的,它和语言ID描述符一起发送给主机,告诉主机当前设备的名称是什么。

所谓描述符其实就是C语言里面的数组,数组里包含的信息说明当前的设备具有哪些特征。每个设备有且仅有一个设备描述符,设备描述符的长度是18字节,它的结构我们可以通过下面的表格来描了解。

注意:USB协议中,数据格式使用“小端”模式,所以多个字节排列时,低位在前。

18个字节,包含14项内容,通过表格中的说明,我们可以获取很多信息。

bLength,不用说了,0x12=18

bDescriptorType,描述符类型。总共有哪些描述符?我们通过下面代码可以看出:

#define USB_DESC_TYPE_DEVICE 0x01U

#define USB_DESC_TYPE_CONFIGURATION 0x02U

#define USB_DESC_TYPE_STRING 0x03U

#define USB_DESC_TYPE_INTERFACE 0x04U

#define USB_DESC_TYPE_ENDPOINT 0x05U

#define USB_DESC_TYPE_DEVICE_QUALIFIER 0x06U

#define USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION 0x07U

#define USB_DESC_TYPE_BOS 0x0FU

bcdUSB,USB协议版本。如果是USB2.0,写成:

0x00,0x02

如果是USB1.1,写成

0x10,0x01

bDeviceClass和bDeviceSubClass,也就是类代码和子类代码,大部分情况下,这两个值都是0.

bDeviceProtocol,当bDeviceClass和bDeviceSubClass为0时,它也是0.

bMaxPackeSize0,USB协议中有一个端点的定义,你可以理解为通道。

至于最大包长,说白了就是一次最多传多少个字节。USB协议里有规定,端点0最低8字节,不能再少了。

厂商ID,就是个2字节的编号,由USB协议分配,厂商申请时需要交费。自己随便写的话,仅限于学习、测试的情况下,不能用做产品。

产品ID,厂家自己随便定义。

bcdDevice,设备版本,厂家根据自己产品的版本来定义。

后面三个:描述厂商的字符串的索引、描述产品的字符串的索引、产品序列号字符串的索引,如果是0,表示程序里没有这三项内容。如果想添加,这里按顺序设置索引号为1、2、3。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值