首页 > 其他分享 >USB2.0设备的休眠挂起及远程唤醒

USB2.0设备的休眠挂起及远程唤醒

时间:2024-09-22 21:01:11浏览次数:10  
标签:状态 USB 唤醒 休眠 信号 USB2.0 远程 设备

USB可见设备状态,分为连接(Attached),上电(Powered),默认(Default),地址(Address),配置(Configured)和挂起(Suspended)6个状态。所谓可见,即USB系统和主机可见的状态,其他状态属于USB设备内部而不可见。其中有关电源的,大致可分下面三类:

  • 连接状态(Attached):设备连接,但未提供电源。

  • 上电状态(Powered):设备被复位(Reset),或者说处于地址、配置状态。

  • 挂起状态(Suspended):3 ms未见总线活动而处于省电状态,设备不可用,但仍然保持原有的USB地址和配置。

USB设备的挂起

我们知道,在USB系统中,正常状态下hub或root hub会一直周期性地发送SOF包(Start Of Frame,全速USB每1ms发送一个,高速USB则是125µs发送一个)。根据USB协议,如果USB线上一直处于空闲(Idle)状态超过3ms,设备应该把它当作一个挂起(Suspended)信号,要求设备在10ms内进入挂起状态,并把设备所需的电流大小降到规定的值(对于low-power设备,要求是500 µA,而对于high-power或支持远程唤醒(remote wakeup)功能的设备是2.5mA。

  • 所在USB设备都应该支持挂起状态(Suspending State)。

  • USB设备可以从任意供电状态进入挂起状态。

  • USB设备从上游主机端口接收到持续的IDLE信号超过3.0ms时,USB设备应当认为这是一个挂起的信号,然后开始进入挂起状态。当所有端口无总线活动时,要求设备在10ms内进入挂起状态,并把设备所需的电流大小降到规定的值,即挂起电流值(对于low-power设备,要求是500 µA,而对于high-power或支持远程唤醒(remote wakeup)功能的设备是2.5mA。

  • USB设备面向上游的端口上的任何总线活动都将使其退出挂起状态。

  • 在没有任何其他总线流量的情况下,SOF令牌每(微)帧将发生一次,以防止全速/高速设备挂起。 在没有任何低速流量的情况下,低速设备将在每一帧中看到至少一个保持活动状态发生 SOF,使它们无法挂起。

  • 当处于挂起状态时,设备必须继续为其 D+(全速/高速)或 D-(低速)上拉电阻供电,以保持IDLE状态,以便上游集线器可以保持正确的设备连接状态

  • USB设备挂起时,可以停止设备的时钟,以进入低功耗模式。而当USB设备可以通过外部中断唤醒自身,然后再由USB设备唤醒主机。

在挂起状态中,设备必须继续向数据项D+/D-的上拉电阻提供电压以维持Idle状态。而对于USB2.0高速设备,还有些额外的要求:

  • 高速设备在收到挂起信号(3ms空闲)后,应在0.125ms内切换到全速状态,也就是说要把终端电阻移除,并在D+数据线上重新挂上1.5k上拉电阻。

  • 设备在随后的100-875µs内检测数据线上的状态。如果该状态是一个Full speed J,那么说明host发下来的是一个挂起信号;如果此时该状态是SE0,说明是host drive数据线D+到0,这是一个复位信号(复位信号会持续至少10ms时间)。

  • 要注意的是高速设备在挂起状态时处于高速模式,只是所用的是全速信号。一旦从挂起状态恢复回来,会马上进入高速工作状态而无需进行复位操作。

  • 当处于挂起状态时,设备必须继续为其 D+(全速/高速)或 D-(低速)上拉电阻供电,以保持IDLE状态,以便上游集线器可以保持正确的设备连接状态

  • USB设备挂起时,可以停止设备的时钟,以进入低功耗模式。而当USB设备可以通过外部中断唤醒自身,然后再由USB设备唤醒主机。

在挂起状态中,设备必须继续向数据项D+/D-的上拉电阻提供电压以维持Idle状态。而对于USB2.0高速设备,还有些额外的要求:

  • 高速设备在收到挂起信号(3ms空闲)后,应在0.125ms内切换到全速状态,也就是说要把终端电阻移除,并在D+数据线上重新挂上1.5k上拉电阻。

  • 设备在随后的100-875µs内检测数据线上的状态。如果该状态是一个Full speed J,那么说明host发下来的是一个挂起信号;如果此时该状态是SE0,说明是host drive数据线D+到0,这是一个复位信号(复位信号会持续至少10ms时间)。
    要注意的是高速设备在挂起状态时处于高速模式,只是所用的是全速信号。一旦从挂起状态恢复回来,会马上进入高速工作状态而无需进行复位操作。

  • USB主机使使用周期性的SOF或Keep alive(低速)阻止设备进入挂起状态。

    • For High-speed, SOF is sent every micro-frame 125us +/- 65ns
    • For Full-speed, SOF is sent every frame 1ms +/- 500ns
    • For Low-speed, Keep Alive (End of Packet) is sent every 1ms in absence of low-speed data
  • USB设备要退出【挂起模式】 可以由Host唤醒,或者自己唤醒。

  • 如果设备配置为高功率(高达 500 mA),并启用了远程唤醒功能,则在挂起期间允许消耗高达 2.5 mA 的电流。

设备的唤醒

设备处于挂起状态时,任何总线上的活动(非空闲信号)都可以把设备唤醒/恢复,从而退出低功耗模式。
因为设备挂起时处于全速信号,在当host需要把将设备退出suspend状态时,需要先发送一个持续时间超过20ms的Fulll Speed K状态。设备看到K状态结束的1.3us内醒过来,而host需要在3ms内发送uSOF信号以维持正常的高速信号模式,否则设备又将进入suspend。

当主机想要在挂起后唤醒设备时,它通过将数据线上的信号极性反转至少 20ms 来实现。该信号以分组信号的低速端完成。

具有远程唤醒功能集的设备也可以自行启动恢复。它必须处于空闲状态至少 5ms,并且必须在 1 到 15ms 之间应用唤醒 K 条件。主机在 1 ms 内接管恢复信号的驱动。

设备的远程唤醒

同样,设备也可以换醒host,比如电脑待机时通过USB键盘来换醒主机,这种功能称之为“远程唤醒”(remote wakeup)
配置描述符中,USB设备会将是否支持远程唤醒的能力报告给主机。

GetStatus返回请求

GetStatus()设备请求返回的信息,包含是否允许远程唤醒的信息。
详见:USB读取状态GET_STATUS

配置描述符中,偏移第7个字节的描述属性项,包含了设备是否支持远程的功能位。Bit5代表是否支持远程唤醒。

    ------------------ Configuration Descriptor -------------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x02 (Configuration Descriptor)
wTotalLength             : 0x010B (267 bytes)
bNumInterfaces           : 0x04 (4 Interfaces)
bConfigurationValue      : 0x01 (Configuration 1)
iConfiguration           : 0x00 (No String Descriptor)
bmAttributes             : 0xA0
 D7: Reserved, set 1     : 0x01
 D6: Self Powered        : 0x00 (no)
 D5: Remote Wakeup       : 0x01 (yes)
 D4..0: Reserved, set 0  : 0x00
MaxPower                 : 0x32 (100 mA)

禁用USB设备的远程唤醒

当然,也可通过 USB清除特性请求CLEAR_FEATURE 来禁止USB的远程唤醒功能。

USB远程唤醒的编程

如我们有一个STM32做的USB设备,通过外接GPIO按键触发实现远程唤醒PC主机。

Resume的代码其实是一个状态机,是将STM32远程唤醒的寄存器置高10ms,即10个EOF,然后再置低,以使USB设备通过D+/D-的电信号进行远程唤醒。

STM32寄存器定义将此位置高1-15ms,将进行远程唤醒操作。

USB远程唤醒的编程

当然,支持远程唤醒也是需要PC机的配合的,一般情况下是在BIOS中的电源管理进行配置。

标签:状态,USB,唤醒,休眠,信号,USB2.0,远程,设备
From: https://www.cnblogs.com/linhaostudy/p/18425855

相关文章

  • 数据飞轮:唤醒数据中台的奇幻之旅
    在这个数据搬运工数不胜数的时代,每个行业的佼佼者似乎都在玩一个名为“数据中台”的高级版乐高游戏。而数据飞轮,则是那个可以让乐高积木自动拼装起来,逐渐长成一座城堡的神奇马达。不信?让我们搭上一趟数据驱动的邮轮,看看数据飞轮究竟能否让数据中台焕发新的活力。智能推荐:猜你喜欢......
  • 数据飞轮实践:如何通过增长营销唤醒沉睡的数据中台
    在当今企业运营中,数据不仅是核心资产,也是推动企业成长的关键因素。尽管如此,许多公司的数据仍处于被动收集和存储状态,未能充分发挥其价值。本文将探讨如何在增长营销的背景下,利用数据飞轮的概念来激活这些沉睡的数据,从而实现数据和业务之间的正反馈循环。背景与挑战随着市场竞争的......
  • 数据飞轮如何在金融领域唤醒数据中台
    在现代金融行业中,数据的重要性不言而喻。它是决策支持、风险管理、客户服务和产品创新的基石。然而,想要从大量的数据中挖掘出价值并非易事。这就引入了数据飞轮的概念——一种能够加速数据能力自我增强的机制,将数据中台从静态的存储和处理变为动态的、能源自我增长的价值中心。数......
  • 数据飞轮在媒体行业的力量:唤醒数据中台,驱动业务增长
    在数据驱动的商业环境中,媒体行业面临日益加剧的竞争和不断变化的消费者偏好。这一行业特别依赖于能够从海量的数据中提取有价值的洞察来优化内容分发和用户互动。数据飞轮的概念应运而生,旨在通过持续的数据积累和利用,推动业务持续自我优化和增长。本文将探讨数据飞轮如何在媒体行业......
  • 数据驱动唤醒数据中台的数据
    大家好,我是一名大数据开发工程师。在我的职业生涯中,我见证并实际操作过从最初的数据仓库,到中期的数据中台,再到如今的数据飞轮的各个发展阶段。针对数据中台中的数据,如果无法有效利用这些数据来支持行业业务,那么数据中台就只是一个普通的数据仓库,数据仅仅占用了存储空间,而没有发挥应......
  • 唤醒数据中台潜力,加速数据飞轮转动
    唤醒数据中台潜力,加速数据飞轮转动背景数据飞轮是一种新兴的理念,它强调数据在企业中的动态循环和应用,通过数据的持续迭代和优化,形成自我强化的良性循环,从而推动企业业务的增长和创新。基础首先,我们公司建立了一个有效的数据中台,确保数据的质量和安全。包括数据的标准化、质量管理、......
  • 唤醒沉睡的数据:构建数据飞轮以实现用户挽回
    在当今数据驱动的商业环境中,企业正面临着如何有效利用其庞大数据资产的挑战。特别是在用户流失挽回的场景中,如何通过数据飞轮模型激活沉睡数据,成为企业重要的战略任务。本文将通过探讨全链路营销的数据飞轮构建,展示如何实现数据资产的最大化利用。全链路营销的数据飞轮在全链路营......
  • 唤醒数据中心:构建社交行业的数据飞轮
    在社交行业中,数据不仅是企业竞争的核心资源,它更是驱动创新和个性化服务的主要力量。数据中台虽然汇集了企业的数据资产,但在多数情况下,这些数据资产还是处于未充分利用的状态。利用数据飞轮的概念,我们可以有效地将这些沉睡的数据资产唤醒,并且转化为企业的竞争优势。数据飞轮理论的......
  • 使用 Wake Lock API:保持设备唤醒的最佳实践
    在现代Web应用中,尤其是涉及视频播放、实时通信、地图导航等长时间运行的任务时,用户常常希望设备不要因为空闲而自动进入睡眠模式或屏幕变暗。为了解决这一问题,WebAPI提供了一个名为WakeLock的接口,允许开发者请求设备保持唤醒状态。本文将详细介绍如何使用WakeLockAPI......
  • 唤醒数据中台的数据,分享我的数据驱动秘籍
    1.自我介绍虽然我是Java开发工程师,但最初的项目是数据治理相关的内容,主要使用的是ETL工具KETTLE现在这个工具已经改名为Pentaho,具体的工作内容如下:数据的抽取(从不同的数据库、ftp)获取数据转换(数据合并、统计)生成宽表(用于支撑BI部门的数据展示)这份工作跟数据打交道比较多,当......