USB 枚举的详细流程 附一个很好的枚举过程的详细流程: ◆
用户将一个USB 设备插入 USB 端口,主机为端口供电,设备此时处于上电状态
主机检测设备
集线器使用中断通道将事件报告给主机
主机发送 Get_Port_Status(读端口状态)请求,以获取更多的设备信息
集线器检测设备是低速运行还是高速运行,并将此信息送给主机,这是对 Get_Port_Status 请求的响应
主机发送 Set_Port_Feature(写端口状态)请求给集线器,要求它复位端口
集线器对设备复位
主机使用 Chirp K 信号来了解全速设备是否支持高速运行
主机发送另一个Get_Port_Status 请求,确定设备是否已经从复位状态退出
设备此时处于缺省状态,且已准备好在零端点通过缺省通道响应主机控制传输
缺省地址为 00h,设备能从总线获取高达 100mA 的电流
主机发送 Get_Descriptor(读设备描述符)报文,以便确定最大数据包大小
设备描述符的八个字节是 bMaxPacketSize
通过发送 Set_Address(写地址)请求,主机分配地址,设备此时处于地址状态
主机发送 Get_Descriptor 报文,以获取更多的设备信息
主机通过发送描述符响应设备请求,随后发送全部的次级描述符
主机分配并加载设备驱动程序
通过发送 Set_Configuration(写配置)请求,主机的设备驱动程序选择一个有效配置,设备此时处于配置状态
主机为复合设备接口分配驱动程序
如果集线器检测到有过流现象,或者主机要求集线器关闭电源,则 USB 总线切断设备供电电源
在这种情况下,设备与主机无法通信,但设备处于连接状态
如果在 3 毫秒内设备在总