当USB device 插入,和 host 连接后,host 会对 device 进行枚举。
通过枚举:获取设备的描述符信息。(主机根据此信息,加载对应驱动,确定通信方式等等)
- 枚举过程如下:
1、usb host 检测到 usb device 插入后,发送总线复位信号,复位 device。
device 复位完成后,地址为0。
host 向 地址0 的 endpoint 0 发送数据,请求设备描述符。
device 收到主机请求后,发送 设备描述 给 host。
host 接收并确认 device 发来的设备描述符后,向 device 回发一个 确认数据包(ACK)。
2、host 再次复位 device,进入地址设置阶段。
host 向 地址0 的 endpoint 0 发送设置地址请求数据包,包里就存放着 新的设备地址,因此无数据过程。
device 收到后,向 host 回发一个0字节的状态数据包。
host 收到这个 0字节状态数据包 以后,向 device 会发一个确认包(ACK)。
device 在收到这个ACK包后,就开始使用新的地址了。
3、host 向 新的设备地址 endpoint 0 发送请求设备描述符包,这一次 host 要获取整个设备描述符。
4、类似于 步骤3,host 接下来以此获取 配置描述符、配置集合、字符串描述符 等等