USB HID设备枚举过程
一. 枚举过程
- USB设备插入检测,硬件上全速设备D+线上有1.5K上拉电阻,可便于USB主机检测到有设备连上。
- 等待稳定供电后,USB主机会对设备复位,即BusReset,复位后,主机将使用地址0与设备通信。
- USB主机将向地址0设备的Endpoint 0 发送获取设备描述符的标准请求,设备收到该请求后,会按照主机请求的参数,在数据过程将设备描述符返回给主机,主机在成功获取到一个数据包的设备描述符后并确认没有错误后,就会返回一个0长度的确认数据包给设备。
- 主机再次BusReset,进入地址设置阶段,主机发送Set Address请求,请求中携带新分配的地址,USB设备收到新地址后将返回0长度的状态数据包确认收到新地址。
- 主机再次获取设备描述符,此次将使用新配置的地址进行通信。
- 主机获取配置描述符,配置描述符为9字节。主机在获取到配置描述符后,根据配置描述符中所描述的配置集合总长度,获取配置集合。获取配置描述符和获取配置描述符集合的请求一致,只是指定的长度不一样,配置描述符集合包括配置描述符、接口描述符、类特殊描述符、端点描述符等。后续还会获取String Descriptor等。
- 对于HID类设备,主机还将发送HID请求如Set Idle等。并继续获取报告描述符。
- 完成获取上述描述符后,主机将可以确定USB设备的类型、VID、PID、接口、端点等信息,后续就可以正常通信。
二. 设备状态图
为了更清晰的了解枚举过程,也可以参考下图设备状态的变化过程,此图截自USB 2.0官方规格文档。