总线上suspended stop事件发起端
我有个疑惑,在主机端挂一个空闲的hub,待hub枚举完成后,hub后级插入一usb设备,此时主机和hub之间会受到一个suspended stop消息,该消息是如何产生的?处理流程是什么样的?
你这个背景感觉有点问题。
从你的抓包来看,看着像系统要休眠时,通过发送SET_FEATURE(REMOTE_WAKEUP),使能设备休眠唤醒特性,然后系统进行休眠模式。不过休眠前,肯定要先让设备份suspend.
不过由于某种原因,又被唤醒了,即设备收到了RESUME信号,唤醒了设备。这时主机同时下发CLEAR_FEATURE,再次禁止该特性。
更多的关于休眠唤醒可以参见:
- USB设备远程唤醒RemoteWakeUp http://www.usbzh.com/article/detail-1083.html
- USB设备的休眠挂起及远程唤醒 http://www.usbzh.com/article/detail-189.html
- USB设备复位、挂起和恢复命令 http://www.usbzh.com/article/detail-850.html
下面是本人抓的一个USB键盘在设备休眠时收到的数据,只不过当用此键唤醒主机时是通过复位重新枚举让系统再次识别:
另附一张通过另一个设备唤醒主机时的抓包图:
从实际应用来说,这背景应该不算问题,毕竟hub支持remotewakeup功能时,且hub上未挂载设备时,该总线上的相关功能可以跑到suspended mode,以降低功耗。待hub上有设备接入时,只需要hub端发起退出suspended mode,总线再进入正常工作状态即可。