USB枚举的详细流程

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毫秒内设备在总线上未见任何动作,则它将进入挂起状态,在挂起状态设备消耗的总线电能最少。

还有一个差不多,如下:

1)集线器检测新设备

主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。当用USB线将PC和设备接通后,设备的上拉电阻使信号线的电位升高,因此被主机集线器检测到。)

(2)主机知道了新设备连接后

每个集线器用中断传输来报告在集线器上的事件。当主机知道了这个事件,它给集线器发送一个Get_Status请求来了解更多的消息。返回的消息告诉主机一个设备是什么时候连接的。

(3)集线器重新设置这个新设备

当主机知道有一个新的设备时,主机给集线器发送一个Set_Feature请求,请求集线器来重新设置端口。集线器使得设备的USB数据线处于重启(RESET)状态至少10ms。

(4)集线器在设备和主机之间建立一个信号通路

主机发送一个Get_Status请求来验证设备是否激起重启状态。返回的数据有一位表示设备仍然处于重启状态。当集线器释放了重启状态,设备就处于默认状态了,即设备已经准备好通过Endpoint 0 的默认流程响应控制传输。即设备现在使用默认地址0x0与主机通信。

(5)集线器检测设备速度

USB枚举的详细流程相关文档

最新文档

返回顶部