USB枚举

标准请求

标准USB设备请求命令共有11个,大小都是8个字节,具有相同的结构

USB枚举_第1张图片

ID 请求码 说明
0 GET_STATUS 用来返回特定接收者的状态
1 CLEAR_FEATURE 用来清除或禁止接收者的某些特性
3 SET_FEATURE 用来启用或激活命令接收者的某些特性
5 SET_ADDRESS 用来给设备分配地址
6 GET_DESCRIPTOR 用于主机获取设备的特定描述符
7 SET_DESCRIPTOR 修改设备中有关的描述符,或者增加新的描述符
8 GET_CONFIGURATION 用于主机获取设备当前设备的配置值(注同上面的不同)
9 SET_CONFIGURATION 用于主机指示设备采用的要求的配置
10 GET_INTERFACE 用于获取当前某个接口描述符编号
11 SET_INTERFACE 用于主机要求设备用某个描述符来描述接口
12 SYNCH_FRAME 用于设备设置和报告一个端点的同步帧

 

 

枚举过程

USB设备枚举一般会经过插入、供电、初始化、分配地址,配置,获取设备描述符、获取配置描述符、获取字符串描述符和配去置设备这么几个过程。
USB枚举_第2张图片

 

从下图可以看出,两次复位的过程。

USB枚举_第3张图片

 

在两次复位中间,红圈画出的是多个同步帧。蓝圈内有密集的数据交互,可以推断出这里是获取设备描述符前8字节阶段,是一次控制传输。

USB枚举_第4张图片

先看该控制传输的建立过程,这是一次获取设备描述符的请求,由于不知道设备描述符长度,请求长度为0x40。

USB枚举_第5张图片

USB枚举_第6张图片
该控制传输的数据过程,返回设备描述符的内容。

USB枚举_第7张图片

 

第二次复位之后,首先设置地址:0x0C

USB枚举_第8张图片

 

由于已经设置完地址,所以开始使用新地址,再次获取设备描述符。第一次获取设备描述之后已经得知设备描述符长度,可以发现本次获取长度变为0x12。

USB枚举_第9张图片

USB枚举_第10张图片

 

获取配置描述符

USB枚举_第11张图片

 

获取字符串描述符

USB枚举_第12张图片

USB枚举_第13张图片

USB枚举_第14张图片

 

获取设备限定描述符

同时支持全速与高速的设备,必须有一个设备限定描述符。我的设备不支持高速模式,对该指令响应挂起。

USB枚举_第15张图片

USB枚举_第16张图片

 

然后又重新获取了设备描述符和配置描述符

USB枚举_第17张图片

USB枚举_第18张图片

 

设置配置号

USB枚举_第19张图片

 

我的设备是虚拟串口,下面开始CDC类相关操作

USB枚举_第20张图片

USB枚举_第21张图片

USB枚举_第22张图片

USB枚举_第23张图片

 

紧接着又重新获取了字符串描述符

USB枚举_第24张图片

USB枚举_第25张图片

USB枚举_第26张图片

 

你可能感兴趣的:(USB)