最常用的半导体MCU的低功耗模式概述
扫描二维码
随时随地手机看文章
在物联网设备中,电池续航时间是至关重要的考虑因素,尤其是在远程监测、穿戴设备、智能家居传感器等应用中。小华半导体的MCU提供了多种低功耗模式如深度睡眠、待机模式等,这些模式能够帮助减少功耗并延长电池使用寿命。关键在于如何根据应用需求有效地选择和切换低功耗模式,以平衡设备的响应时间和功耗。
1. 小华半导体MCU的低功耗模式概述
小华半导体的MCU通常提供多个低功耗模式,主要包括:
1.1 待机模式
特点:MCU进入待机模式时,CPU停止工作,但外设和系统时钟仍然保持活跃。通常用于短时间不需要高性能的任务。
应用场景:当设备处于空闲状态时,可以使用待机模式,等待下次传感器采集或通信事件。
1.2 睡眠模式
特点:在睡眠模式下,CPU停止工作,时钟可能会停止或降低频率,部分外设(如定时器、看门狗等)仍然工作。此模式比待机模式更省电,但唤醒时间较长。
应用场景:适用于需要较长时间处于低功耗状态,且对响应时间要求较低的应用,如环境监测传感器。
1.3 深度睡眠模式
特点:这是最节能的模式,除非有外部中断或特定事件触发,几乎所有的外设都停止工作,MCU进入非常低的功耗状态。此时,CPU、外设甚至部分时钟都可以被关闭。
应用场景:适用于不需要频繁响应外部事件的应用,如温度传感器或空气质量传感器的长期监控。
1.4 停止模式
特点:在停止模式下,CPU和大多数外设都停止运行,只有极少数外设(如RTC、外部中断)会保持激活状态。系统的功耗极低,但唤醒时间相对较长。
应用场景:适用于设备长时间不活动但偶尔需要唤醒执行任务的场景,比如定时数据采集的物联网设备。
1.5 休眠模式
特点:除了外部唤醒源例如,按键、定时器中断等外,几乎所有功能模块都关闭,系统的功耗降到最低。设备从此模式唤醒的时间通常较长。
应用场景:适用于对响应时间不敏感的物联网设备,设备长时间处于低功耗待机模式,等待外部事件触发。
低功耗模式实验
探索低功耗模式的最佳方法是选择一个微控制器并以各种低功耗模式实际运行该处理器。本文中,我决定翻出积尘已久的NXP Kinetis-L Freedom电路板,我曾经不仅用它进行过实验,而且还应用于许多产品、应用和课程。无论对错,我决定不仅要测量微控制器的能耗,还要测量整个开发板的能耗。MCU通常是电路板上的耗能大户之一,但测量整个系统的电流经常提醒我它并不是电路板上唯一的耗电器件。微控制器的优化长路迢迢,但其实它并不是唯一需要优化能耗的器件。
从基线测量开始
每当我努力优化一个产品的能耗时,我首先会从基线能量测量开始。通常我会通过分析几秒或几分钟内设备的电流消耗来了解应该从哪里开始。在我的开发板实验中,将Kinetis-L置于运行模式,无睡眠模式,所有外设均运行并设置电路板定期切换LED。通过采用IAR嵌入式工作台的I-Jet调试器以及I-Scope,我可以为该电路板配置一个简单基线,即LED关闭时电流消耗大约为16.9mA,LED打开时大约为18.0mA,如图1所示。显然,从哪里开始进行测量很重要,否则分析结果可能明显偏离。

图1:开发板的电流测量,LED每秒切换一次。
采用等待模式和深度睡眠模式优化能耗
节省能耗最快的方法是执行等待或深度睡眠模式。研究Kinetis-L处理器的数据表可以得出,等待模式的能耗在3伏电压下的电流介于3.7和5.0mA之间。在此模式下,CPU和外设时钟被禁用,而闪存处于休眠模式,此时允许处理器在中断时间范围内(12-15个时钟周期)仍然可以被唤醒。等待模式易于实现,设置进入等待模式的代码如下所示:
void Sleep_Wait(void)
{
SCB_SCR &=~ SCB_SCR_SLEEPDEEP_MASK;
asm(“WFI”);
}
只需这两行代码,开发板的电流消耗就从18.0mA降至15.9mA。电流消耗减少了11.6%!如果电路板由680mA电池供电,则该设备的电池寿命将从37.8小时变为42.8小时!两行代码就可以将电池寿命延长五小时!
这些高级电源模式的好处在于我们可以轻松地再向前迈一步。我们可以使用以下代码将处理器置于深度睡眠等待模式,而不仅仅是等待模式:
void Sleep_Deep(void)
{
SCB_SCR |= SCB_SCR_SLEEPDEEP_MASK;
asm(“WFI”);
}
我们所做的仅仅是调整了SCB_SCR寄存器中的一位,就已经将最初的18mA电流消耗减少为14.8mA。电流消耗减少了17.8%!同样,假设电路板由680mA电池供电,电池寿命现在已经从37.8小时增长为46小时!只需几行代码就可以节省大量能耗,而这只是冰山一角!
利用Stop模式和VLLS模式实现微安级电流消耗
采用停止模式可以禁用内核和系统时钟,这有可能将MCU电流消耗再进一步降低两毫安。你会发现,功耗模式越低,实现它所需的代码就越多,而唤醒系统恢复工作的代码就越复杂。令Kinetis-L进入停止模式的代码如下所示:
void Sleep_Stop(void)
{
volatile unsigned int dummyread = 0;
SMC_PMCTRL &=~ SMC_PMCTRL_STOPM_MASK;
SMC_PMCTRL |= SMC_PMCTRL_STOPM(0);
dummyread = SMC_PMCTRL;
Sleep_Deep();
}
请注意,停止模式通过电源管理控制寄存器控制,一旦状态被设置,就会调用Sleep_Deep函数来完成电源模式的设置并执行WFI。
到目前为止,我们一直在谈论1~2mA的MCU能耗。现代微控制器将提供仅消耗微安甚至毫微安的电源模式!Kinetis-L处理器于2013年左右首次亮相,其超低漏电停止(VLLS)模式仅耗能135至496微安!初始化此电源模式的代码如下所示:
void Sleep_VLLS1(void)
{
volatile unsigned int dummyread = 0;
SMC_PMCTRL &=~ SMC_PMCTRL_STOPM_MASK;
SMC_PMCTRL |= SMC_PMCTRL_STOPM(0x4);
SMC_VLLSTRL = SMC_VLLSCTRL_LLSM(1);
dummyread = VLLS_CTRL;
Sleep_Deep();
}
讲到这里,你会发现微控制器已经几乎不消耗任何能量了!
低功耗模式对唤醒延迟的影响
正如我们目前所看到的那样,将处理器设置为越来越低的电源模式是节省能源的好方法,但这是需要付出代价的。处理器的能量状态越低,唤醒处理器恢复工作所需的时间就越长。例如,如果我使用标准停止模式,则处理器被唤醒并再次开始执行代码需要2μs加上中断延迟,这还可以接受。但是,如果在Kinetis-L上设置了其中一种VLLS模式,将需要启动处理器的唤醒延迟再加上额外的53到115微秒!有些应用可能无法接受这种状况。图2显示了Kinetis-L从低功耗模式到运行状态的各种转换。

图2:Kinetis-L从低功耗模式到各种模式的转换时间。
MCU低功耗模式是指通过关闭或减少MCU(微控制器)在非工作状态下的功耗,以延长设备的使用时间和电池寿命。MCU低功耗模式主要包括以下几种:
睡眠模式:在这种模式下,CPU停止运行,但外设仍然保持活动。适用于短时间闲置状态,功耗较低,唤醒速度快12。
停止模式:在这种模式下,CPU和大部分外设停止工作,只有关键外设如RTC(实时时钟)和外部中断保持活动。适用于长时间休眠状态,功耗更低,但唤醒时间较长12。
待机模式:在这种模式下,所有时钟和外设都停止工作,只有最基本的功能如看门狗或外部中断可以继续运行。功耗非常低,但唤醒时间较长13。
不同低功耗模式的具体应用场景和优缺点
睡眠模式:适用于需要快速唤醒的应用场景,如传感器数据采集。优点是唤醒速度快,缺点是功耗相对较高12。
停止模式:适用于需要长时间休眠的应用场景,如智能手表的待机状态。优点是功耗更低,缺点是唤醒时间较长12。
待机模式:适用于需要极低功耗的应用场景,如远程监控设备。优点是功耗非常低,缺点是唤醒时间最长13。
不同厂商的低功耗MCU产品及其特性
一些厂商如英飞凌和瑞萨推出了低功耗MCU产品。例如,英飞凌的AIROC CYW20829支持多种电源模式,包括深度睡眠模式,电流消耗仅为4.5µA(64 KB SRAM),适用于蓝牙5.4、低功耗音频产品等应用4。
Arm微控制器都具有标准的低功耗模式,但每个芯片厂商都会定制开发人员可用的更多低功耗模式。正如我们所看到的,芯片供应商通常会提供几种容易实现的模式,对唤醒延迟的影响最小。他们还会提供几种超低功耗模式,几乎可以关闭处理器并且仅消耗几百微安或更少能量!开发人员通常需要在能耗和系统被唤醒需要的时长以及响应事件的速度之间进行权衡。而权衡一定是基于应用的,所以不要指望能够在每个产品和应用上都执行最低功耗模式。