USB Suspend and Resume 协议介绍

一、概述

本文主要对 USB Suspend 和 Resume 的协议进行介绍,包括 USB 的空闲状态,挂起状态以及 USB 的唤醒。

二、USB 设备的休眠唤醒

2.1 USB 设备的连接

USB 设备和主机之间的信号通信,主要是通过 D+、D- 两个差分信号线进行通信的,对于全速和高速 USB,他们之间的电路连接如下:

2.2 USB 信号电平

在 USB 2.0 协议中经常会看到 J、K 状态,SEO,差分信号 1、Idle 状态等术语,这是根据 D+、D- 差分信号线上的电平信号来决定的。对不同的 USB 设备速度,差分信号线上 J、K 等状态的电平也会不同,下表则列出了在低速、全速、高速下 USB 状态对应的电平信号。



接下来则以全速 USB 为例,讲解 USB Suspend 和 Resume 的协议。

2.3 全速 USB 的 Suspend

在 USB 系统中,正常状态下主机会一直以微帧的间隔(全速为 1ms,高速为 125us)发送 SOF 包。若 USB 线上一直处于 Idle 状态超过 3ms,设备则认为这是一个挂起信号,设备需要在 10ms 内进入挂起状态,差分信号线上电平状态如下图所示。

USB 设备挂起时,可以停止设备的时钟,以进入低功耗模式。在挂起状态中,设备仍需继续向 D+/D- 的上拉电阻提供电压以保持 Idle 状态。

2.4 全速 USB 的 Resume 唤醒

在设备处于 Suspend 的状态下,若需要将设备退出 Suspend 状态,主机 host 需要向设备发送持续时间超过 20ms 的 Resume 信号,并且以 EOP 信号结尾,设备将在 Resume 信号结束后醒过来。在设备醒过来后,host 需要在 3ms 内发送 SOF 信号,以维持正常的通信模式,避免设备重新进入 Suspend 状态。

2.5 全速 USB 的远程唤醒

对于普通的 Resume 唤醒,是由主机 host 唤醒 USB 设备,但同样,设备也可以唤醒主机 host,例如电脑休眠时,可以通过 USB 键盘唤醒主机,这种功能称为远程唤醒。
 
使用远程唤醒功能,需要 USB 设备支持远程唤醒功能,并且在配置描述符的设置中,将 USB 设备支持远程唤醒能力报告给主机。
 
通过 USB 设备远程唤醒主机时,USB 设备会生成一个 1ms-15ms 的 Resume 信号,host 在 1ms 内捕获到该信号,并且主机控制器对唤醒操作进行接管,继续产生 Resume 信号直到 20ms,并以 EOP 信号结尾。完成对设备的唤醒。

2.6 USB 休眠唤醒 Application layer

在 NXP USB 例程代码中,将休眠远程唤醒功能在应用层上分成如下图所示的状态机,主要分为 Idle、Suspend、Resume 三大状态,在 Suspend 和 Resume 中又在细分了 Suspending、Suspended 和 StartResume、Resumed,可以在对应的状态中添加代码打印调试信息或关闭/开启芯片的功能外设。

三、总结

本文介绍了不同速度下 USB 状态对应的差分电平信号,并以全速 USB 为例,讲解 USB Suspend 和 Resume 的协议机制,并简单介绍了 NXP USB 例程中,休眠和远程唤醒的状态机。


参考资料:

1、《USB 2.0 Specification》, USB 2.0 Specification | USB-IF
2、《USB 设备的休眠挂起及远程唤醒》, USB设备的休眠挂起及远程唤醒 - USB中文网 (usbzh.com)
3、《 How to Implement USB Suspend/Resume Feature with MCUXpresso SDK USB Stack

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论