USB枚举及其描述符(2)— 通用 USB 设备描述符

参考文章:
1.https://www.usbzh.com/article/detail-104.html
本文章参考了USB中文网的资料,以及个人的一些抓包数据。
由于本人水平有限,USB协议也是一边学习一边写笔记,文章中可能会有错误以及不准确的地方,希望广大网友帮我指正,大家一起学习一起进步。

USB设备描述符是USB设备在进行插拔和初始化过程中,最先被主机读取的一部分信息,它包含了设备的一些基本属性信息,如USB规范版本、设备类、设备子类、设备协议、最大数据包长度等。

USB设备描述符通常是在设备插入时被主机读取,在获取到设备描述符后,主机可以自动加载相应的驱动程序,完成设备的初始化和配置。

设备描述符是USB设备的第一个描述符,每个USB设备都得具有设备描述符,且只能拥有一个。

每个USB设备有且只能有一个设备描述符

设备描述符的定义:

在这里插入图片描述
在这里插入图片描述
操作系统使用bDeviceClass、bDeviceSubClass和bDeviceProtocol来查找设备的类驱动程序。通常只有 bDeviceClass 设置在设备级别。大多数类规范选择在接口级别标识自己,因此将 bDeviceClass 设置为 0x00。这允许一个设备支持多个类,即USB复合设备。

在USB官网当中,包含了对各种类的定义:
网站如下:https://www.usb.org/defined-class-codes
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
对于此网站的类的定义,大家可以自行去翻译查看,下面贴出我学习翻译的截图,仅供大家参考(字有点丑,一些记录没有什么用处,希望大家不要介意),建议还是去官网查看一下
在这里插入图片描述

代码中设备描述符的应用:

下面是抓包的数据:
第一次获取设备描述时,实际上系统只是取前8字节的设备描述符
在这里插入图片描述
后续再次获取一次18字节的设备描述符

值得注意的地方:

在设备描述符中的定义设备类的3的变量,需要严格参考官网中的需求,同时,当bDeviceClass定义为0x00的时候,此时说明接口是独立的,各个接口分别支持什么类,需要前往接口描述符中查看,这也有可能会产生冲突,例如若想将bDeviceClass定义为0xFF(厂商自定义),同时又想增加HID功能(HID功能需要将bDeviceClass定义为0x00,在接口描述符中查看接口的功能),两者是相互冲突的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HwanVeMen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值