- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
USB描述符的分类详解
所谓描述符,就是用于描述设备特性的具有特定格式排列的一种数据组织结构。
描述符的作用在于设备向主机汇报自己的信息、特征,主机根据这些信息从而加载相应的驱动程序。
描述符分为三大类:标准描述符、设备类描述符、厂商描述符。
标准描述符:除字符串描述符可选外,任何设备都必须包含剩下的几种标准描述符:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符
设备类描述符可划分为:集线器类描述符、人机接口类描述符
每个USB设备都有一个设备描述符,设备描述符里面决定了该设备有多少种配置,每种配置描述符对应着配置描述符;而在配置描述符中又定义了该配置里面有多少个接口,每个接口有对应的接口描述符;在接口描述符里面又定义了该接口有多少个端点,每个端点对应一个端点描述符;端点描述符定义了端点的大小,类型等等。
由此我们可以看出,USB的描述符之间的关系是一层一层的,最上一层是设备描述符,下面是配置描述符,再下面是接口描述符,再下面是端点描述符。在获取描述符时,先获取设备描述符,然后再获取配置描述符,根据配置描述符中的配置集合长度,一次将配置描述符、接口描述符、端点描述符一起一次读回。其中可能还会有获取设备序列号,厂商字符串,产品字符串等
描述符的类型值:
表1 . USB描述符的类型值类型描述符描述符值标准描述符设备描述符(Device Descriptor)0x01配置描述符(Configuration Descriptor)0x02字符串描述符(String Descriptor)0x03接口描述符(Interface Descriptor)0x04端点描述符(EndPont Descriptor)0x05设备限定描述符()0x06其他速率配置描述符()0x07设备类描述符集线器类描述符(Hub Descriptor)0x29人机接口类描述符(HID)0x21厂商定义的描述符0xFF
1 标准描述符
标准描述符是指一组描述符,包括设备描述符、配置描述符、字符串描述符、接口描述符、端点描述符、设备限定描述符和其他速率配置描述符。
这七种 描述符具有类似的格式,比如说它们的第一个字段都是bLength,第二个字段都是bDescriptorType。
七种描述符在使用时以第二字段(bDescriptorType)来区分,描述符类型与对应的bDescriptorType字段值对应关系为:
?1.1 设备描述符
设备描述符描述的是设备的整体信息,与设备本身一一对应,一个设备只能有一个设备描述符。在主机对USB设备枚举的过程中,首先要做的就是获取设备描述符,以对设备有一个整体的了解。设备描述符由14个字段组成,总长度18字节:
这些字段都有一个小写字母表示的前缀,它们所表示的意思如下:? b 表一个字节,=8bits;? w 表一个字,=16bits;? bm 表按位寻址;? bcd 用BCD码表示;? i 表索引值? id 表标识码
结构体定义
typedef struct _DEVICE_DCESCRIPTOR_STRUCT{?BYTE blength;?????????????????????????????? //设备描述符的字节数大小(18)?BYTE bDescriptorType;????????????????????? //设备描述符类型编号(1)?WORD bcdUSB;??????????????????????????????? //USB版本号?BYTE bDeviceClass;????????????????????????? //USB分配的设备类代码?BYTE bDeviceSubClass;??????????????????????//USB分配的子类代码?BYTE bDeviceProtocol;??????????????????????//USB分配的设备协议代码?BYTE bMaxPacketSize0;??????????????????????//端点0的最大包大小?WORD idVendor;????????????????????????????? //厂商编号?WORD idProduct;???????????????????????????? //产品编号?WORD bcdDevice;???????????????????????????? //设备出厂编号?BYTE iManufacturer;???????????????????????? //设备厂商字符串的索引?BYTE iProduct;
文档评论(0)