silicon EFR32xG22 低功耗介绍

发布于:2025-07-08 ⋅ 阅读:(19) ⋅ 点赞:(0)

低功耗

看到低功耗有:

EM0: 是active,活跃状态

EM1:是sleep,休眠状态

EM2:是deepsleep,深度休眠状态

EM3:只有片上外设,I2C和外部中断可用

EM4:是shutoff,最低功耗模式,只有低功耗时钟,射频OOK检测,GPIO等工作。系统从EM4唤醒后会复位。

EM0

EM0提供所有系统功能。

  1. Cortex-M33正在执行代码
  2. 无线电功能可用
  3. 高频和低频时钟树是活跃的
  4. 所有振荡器都可用
  5. 所有外围功能可用

EM1

EM1使核心失效,但使其余系统完全可用。

  1. Cortex-M33处于休眠模式。核心时钟关闭
  2. 无线电功能可用
  3. 高频和低频时钟树是活跃的
  4. 所有振荡器都可用
  5. 所有外围功能可用

EM1P

EM1P是EM1的一个子集,它允许无线电在核心和高速外设关闭以节省能源时运行。当无线电处于活动状态且软件请求输入EM2时输入。

  1. Cortex-M33处于睡眠模式。
  2. 核心时钟和所有高速外设都关闭
  3. 无线电和HFXO仍然有效所有能够EM2, EM3或EM4操作的外设和振荡器都是可用的

EM2

这是进入低功耗能量模式的第一级。大部分高频外设被禁用或功能降低。内存和寄存器保留它们的值。

  1. Cortex-M33处于睡眠模式。核心时钟关闭。
  2. radio不活跃
  3. RFSENSE可用
  4. 高频时钟树不活跃
  5. 低频时钟树处于激活状态
  6. 以下振荡器可用LFRCO, LFXO, ULFRCO, FSRCO(如果IADC使用,则按需提供)
  7. 有以下几种低频外设可供选择RTCC、BURTC、WDOG、LETIMER
  8. 以下模拟外设可用(在功能上有潜在限制)IADC
  9. 唤醒EM0,接通外设中断,复位引脚,上电复位,异步引脚中断,I2C0地址识别,EUART0中断,或RFSENSE
  10. 唤醒到EM1通过无线电数据传输请求传输完成后,部分返回EM2
  11. RAM和寄存器值被保留RAM块可以选择性地关闭电源以降低功率
  12. GPIO引脚状态保留
  13. RTCC内存保留
  14. 默认情况下,调试连接不可用,以减少电流消耗。调试连接可以通过在EMU_CTRL寄存器中设置EM2DBGEN位来启用,并且将消耗大约0.5 uA的额外电源电流。

EM3

EM3在这种低能量模式下,所有低频振荡器(LFXO、LFRCO)和由它们衍生的所有低频时钟以及所有高频时钟都停止。大多数外设被禁用或功能降低。内存和寄存器保留它们的值。

  1. Cortex-M33处于睡眠模式。核心时钟关闭。
  2. 无线电非活跃
  3. RFSENSE有效
  4. 高频时钟树不活跃
  5. 所有低频时钟树源自低频振荡器(LFXO, LFRCO)是无效的
  6. 下面的振荡器是可用的ULFRCO、FSRCO(按需提供,如果被IADC使用)
  7. 以下低频外设如果被ULFRco定时,则可用RTCC、BURTC和WDOG
  8. 以下模拟外设可用(在功能上有潜在的限制)IADC
  9. 唤醒EM0,接通外设中断,复位引脚,上电复位,异步引脚中断,I2C0地址识别,或RFSENSE
  10. 唤醒到EM1通过无线电数据传输请求传输完成后,部分返回EM3
  11. RAM和寄存器值被保留RAM块可以选择性地关闭电源以降低功率
  12. GPIO引脚状态保留
  13. RTCC内存保留
  14. 默认情况下,调试连接不可用,以减少电流消耗。调试连接可以通过在EMU_CTRL寄存器中设置EM2DBGEN位来启用,并且将消耗大约0.5 uA的额外电源电流。

EM4

EM4是该部件的最低能量模式。除了GPIO PAD状态和BURAM值外,没有保留。从EM4唤醒需要重置系统,将其返回到EM0

  1. Cortex-M33关闭
  2. 无线电关闭
  3. RFSENSE可用
  4. 高频时钟树关闭
  5. 低频时钟树可能处于活动状态除了BURAM外,不保留RAM或寄存器值。如果BURTC使用
  6. 以下振荡器,则会打开:LFRCO、LFXO、ULFRCO
  7. 以下低频外设可用BURTC
  8. 唤醒EM0,接通BURTC中断,复位引脚,上电复位,异步引脚中断(仅对GPIO_EM4WUx引脚),或RFSENSE
  9. GPIO引脚状态可能保留(取决于EMU->EM4CTRL.EM4IORETMODE配置)

功耗模式切换

IADC和无线电等外设能够暂时将组件从EM2或EM3唤醒到EM1,以便传输数据。一旦完成,组件将自动放置回EM2或EM3模式。在EM0期间,Core总是可以使用WFI或WFE命令请求转到EM1。如果无线电正在传输数据或如果闪存正在编程或擦除,核心将被阻止进入EM2或EM3。对于每种能量模式,系统通常会默认为其最低功耗配置,非必要的时钟和外设将被禁用。然后,功能可以通过软件选择性地启用。

不同休眠模式下的时钟情况:

唤醒方式

EM4的唤醒

唤醒方式如下:

  • BURTC中断
  • Reset管脚或断电复位
  • RFSENSE(需要使用OOK协议)
  • gpio中断(只可用带有EM4WU功能的gpio管脚,且需要配置EM4WUEN)

代码API

这个工程在使用广播扫描的时候,它会自动进入低功耗的模式;

EMU_ENterEM1(true);

EMU_ENterEM2(true);

EMU_ENterEM3(true);

EMU_ENterEM4(true);

上面的API是进入EM1-EM4的函数;

还有官方提供了接口

/*
检查此时MCU是否可以休眠。这个函数在系统即将进入睡眠状态时被调用,
中断被禁用,它允许软件在最后一分钟事发生时取消进入睡眠状态
(函数调用和中断禁用之间的窗口)
@return  True, if the system can go to sleep.
 *          False, otherwise.
*/
__WEAK bool app_is_ok_to_sleep(void)
{
    return true;
}

/*
检查MCU是否可以在中断后休眠。这个函数在中断发生并被处理后调用。
它允许电源管理器知道它是否必须回到睡眠状态或唤醒状态。
@return  SL_POWER_MANAGER_IGNORE, 如果模块没有触发ISR并且它不会对决策做出贡献
 *
 *       SL_POWER_MANAGER_SLEEP, 该模块是导致系统唤醒的模块,系统应该返回睡眠状态
 *
 *       SL_POWER_MANAGER_WAKEUP, 该模块是引起系统唤醒的模块,系统绝对不能回到睡眠
*/
__WEAK sl_power_manager_on_isr_exit_t app_sleep_on_isr_exit(void)
{
  return SL_POWER_MANAGER_IGNORE;
}

这个接口可以用来在APP阶段控制进入低功耗的时机;

进入低功耗的函数,这个函数在while(1)中执行

sl_power_manager_sleep();


网站公告

今日签到

点亮在社区的每一天
去签到