USB Enumerate
USB Enumerate
USB 枚举
当USB 设备与USB 主机连接以后主机就会对USB 设备进行枚举,通过枚举来获取设备的
描述符信息,主机得到这些信息以后就知道该加载什么样的驱动、如何进行通信等。
USB设备插入USB接口后,主机通过检测D+/D-线上的电压,来确认有设备连接。
在设备的枚举过程中都是使用控制传输,也就是由多次控制传输配合完成。
一次控制传输:
建立阶段:setup令牌包 数据包 握手包
数据阶段:in/out令牌包 数据包 握手包
状态阶段:in/out令牌包 握手包
USB 枚举过程如下:
1. 第一回合,当USB 主机检测到USB 设备插入以后主机会发出总线复位信号来复位设
备。USB 设备复位完成以后地址为0,主机向地址0 的端点0 发送数据,请求设备的描述符。
设备得到请求以后就会按照主机的要求将设备描述符发送给主机,主机得到设备发送过来的设备描述符以后,如果确认无误就会向设备返回一个空数据包回复。

2. 第二回合,主机再次复位设备,进入地址设置阶段。主机向地址0 的端点0 发送设置
地址请求数据包,新的设备地址就包含在这个数据包中,因此没有数据过程。设备进入状态过
程,等待主机请求状态返回,收到以后,设备就会向主机发送一个0 字节状态数据包,表明设备
已经设置好地址了,主机收到这个0 字节状态数据包以后会返回一个确认包(ACK)。设备收到
主机发送的ACK 包以后就会使用这个新的设备地址,至此设备就得到了一个唯一的地址。

3. 第三回合,主机向新的设备地址端点0 发送请求设备描述符数据包,这一次主机要获
取整个设备描述符,一共是18 个字节。

这次与第一次获取设备描述符区别有2点:
1)使用先分配的设备地址
2)获取到设备描述符一定要是完整的18字节,第一次获取的是要求至少8字节
4. 和第3步类似,接下来依次获取配置描述符、配置集合、字符串描述符等等。

分析工具:USB Packet Viewer
参考资料:
USB Packet Viewer教程 - USB中文网 - https://www.usbzh.com/article/forum-73.html
Linux USB 驱动实验_linux otg-CSDN博客 - https://blog.csdn.net/zhuguanlin121/article/details/129846018
END!
浙公网安备 33010602011771号