EC20模块主机休眠唤醒机制

Posted qlexcel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EC20模块主机休眠唤醒机制相关的知识,希望对你有一定的参考价值。

来自移远手册《Quectel_EC20_低功耗管理_应用指导_V1.0.pdf》

  当 EC20 模块嵌入主机系统时,主机系统整体的功耗会相应增大。对此, EC20 面向主机端提供了多种电源管理方式,以便主机端通过管理 EC20 的工作模式来降低整机功耗。
  EC20 的电源管理方式主要包括主机系统控制 EC20 进入睡眠的机制、主机系统主动唤醒 EC20 的机制和 EC20 主动唤醒主机系统的机制。
  本文首先介绍 EC20 的外围硬件接口和 EC20 电源管理方式中的 URC 的意义。其次,本文详细描述了EC20 电源管理应用的典型场景。最后,本文简单介绍了 EC20 睡眠与唤醒的软件机制。

1、硬件接口

在这里插入图片描述

DTR

1、DTR在模块内部默认上拉。
2、要让模块进入睡眠模式,一定要拉高DTR。
3、当DTR拉低时,模块一定不会进入睡眠模式。
4、当模块进入了睡眠模式,拉低DTR会唤醒模块。

RI

1、平时RI保持为高电平。
2、当模块发生一个事件(比如收到来电或短信)时,RI会产生一个低电平脉冲通知主机。(默认低电平时间为120ms,可由AT+QCFG="urc/ri/ring"配置)

AP_READY

1、当主机处于深度睡眠状态时,模块给RI信号唤醒往往需要很长时间,如果主机还没有完全醒来,模块就上报了URC,那么此URC处理就会出问题,为了应对这种情况设置了AP_READY引脚。
2、AP_READY引脚用来把主机睡眠状态通知给模块。比如高电平表示主机处于睡眠状态,当模块被一条短信唤醒,随即拉低RI唤醒主机,同时不停地检测AP_READY电平,在主机的程序中设置完全醒来后才拉低AP_READY,那么模块就会一直等待主机完全醒来后才上报URC,在这个过程中模块的URC会被缓存,最多可以缓存15条URC。
3、AP_READY引脚电平可以由AT+QCFG="apready"进行配置,可配置高电平表示睡眠还是低电平表示睡眠。

AP_READY引脚功能可以不用,那模块发送RI信号后接着就会(几个ms)发送URC,所以MCU醒来要快,一般MCU醒来都比较快,可以达到要求。一般MCU都是不需要模块端AP READY的。
如果醒得慢,URC上报就会错过了。
如果醒得慢引起的,可以找下MCU原厂确认下看如何提升或者使用AP_READY引脚。

2、URC

  模块端与主机系统在正常的数据交互过程,模块除了对主机系统的请求进行响应以外,也会通过主动上报的方式通知主机系统外来事件的产生,如来电与接收短信等。通常情况下,模块的这种主动上报信息称之为 URC(Unsolicited Result Code)。
  EC20 对 URC 的处理体现在两个方面:主动向主机系统上报事件信息及在 RI 引脚上产生低脉冲。在EC20 的电源管理中, RI 引脚能够在主机系统进入睡眠后以脉冲的形式通知主机系统主动事件的到来。由于 EC20 模块支持多种不同类型的 URC,频繁的 URC 上报会导致主机系统频繁地从睡眠中唤醒,从而降低了整机状态下系统的电源管理效率,削弱了电源管理的效果。为了避免频繁的 URC 上报,主机系统需要根据自身的业务情况选择需要上报的 URC。

设置URC上报通道:串口或USB

模块支持串口和USB上报URC,但是只能选择一种,由AT+QURCCFG配置。

控制某类URC是否上报

  模块支持很多种URC,如果每种URC都会唤醒模块,那么低功耗效率太低,因此可以根据用户设备的状态来使能不同种类的URC。比如当系统开机,可以只使能网络状态、来电、短信的URC上报;当系统进入睡眠前,可以只使能来电和短信的URC上报。
设置AT命令举例:

AT+CREG=1 或 AT+CREG=2 //使能 CS 网络注册状态主动上报功能(默认关闭)
AT+CREG=0 //关闭 CS 网络注册状态主动上报功能
AT+CGREG=1 或 AT+CGREG=2 //使能 PS 网络注册状态主动上报功能(默认关闭)
AT+CGREG=0 //关闭 PS 网络注册状态主动上报功能
AT+QINDCFG="csq",1 //Enable to actively report the value of CSQ signals (Disabled by default)
OK
AT+QINDCFG="csq",0 //Disable to actively report the value of CSQ signals
OK
AT+QINDCFG="ring",1 //Enable to actively report the RING of incoming call (Enabled by default)
OK
AT+QINDCFG="ring",0 //Disable to actively report the RING of incoming call
OK
AT+QINDCFG="smsincoming",1 //Enable to actively report the incoming of new short messages
(Enabled by default)
OK
AT+QINDCFG="smsincoming",0 //Disable to actively report the incoming of new short messages
OK

3、四种应用场景

3.1、串口应用

当主机和 EC20 R2.1 模块通过串口连接的时候,可以通过如下步骤使模块进入睡眠模式:
1、用 AT+QSCLK=1 命令使能睡眠功能。
2、拉高 DTR 引脚。

硬件连接

在这里插入图片描述

软件初始化配置

  • AT+QSCLK=1 将 QSCLK 控制变量置成允许 EC20 睡眠。
  • AT+QURCCFG=“urcport”,"uart1"将 EC20 主动事件指定在 UART 口上报。
  • AT+QCFG=“apready”,[,,[]]配置模块端的 AP_READY 功能。

实施方法

1、主机系统进入睡眠状态
  主机系统进入低功耗状态时,主机端拉高 DTR 引脚控制模块进入睡眠状态,并将 AP_READY 引脚电平置为无效状态以表明此时主机未就绪。
2、主机系统从睡眠中唤醒

  • 主机唤醒 EC20 模块
    主机拉低 DTR 引脚,并将 AP_READY 引脚电平置于有效状态以表明此时主机已经就绪。
  • EC20 唤醒主机
    当 EC20 有主动事件数据需要上报时, EC20 的 RI 引脚上会产生低脉冲(脉冲持续时间默认为 120ms)用于通知主机主动上报事件的到来。主机系统在睡眠状态下,需要保证能够被 EC20 上 RI 引脚的电平变化事件唤醒。在系统唤醒后,需要将 AP_READY 引脚置为有效状态以表明此时主机就绪

3.2、USB 应用(支持 USB 远程唤醒功能)

如果主机支持USB Suspend/Resume和远程唤醒功能,需同时满足如下3个条件使模块进入睡眠模式:
1、用 AT+QSCLK=1 命令使能睡眠功能。
2、确保 DTR 保持高电平或者悬空。
3、连接至模块 USB 接口的主机 USB 总线进入 Suspend 状态。

参考电路

在这里插入图片描述

软件初始化配置

  • AT+QSCLK=1 将 QSCLK 控制变量置成允许 EC20 睡眠。
  • AT+QURCCFG=“urcport”,"usbat"将 EC20 上报事件指定在 USB AT 口上报。
  • AT+QCFG=“apready”,[,,[]]配置模块端的 AP_READY 功能。
  • 主机系统上做相应的系统配置和驱动配置

实施方法

1、主机系统进入睡眠状态
主机设置 AP_READY 引脚为无效电平,然后主机系统进行 USB suspend 动作。(EC20 支持 USB 局部挂起与全局挂起)
2. 主机系统从睡眠中唤醒

  • 主机主动唤醒 EC20
    当主机主动往模块发送数据时,主机进行 USB resume 动作,并将 AP_READY 引脚置为有效状态。
  • EC20 主动唤醒主机
    当 EC20 需要给主机发送主动上报数据时, EC20 的 USB 会先发起 USB remote wakeup 信号,主机系统端的 USB 必须能够通过 remote wakeup 信号唤醒系统本身,然后将 AP_READY 置于有效状态。

3.3、USB 应用(支持 USB Suspend/Resume 和 RI 功能)

如果主机支持 USB Suspend/Resume 但不支持远程唤醒功能,需要有 RI 信号唤醒主机。 需同时满足如下 3 个条件使模块进入睡眠模式:
1、用 AT+QSCLK=1 命令使能睡眠功能。
2、确保 DTR 保持高电平或悬空。
3、连接至模块 USB 接口的主机 USB 总线进入 Suspend 状态。

参考电路

在这里插入图片描述

软件初始化配置

  • AT+QSCLK=1 将 QSCLK 控制变量置成允许 EC20 睡眠。
  • AT+QURCCFG=“urcport”,"usbat"将 EC20 上报事件指定在 USB AT 口上报。
  • AT+QCFG=“apready”,[,,[]]配置模块端的 AP_READY 功能。

实施方法

1、主机进入睡眠状态
主机系统设置 AP_READY 输出电平为无效,然后 suspend USB。
2、主机从睡眠中唤醒

  • 主机唤醒 EC20
    主机进行 USB resume 动作,然后将 AP_READY 置为有效状态。
  • EC20 唤醒主机
    EC20 有主动事件上报时, EC20 上 RI 引脚上会有低电平产生(默认为 120ms),主机系统端必须能够被 EC20 的 RI 引脚唤醒,系统在唤醒后,将 AP_READY 置为有效状态以指示 EC20 向主机输出主动上报事件。

3.4、USB 应用(不支持 USB Suspend 功能)

如果主机不支持 USB Suspend 功能,可以通过外部控制电路断开 USB_VBUS 的方式使模块进入睡眠模式:
1、用 AT+QSCLK=1 命令使能睡眠功能。
2、确保 DTR 保持高电平或悬空。
3、断开 USB_VBUS 供电。

参考电路

在这里插入图片描述

唤醒

恢复 USB_VBUS 供电即可唤醒模块。

AT命令

  1. Enable the module to enter into sleep mode by AT+QSCLK=1.
  2. Specify USB AT port to report URC by AT+QURCCFG=“urcport”,“usbat”.
  3. Enable the module’s AP_READY function by the following command:
    AT+QCFG=“apready”,[,,[]].
  4. Configure URCs needed for the module to report by AT+QINDCFG.
  5. Configure RI pin by AT+QCFG=“risignaltype”,“physical” to make sure the RI always behaves on UART1 when any URC reports.

软件机制

EC20 睡眠原理

  EC20 内部有一个较低优先级的 Sleep 任务,负责检测 EC20 是否能够进入睡眠模式。 EC20 内部其他的任务(RF\\USB\\UART 等)与睡眠控制变量一起决定 EC20 能否进入睡眠,它们向 Sleep 任务投票决定EC20 是否可以进入睡眠。只有当其他任务与睡眠控制变量均同意 EC20 进入睡眠时, Sleep 任务将会被执行, EC20 进入睡眠模式。需要注意的是, EC20 进入睡眠模式后, RF 并不会被关闭,而是处于 DRX 模式下。

USB 睡眠原理

  USB 正常通信状态下, hub 或 HCD 中的 root hub 会周期性地发送 SOF 包(全速 USB 每隔 1ms 发送一个,高速 USB 每隔 125μs 发送一个),此时, EC20 的 USB 会反对模块进入睡眠模式。
  依照 USB 标准协议中对 suspend 的描述,当主机系统把 hub 或 root hub 中与 USB 设备 attach 的 port设置成 suspend 后, hub 或 root hub 会终止 SOF 包的发送, USB 总线会进入 suspend 状态,在这之后,
EC20 模块的 USB 会进入 suspend 模式,并同意模块进入睡眠状态。

备注
1、针对不同的主机操作系统, Quectel 均提供了 EC20 的 USB suspend 方案。使用 Quectel 提供的方案,可以在主机系统端实现控制 EC20 进入 suspend。
2、如果用户使用自已研发的 USB 驱动,应注意驱动需要同时支持 Global Suspend 和 Selective Suspend

USB 远程唤醒主机

  当主机进入睡眠时,主机的 USB 总线处在 suspend 状态,如果此时 EC20 有 URC 上报给主机, EC20会发出 Remote Wakeup 信号(持续时间>3ms)通知主机开始 USB resume 动作。
  EC20 能够远程唤醒主机的要点如下:

  • 主机侧的 USB 控制器需要支持 Remote Wakeup, 并且 USB 控制器能够唤醒主机。因为如果主机侧的 USB 控制器不支持 Remote Wakeup,那么 USB 控制器将无法处理来自模块的 Remote Wakeup 信号。同样地,如果 USB 控制器不能够唤醒主机,那么睡眠中的主机将无法被 USB 远程唤醒。
  • 对于主机来说, EC20 的 Remote Wakeup 特性是可以通过 USB 标准请求来设置的。主机侧可以通过 SET_FEATURE 使能 EC20 的 Remote Wakeup 特性, 也可以通过 CLEAR_FEATURE 关闭EC20 的 Remote Wakeup 特性。当主机进入睡眠前,需要使能 EC20 的 Remote Wakeup 特性。
  • 当 EC20 发起 Remote Wakeup 信号通知主机后,主机进行的 resume 信号至少需要维持 20ms。在这之后, USB 总线会进入空闲状态,而主机的 USB 控制器必须在总线进入空闲状态的前 3s 内恢复总线上 SOF 包的发送,否则 EC20 模块又会进入 suspend 状态。

以上是关于EC20模块主机休眠唤醒机制的主要内容,如果未能解决你的问题,请参考以下文章

Android休眠唤醒机制

android 休眠唤醒机制分析 — wake_lock

MC20调试记录

惠普电脑休眠怎么唤醒

移远EC600低功耗唤醒锁wakelock的使用,QuecPython功耗分析

移远EC600低功耗唤醒锁wakelock的使用,QuecPython功耗分析