USB设备复位、挂起和恢复命令
USB主机除了在正常的操作期间发送到设备的控制命令外,主机还可以发出三种独特的信号条件:复位、挂起或恢复挂起的设备。
设备复位RESET
在枚举过程中,主机向设备发出复位信号。注意此USB 复位与硬件或上电复位不相同,是两个概念。USB 复位的目的是设置设备的软件状态,以便进行枚举。
当 D- 和 D+ 都保持低电平 (SE0) 10 ms 时,器件会识别复位条件。在某些情况下,器件能够在 2.5 µs 内检测到复位,但是,主机将在整个 10 ms 内保持复位条件。
为了初始化复位,集线器将 D+ 和 D- 保持在低电平。让集线器将数据线保持在低电平允许主机持续为其他设备提供服务,并避免设备因 D+ 和 D- 上缺乏活动而进入挂起模式。主机通过向集线器发出SET_PORT_FEATURE(PORT_RESET)控制命令使集线器复位设备。
挂起Suspend
当连续三个帧都没有接收到帧开始信号时,设备将进入挂起状态。当发生挂起时,设备中运行的应用软件通常会收到通知,并可能会采取措施降低功耗。在挂起模式下,设备将吸取不超过 50 毫安的电流。挂起的设备能够响应重置和恢复命令。
主机可以通过向连接到要挂起的设备的集线器发出
SET_PORT_FEATURE(PORT_SUSPEND)控制命令来使一个枚举设备挂起。
Resume恢复
当设备处于#挂起Suspend状态时,设备端口上的数据K状态意味着从暂停状态恢复。这意味着恢复信号是全速段中从数据J状态到数据K状态的变化。
恢复设备操作的顺序是在 D+ 和 D- 上产生 K 状态 20 ms。K 状态在 USB 规范中定义,由 USB 速度决定。
暂停的设备可以通过以下两种方式之一返回到运行状态(即恢复):
- 如果设备在 Suspend 状态至少 5 ms 后设置了远程恢复功能,则设备可以启动恢复正常操作的过程。要开始恢复,器件会在 D+ 和 D- 上断言 K 状态 1 到 15 ms。主机(即 HUB)将检测到此状态并在 1 毫秒内接管控制 D+ 和 D- 20 毫秒的剩余时间。20 ms 后,设备将恢复正常运行。
- 主机可以通过向连接到设备的集线器发送CLEAR_PORT_FEATURE(PORT_SUSPSEND)来恢复设备。这将导致集线器在 D+ 和 D- 上驱动 K 状态 20 毫秒。
下图显示了在运行暂停和恢复 HID 演示时捕获的 USB抓包日志。 在 PC 主机停止发送 SOF 使 USB 总线进入挂起状态之前,它会发出 Set Feature 请求以在 USB 设备上启用远程唤醒。 恢复信号的时序显示为 10 ms,如在 USB 堆栈中实现的那样。