1.Cortex-M4 Power Modes
Apollo4BlueLite支持以下4种功耗模式:
▪ High Performance Active (not a differentiated power mode for the Cortex-M4)
▪ Active
▪ Sleep
▪ Deep Sleep
(1)High Performance Mode
高性能模式不是arm定义的标准模式,从arm的角度来看,该模式和arm定义的active模式比较类似。
Apollo4BlueLite定义的High Performance Mode是基于ambiq的turbo SPOT技术,实现了高频率,高性能的工作模式。
在该模式下M4核和内存可以在较高的时钟频率下工作,并且ARM的时钟(FCLK, HCLK)也在较高的时钟频率下工作,使处理器保持高性能并且外设传输速率也保持为高。使用期间所有外设也都保持正常的工作频率。
进入和退出该模式是软件可控的,实际由相应硬件完成。
(2)Active Mode
在Active模式下M4内核保持运行状态,时钟正常,并且指令正在运行。在这个模式下,所有使能的设备都被供电和时钟驱动以进行正常访问。同时,所有非调试Arm时钟(FCLK,HCLK)都是正常运行的。
要从Active模式转换到任何较低功耗模式,需要在M4核心上执行特定的指令序列。首先,必须设置ARMv7-M系统控制寄存器SCR中的特定位来确定要进入的模式。
在设置好系统控制寄存器SCR后,可以使用以下三种方法之一进入低功耗状态:
- 执行等待中断(WFI)指令。
- 执行等待事件(WFE)指令。
- 设置SCR的SLEEPONEXIT位,使得从中断服务例程(ISR)退出后自动返回到睡眠状态。
在执行了其中一种方法(假设满足所有条件)后,M4将进入低功耗模式,并保持在该模式下,直到某个事件导致核心返回到活动模式。返回活动模式的可能原因包括:
- 复位
- NVIC接收到一个启用的中断
- NVIC接收到一个事件
- 从DAP接收到一个调试事件
(3)Sleep Mode
在Sleep模式下M4是上电的状态,但是时钟信号(HCLK、FCLK)被禁止传递给M4核心。换句话说,M4的处理器时钟被断开,因此M4不能执行任何指令。这种门控时钟的设计可以节省功耗,在特定条件下实现低功耗的待机模式。当M4需要唤醒时,时钟将被恢复,处理器开始正常运行。这种设计常用于嵌入式系统中,以提高能效。
(4)Deep Sleep Mode
在Deep Sleep模式下,M4会进入SRPG(Static Real Power Gated)模式,主要供电被切断,但寄存器中的状态数据(flops)仍然保持。此时时钟信号(HCLK、FCLK)是不活动的,SoC(System-on-Chip)中用于HCLK和FCLK的时钟源也可以被停用。
为了方便切断供电并进入SRPG模式,M4会与唤醒中断控制器和电源管理单元进行握手,设置可能的唤醒条件。这意味着M4会与相关模块进行通信,并共同商定在何种情况下可以唤醒M4。这些唤醒条件可以是外部中断信号、定时器到期、外部事件等。一旦满足了设置的唤醒条件,M4将被唤醒并恢复正常的运行状态。这种设计可以降低功耗,延长设备的待机时间,并确保在需要时能够及时唤醒M4以执行任务。
2. sleep模式和deepsleep模式的区别
M4的睡眠模式和深度睡眠模式有以下区别:
(1)能耗水平:睡眠模式和深度睡眠模式在功耗水平上有所不同。在睡眠模式下,M4仍然处于供电状态,尽管时钟被禁止,但一些功耗仍然存在。而在深度睡眠模式下,M4的主要供电被切断,功耗非常低,寄存器中的状态数据被保留。
(2)时钟状态:睡眠模式下,M4的时钟信号被禁止传递给M4核心,时钟处于门控状态。而在深度睡眠模式下,时钟信号是不活动的,SoC中的时钟源可以被停用。
(3)唤醒方式:睡眠模式下,M4可以相对较快地被唤醒,例如通过外部中断或定时器。而在深度睡眠模式下,M4主动与唤醒中断控制器和电源管理单元握手,并通过设置唤醒条件来进行唤醒。
(4)上下文保存:睡眠模式下,M4的上下文(寄存器的状态)被保留,可以快速恢复到睡眠前的状态。而在深度睡眠模式下,M4的上下文数据也被保存,但是主要供电被切断,需要重新初始化一些系统配置。
总的来说,睡眠模式适用于快速唤醒和低功耗要求不高的情况,而深度睡眠模式适用于要求更低功耗、保持状态数据的情况。不同的模式可以根据实际需求来选择以实现最佳的能效和性能平衡。
3. CPU电源管理
Apollo4 Blue Lite SoC上的电源管理是通过硬件和软件的组合处理的。
硬件部分负责处理调节器(regulators)与SoC内部各个电源域之间的接口和控制顺序。调节器是用来调节和稳定供电的电路组件,而电源域是指SoC内部的不同子系统或区域,它们可能有不同的供电要求。
软件部分通过处理器指令和系统级的电源控制命令来启动电源状态的转换。也就是说,软件负责通过指令或命令发出请求,硬件负责实际执行相应的电源转换操作。
整个电源管理系统由一个中央电源管理控制器(Power Management Controller)和各种针对每个主要子系统/域的电源管理单元(Power Management Unit,PMU)组成。其中,一些主要的PMU如下所示:
- CPU-PMU:负责CPU子系统的电源顺序控制。CPU子系统包括处理器核心及其相关组件。
- IO-PMU:负责每个I/O子系统的电源顺序控制。I/O子系统包括输入输出接口和相关外设。
通过这种结构,中央电源管理控制器和各个PMU协同工作,实现对SoC内不同子系统/域的电源管理和控制。这样可以确保各个子系统/域的电源状态得以管理,以实现功耗优化、能效提升和系统稳定性。
3.1 CPU-PMU
从Active Mode(活动模式)进入Deep Sleep Mode(深度睡眠模式)的过程。在这个过程中,CPU-PMU(CPU功耗管理单元)管理Cortex-M4核心中寄存器的状态保持能力,并根据需要控制与电压稳压器的接口,以支持CPU的各种操作模式。进入Deep Sleep Mode后,CPU-PMU与唤醒中断控制器一起等待唤醒事件的发生。当观察到事件时,CPU-PMU通过重新启用芯片上的电压稳压器和恢复CPU寄存器状态开始功耗恢复过程。只有当所有状态准备就绪后,M4才会恢复到活动模式中。
CPU-PMU支持以下Arm Cortex-M4定义的功耗模式:
- OFF(关闭)
- Deep Sleep(深度睡眠)
- Sleep(睡眠)
- Active(活动)
在Active模式下,M4的工作频率可以选择为低功耗/高效能模式下的96 MHz,或者高性能模式下的192 MHz。
3.2 IO-PMU
主要介绍了IO-PMU(输入输出功率管理单元)对I/O子系统的电源状态进行管理的功能。每个I/O子系统都支持以下电源模式。需要注意的是,每个I/O子系统可能有不同的实现方式来定义每个具体的电源状态。这是针对每个I/O控制器的具体实现方式。此外,并非每个IO-PMU都支持所有的电源模式(典型配置可能只支持OFF和Active LP两种)。具体的电源模式包括:
- OFF:设备处于关闭状态;
- Sleep:设备处于启用但没有活跃事务的状态;
- Active:设备处于活跃状态,可以进行数据传输和交互。 需要根据具体的IO-PMU和I/O子系统的实际配置和支持情况来确定使用哪种电源模式。
3.3 Power Management Controller
电源管理控制器为每个供电调节器以及数字逻辑控制下的主要电源门提供控制功能。电源管理控制器(PWRCTL)接收来自所有电源管理单元(PMU)的输入,指示所需的电源电平,并通过软件(通过电源管理控制寄存器)进行控制。还提供了电源管理映射配置(从INFO1复制到PWRCTL),根据输入的电源请求来确定调节器接口的功能操作。该映射配置允许电源管理功能可编程化,可进行特性化、调优和/或错误修复。以下是供电调节器接口:
- SIMO降压器
- 核心低压差稳压器(LDO)
- 存储器低压差稳压器(LDO)
PWRCTL还负责控制所有数字电源域的电源门使能。根据功率水平请求来控制电源门使能。当来自相应请求的PMU请求一个"关闭"电平,或通过软件进行强制关闭请求,或对于I/O请求者,当相应的I/O设备使能被取消时,相应的电源门使能被激活以关闭该域。对于其他功率级别请求,电源门被禁用以上电相应的域。
SRAM和NVM的电源域是基于依赖的请求域来进行控制的。对于NVM,如果所有的CPU PMU请求者都是"关闭",而DMA请求者是"关闭"或"睡眠",则NVM电源域将被关闭。对于SRAM,每个SRAM基于SKU存储器配置或者如果所有的CPU PMU请求者都是"关闭",而DMA请求者是"关闭"或"睡眠",并且基于功耗控制MEMPWDINSLEEP配置启用SRAM电源关闭。