一. 概述
常见的 USB 设备如键盘鼠标都需做睡眠唤醒功能,其目的是电源管理降低功耗。实现该功能主要涉及到 USB 挂起(Suspend)、恢复(Resume)、远程唤醒(Remote Wakeup)等。本文将会简要介绍其相关概念,并且基于 NXP LPC5528 Mouse 挂起恢复例程描述其睡眠唤醒关键代码。
二. 设备挂起(Suspend)
在 USB 系统中,正常状态下 hub 或 root hub 会一直周期性地发送 SOF 包(Start Of Frame,全速 USB 每 1ms 发送一个,高速 USB 则 125µs 发送一个)。若 USB 线上一直处于空闲状态超过 3ms,设备则认为这是一个挂起信号,设备需要在 10ms 内进入挂起状态,并把所需的电流大小降到规定的值。当 USB 设备处于挂起状态时,它仍然为其 D+或 D-上拉电阻器供电,以保持空闲状态并保持其内部状态,包括地址和配置。当它被 USB总线上的恢复信号唤醒时,不再需要经过重新枚举过程。如下图为全速设备 Suspend 总线状态。
图 1