本帖最后由 小恩GG 于 2024-8-6 17:42 编辑
一、 概述 秉承在MCU领域深厚的技术积累,NXP在2024年7月推出MCX C系列——一款高性价比、高能效、安全的Cortex-M0+MCU,助力8位和16位传统设计的升级换代。 MCXC44x在MCXC系列中性能最高。Flash容量可达256KB、SRAM可达32KB、Boot ROM可达16KB。嵌入式ROM配备引导加载程序,支持使用内置USB FS2.0设备灵活进行程序升级。FlexIO可支持任何标准和自定义串行外设仿真,还支持多达24x8或28x4段的段式LCD。在超低功耗运行模式下,功耗低至54uA/MHz,在深度睡眠模式下低至1.96uA(保留RAM+RTC)。封装选项更加丰富,包括32和48引脚QFN、64引脚LQFP以及64引脚BGA。
当边缘设备在部署环境中无处不在时,对于电源的分配利用就显得尤为重要。然而,对于整体系统性能而言,高速处理能力同样不可或缺。MCX C系列支持低功耗节能外设和USB接口,USB2.0接口可实现12Mbit/s的全速操作。节能的外设能够减轻内核在节能和低功耗模式下的负载,当内核处于睡眠状态时保持外设的运行。段式LCD支持人机界面(HMI),控制器能够生成相应的波形,驱动复用的数字、字母数字或自定义分段LCD面板。 NXP FRDM-MCXC444开发板是一款基于MCXC444芯片的低成本设计与评估板。下图为NXP FRDM-MCXC444开发板的板载模块图:
在本文中,我们将以图文的形式对MCX C系列MCU的低功耗特性进行详细的讲解并探讨电源的多种低功耗模式切换功能的实现。文末附有视频对本文所描述的功能实现进行详细的讲解。 硬件环境: - 开发板:FRDM-MCXC444
- 测试工具:万用表(电流表)
软件环境: Demo:SDK->FRDM-MCXC444-> demo_apps -> power_mode_switch
二、 低功耗特性 MCX C系列拥有丰富的低功耗模式,可以适用于多种消费及工业应用场景。电源管理控制器(PMC)提供多种供电模式,用户可根据所需的功能级别优化功耗。支持多种运行/等待/停止模式。MCU能在约50µA/MHz的低功耗下运行,在深度睡眠模式下仅消耗2µA左右的电流,同时保持寄存器数据不丢失。即便在深度睡眠模式,微控制器也能在短短4us内唤醒。 大多数模块的时钟可以关闭以节省电力。PMC内置的低压检测(LVD)系统能够有效防止电压过低的情况。 首先我们将介绍MCX C系列微控制器不同的低功耗模式以及在该模式下运行的特性:
| | | | | MCU可以运行在全速模式,内部电源完全监管,在运行模式规则下,该模式被认为是正常运行模式。 | | | 关闭内核时钟。系统时钟持续工作。总线时钟如果开启,则持续工作。保持运行监管。 | | | 关闭内核时钟,系统时钟服务其他模块。来自支持外设的停止应答信号有效后,关闭总线时钟。 | | | 在此模式下,内核、系统、总线、Flash时钟的最大频率受到限制。 | | | 关闭内核时钟。系统、总线和Flash时钟继续运行,其最大频率受到限制。 | | | 核心时钟关闭。在来自支持外设的所有停止确认信号都有效后,其他主机的系统时钟和总线时钟被关闭。 | | | 关闭内核时钟。来自支持外设的停止应答信号有效后,关闭总线时钟。通过降低内部逻辑电压,将MCU置于低泄漏模式。保持内部逻辑状态。 | | | 关闭内核时钟。来自支持外设的停止应答信号有效后,关闭总线时钟。通过关闭内部逻辑,将MCU置于低泄漏模式。保存所有系统RAM的内容且保存I/O状态。内部逻辑状态不会保留。 | | | 关闭内核时钟。来自支持外设的停止应答信号有效后,关闭总线时钟。通过关闭内部逻辑和所有系统RAM,将MCU置于低泄漏模式。保存I/O状态。内部逻辑状态不会保留。 | | | 关闭内核时钟。来自支持外设的停止应答信号有效后,关闭总线时钟。通过关闭内部逻辑和所有系统RAM,将MCU置于低泄漏模式。保存I/O状态。内部逻辑状态不会保留。禁用1kHz LPO时钟,使用STOPCTRL[PORPO],可以选择是否开启电源复位电路。 |
--VLPR模式:低功耗运行。
--WAIT和VLPW模式:仅CPU进入低功耗模式。 --STOP,VLPS,LLS和VLLS模式:CPU及外设进入低功耗模式,部分外设会被关闭。
--IO状态都保持。 --CPU内部逻辑状态(逻辑门、触发器和寄存器等组件)最低可以保持到LLS模式,从VLLS模式唤 醒后会从复位向量重新执行初始化。 --SRAM内容最低可以保持到VLLS3模式(VLLS0和VLLS1丢失)。 下图描述了部分常用外设在低功耗模式下的状态,具体的状态可以从芯片MCXC444的Reference Manual中找到:
图注:LIM:在当前状态下,外设的性能会受影响。 ASYNC:使用备用时钟源完全正常运行,前提是所选时钟源保持启用状态。 STATIC:保留模块寄存器状态和相关内存。 LP:Low Power,内存通电以将内容保持在低功耗状态。
三、 低功耗模式转换 在这一节中,我们将介绍MCX C系列MCU如何在不同的低功耗模式间进行转换。
上图是MCX C系列微控制器的低功耗模式转移状态机,下表定义了上图中所示的各种状态转换的触发条件:
转换 # | | | | | | | 在ARM内核的SCR(System Control Register)中,通过清除SLEEPDEEP进入sleep-now模式或sleep-on-exit模式。Note1 | | | | | | | PMCTRL[RUNM]=00, PMCTRL[STOPM]=000 Note2 在ARM内核的SCR中,通过设置SLEEPDEEP进入sleep-now模式或sleep-on-exit模式。Note1 | | | | | | | 在这种模式下,内核、系统、总线和Flash时钟频率以及MCG时钟模式受到限制。 设置PMPROT[AVLP]=1, PMCTRL[RUNM]=10 | | | 设置PMCTRL[RUNM]=00 / Reset | | | | 在ARM内核的SCR中,通过清除SLEEPDEEP进入sleep-now模式或sleep-on-exit模式。Note1 | | | | | | | | | | | PMCTRL[STOPM]=000 / 010 Note3 在ARM内核的SCR中,通过设置SLEEPDEEP进入sleep-now模式或sleep-on-exit模式。Note1 | | | 中断 注意:如果直接从RUN(转换 #7)输入 VLPS,硬件将强制退回RUN,不会回到VLPR状态中。 | | | | PMPROT[AVLP]=1, PMCTRL[STOPM]=010 在ARM内核的SCR中,通过设置SLEEPDEEP进入sleep-now模式或sleep-on-exit模式。Note1 | | | 中断(VLPS模式直接从RUN模式进入)/ Reset | | | | PMPROT[AVLLS]=1, PMCTRL[STOPM]=100 STOPCTRL[LLSM]=x (VLLSx) 在ARM内核的SCR中,通过设置SLEEPDEEP进入sleep-now模式或sleep-on-exit模式。 | | | | | | | PMPROT[AVLLS]=1, PMCTRL[STOPM]=100 STOPCTRL[LLSM]=x (VLLSx) 在ARM内核的SCR中,通过设置SLEEPDEEP进入sleep-now模式或sleep-on-exit模式。 | | | | PMPROT[ALLS]=1, PMCTRL[STOPM]=011 STOPCTRL[LLSM]=x (LLSx) 在ARM内核的SCR中,通过设置SLEEPDEEP进入sleep-now模式或sleep-on-exit模式。 | | | | | | | PMPROT[ALLS]=1, PMCTRL[STOPM]=011 在ARM内核的[media=x,500,375][/media]SCR中,通过设置SLEEPDEEP进入sleep-now模式或sleep-on-exit模式。 |
Note1:如果启用了调试功能,内核时钟仍支持调试。 Note2:如果PMCTRL[STOPM]=000并且STOPCTRL[PSTOPO]=01或者10,则仅进入部分停止模式而不是STOP模式。 Note3:如果 PMCTRL[STOPM]=000且STOPCTRL[PSTOPO]=00,则进入VLPS模式而不是STOP。如果 PMCTRL[STOPM]=000 且 STOPCTRL[PSTOPO]=01或者10,则仅进入部分停止模式,而不是VLPS模式。
下面以几个例子来对上述状态机以及表格进行进一步的说明: Eg1. 系统默认上电后状态为:RUN,所有的模式下RESET后都恢复到RUN。 Eg2. RUN和VLPR模式可以互相转换。 Eg3. VLPW模式无法通过RUN直接进入,需要先进入VLPR模式,再进入VLPW模式。唤醒时,通过中断只能返回到VLPR,返回RUN只能通过RESET进行。 Eg4. VLLS 0/1/3模式均可以通过RUN和VLPR模式进入,但在唤醒操作时,只能返回到RUN状态,无法返回到VLPR状态。 Eg5. VLPS模式和LLS模式可以通过RUN和VLPR模式进入,在唤醒操作时,从哪个状态进入的便返回哪个状态。
四、 效果演示 本文将演示SDK->FRDM-MCXC444-> demo_apps -> power_mode_switch中的例程,通过串口向FRDM-MCXC444开发板发送指令,来达到多种低功耗模式之间相互切换的目的。 在将例程下载至FRDM-MCXC444开发板之后,移除JP1跳线帽,使用万用表上的电流表功能对开发板的各类功耗模式进行测量。 将开发板通过USB-C cable连接至电脑上,打开设备管理器查看连接的串口号,打开Putty.exe,配置串口为COMx,波特率为9600,打开串口。
通过向串口中输入上述指令,以达到对电源模式切换的功能目的。 向串口中输入“D”,则可以切换到VLPR模式,可以看到时钟从48MHz变为了2MHz,电源模式从“RUN”切换到了“VLPR”,如下图所示:
当向串口输入其他指令时,则会出现以下命令行:
除了RUN和VLPR模式之间相互切换,其他的电源状态的返回RUN和VLPR模式时就会出现上述命令行,命令行中描述了两种唤醒源,分别是低功耗定时器唤醒以及按键唤醒。 使用电流表的mA以及μA档接在JP1的两端并测量电流,测试从RUN模式下进入VLPW模式的过程,结果如下图所示:
此时是在RUN状态下工作,测得其电流为8.22mA。 将板子调至VLPW状态,需要先进入VLPR模式,测得电流如下,为0.87mA:
再通过VLPR模式进入VLPW模式,测得电流如下,为92.1μA:
分别测试在USB供电,室温的情况下不同模式的功耗情况,得到结果如下表所示:
注意,由于此时FRDM板子上面还打开了串口通讯以及部分其他功能,所以上面实际测得的功耗电流与在特定情况下的MCXC444的典型值有所差异。然而,在实际的低功耗用例中,为了节能,可以做很多事情,包括: - 在低功耗模式下,关闭不需要模块的时钟开关。可以在进入低功耗模式之前禁用时钟,并在必要时退出低功耗模式后重新启用时钟。
- 当模块中其他部分在低功耗模式下工作时,关闭不需要的部分的功能。在大多数情况下,更强大的功能意味着更多的功耗。例如,关闭不必要的引脚复用器的数字功能等等。
- 根据实际应用硬件设置适当的引脚状态(IO方向和逻辑电平)。否则引脚会漏电流,增加功耗。
- 其他基于实际应用硬件的低功耗考虑。
- 用于debug的pin(e.g SWD_DIO)会消耗额外的功率,最好禁用相关引脚或断开。
在debug的运行过程中的RUN模式功耗电流如下图所示,功耗电流会稍微高出将程序下载进开发板的情况:
下面,根据MCXC444芯片的datasheet,我将给出一组在特定条件(典型值, MCXC444,25°C,VDD=3V)下的功耗电流参考值,可以看到实际测得电流与特定条件下的参考电流在数量级上保持一致性。
| | | | 在48MHz HIRC模式下,48MHz内核时钟、24 MHz 访问Flash总线时钟,所有外设时钟使能。执行Flash中的基准测试程序CoreMark。 | | | 在8MHz LIRC模式下,4MHz内核时钟、1 MHz 访问Flash总线时钟,所有外设时钟使能。执行Flash中循环While(1)里的代码。 | | | 内核时钟、48 MHz系统时钟、24 MHz总线时钟、Flash被禁止,所有外设时钟被禁止。MCG_Lite在HIRC模式下运行。 | | | 内核时钟、2 MHz系统时钟、0.5 MHz总线时钟、Flash被禁止,所有外设时钟被禁止。 | | | | | | | | | | | | | | | | | | 所有外设禁用,上电复位检测电路禁止。 (SMC_STOPCTRL[PORPO] = 1) | |
视频链接:
|