i.MX RT1050学习笔记27-RT1170的Low Power Mode简介
1 前言
前段时间学习了一下RT1170的低功耗模式相关,发现RT1170的低功耗模式如此之复杂,竟恐怖如斯,下面我就将我对这个Low Power Mode的理解介绍给大家了。
2 域(Domain)和资源(Resource)
2.1 Domain
在切入主题前不得不简单介绍一下RT1170的域(Domain)的概念,其将整个芯片中的外设,核等玩意按照电源供电不同划分成一个一个的域,然后对这些域的电源进行单独精确控制。下图显示了RT1170的电源框架:
其中外面一圈的蓝色字体描述的即位芯片相关的电源引脚,每个引脚的作用描述如下表所示:
可以看到不同的模块都有自己的供电引脚,而不是传统意义上的大家都共用一个电源输入,这样做的好处那就很显然的。这样RT1170就把片上的东西划分成一个个的域,即Domain。如下:
下表对每个Domain包含哪些东西做了详细的描述:
正是因为RT1170对自己的外设做了一个电源上的隔离,为下文中复杂Low Power Control提供了基础和可能。
2.1 Resource
另外RT1170还根据不同外设资源在整个低功耗系统中的功能将片上外设资源分成了三类Resource,分别如下:
Resource种类 | 描述 |
---|---|
CPU Platforms | 指的是RT1170的两个核,CM7,CM4,以及各自的TCM和cache |
System Controllers | 系统控制器,即控制着系统的命脉,如时钟和电源等,也是实现低功耗功能的外设,包括GPC, PMU, CCM, SRC,SSARC, PGMC, 和RDC. |
Functional blocks | 除此以外普通外设的集合 |
下图完美的显示了三种resource的关系:
稍微翻译一下就是CPU Platforms控制System Controllers,给其发指令,让其控制着Functional blocks的时钟和电源,最后达到低功耗的功能。这就是RT1170低功耗功能的本质。
下表对上图中System Controllers各个模块的功能进行了简单描述:
名称 | 描述 |
---|---|
OSC/PLL | 时钟源和锁相环 |
Clock Control Module (CCM) | 时钟控制模块,即时钟管理器和时钟生成器的角色 |
System Reset Controller (SRC) | 系统复位控制器,专门给芯片复位服务,比如产生复位信号给其他模块 |
Power Management Unit (PMU) | 电源管理单元,主要负责生成各类电源,比如内部LDO |
DCDC Converter (DCDC) | 内部DCDC转换器 |
Power Gating and Memory Controller(PGMC) | 电源门控制器,相当于电源开关,控制着各个域的电源 |
General Power Controller (GPC) | 低功耗控制器,是CPU与其他模块的联络员或者说是二把手,它是其他System Controllers模块的上级,而其他System Controllers模块是执行者 |
RDC | |
State Save and Restore Controller(SSARC) | 一段存储空间,最大存储4Kbyte的数据,最常见的应用就是使用SSARC来存储一些WAKEUP MIX中的外设寄存器配置 |
3 低功耗控制二把手GPC
上面提到GPC是System Controllers的老大,在整个芯片低功耗系统中的二把手,接收CPU的信号,然后控制System Controllers的其他外设来实现整个系统进入低功耗模式。下图是其的功能框图:
翻译一下上图的意思就是GPC通过IRQ/WFI和CPU交流,然后再通过CMC/UPI, SBC, SPC控制其他System Controllers外设。
那么CMC/UPI,SPC和SBC分别又是什么呢?其中CMC/UPI叫做CPU Mode控制,SPC叫做Setpoint控制,而SBC为Standby控制,这是RT1170的三种低功耗控制方式,并行存在。
在介绍三种控制方式之前,先插入一个概念,即按照资源可被CPU Mode和Setpoint控制与否分成如下四种:
种类名称 | 描述 |
---|---|
Private | 只能被CPU Mode控制 |
Share | 可以被CPU Mode控制或者被Setpoint控制(二选一) |
Public | 只能被Setpoint控制 |
unassigned | 无法被控制,上电默认状态无法更改 |
注:对于share类resource,可以通过配置来决定是由CPU Mode控制还是Setpoint控制。
3.1 CPU mode控制
CPU mode可以控制Private类和Share类的外设resource。其中最主要的还是控制CPU Platforms,即CM7和CM4,以及各自的TCM和cache。下表为CPU Mode的几种模式:
模式名称 | 描述 |
---|---|
RUN | CPU全速正常运行,TCM和cache正常运行 |
WAIT | CPU和Cache的时钟暂停,TCM正常运行 |
STOP | CPU,TCM和cache全部暂停,但是电源没有切断 |
SUSPEND | 除了TCM通电,CPU和Cache断电 |
下面再列出几点关于CPU和Memory的特性:
- M7核和它的TCM是共用一个电源,M4则分开,可单独控制
- M7核的TCM电源由SOC_IN提供,可断电
- OCRAM的电源由SOC_IN提供,不可断电,即SOC_IN有电,那OCRAM就有电
那么问题来了,CPU mode怎么控制Share类的外设呢?其实很简单,首先需要把被控Share类外设配置为CPU mode控制模式,然后再事先把该外设在Low Power Mode下需要的状态写入寄存器中(CPU mode有四种模式,那么寄存器中就会存储有四种对应的模式),当CPU mode控制信号来了之后,被控外设就会被配置成预先设置的状态。举个例子:CPU命令CPU mode进入STOP模式,那么这个时候被控Share类外设就会进入预先设置的STOP对应的外设状态。
3.2 Setpoint控制
Setpoint控制也可称为硬件控制,即事先将想要的外设resource的状态写入寄存器,当RT1170想要进入低功耗模式时,只要发个指令,RT1170就会按照预先设置的状态自动切换。不同外设资源的状态各自相组合,最大可以设置16个point,即16种不同的系统状态。下图为RT1170默认的16种系统状态。
另外,如果CM7设置芯片进入Point 5,而CM4设置芯片进入Ponit 9, 那么这个时候就会发生硬件仲裁,最后导致芯片最后进入双方都允许的状态point。
在这里提一个小点,表格中有个LDO Bybass的选项,这个选项是干嘛的呢?这里的LDO指的则是给LPSR域供电的两个LDO,分别是LDO_DIG和LDO_ANA。如果LDO Bypass ON的话,就说明这两个LDO就被关闭了,这个时候LPSR域则由DCDC模块供电;如果LDO Bypass OFF的话,则就是这两个LDO被开启了,LPSR域由LDO供电,而这种情况一般都是在低功耗模式下DCDC模块被关闭的时候应用。
3.3 Standby控制
Standby 模式是 CPU 的第三种低功耗模式控制方式,它主要负责的对象是除了外设资源本身之外的东西,比如总线啊,相关模拟电路啊,具体啥东西我也不清楚,反正就是进入Standby模式会让系统更加低功耗。
Standby 模式通过以下操作达到功耗更低的目的:
① 使外设进入Standby状态
②模拟器件部分进入 Standby状态
③停止内部总线
④除了唤醒源之外的其他大部分系统都停止运行
当芯片进入 STBY 模式时,DCDC_IN, LPSR_IN 和 SNVS_IN 的总电流只有几毫安,而且相比较不进入STBY 模式电流会小很多。
3.4 总结
结合上述所述,所以在描述RT1170低功耗状态时,一般要从这3个方式来描述,比如:
- WAIT, Setpoint 0, 非STBY模式
- STOP, Setpoint 5, STBY模式
4 SNVS mode
这是RT1170中功耗最小的一种模式,为什么把它单独拎出来说呢,是因为这种模式不同于前面的所说的方式,这种低功耗模式的原理简单而粗暴,它就是断开除SNVS域之外的所有的电源,只保留SNVS域的电源,在这种模式下,只能通过两种方式正常唤醒芯片,第一种就是处在SNVS域的WAKE_UP引脚的外部中断,而第二种则是使用同样处于SNVS域的RTC中断唤醒(因为SNVS域外的其他外设都不工作了,只能通过SNVS域的东西来唤醒)。
RT1170为了让这种模式使用起来更加的人性化,所以在SNVS内部有一段4K大小的RAM区域,用于存储需要掉电保存的相关数据。
5 唤醒源
CPU进入低功耗模式后,可通过三种方式来唤醒CPU,分别是IRQ, Debug Wake以及event。其中IRQ很好理解,就是各种中断,最常用的就是GPIO中断,Debug wake我猜就是通过调试口去唤醒吧,我也不太清楚,至于那个event就是tamper事件。
6 低功耗运行流程
RT1170低功耗基本运行流程如下描述:
- CPU决定好进入哪一种低功耗模式
- 软件握手
- 设置CPU目标模式以及目标Setpoint
- WFI/WFE
-CPU mode切换过程:SSARC存储数据,private resource开始关闭电源和时钟
-Setpoint切换过程:public resource开始关闭电源和时钟
-系统成功进入低功耗模式,并等待被唤醒 - 唤醒事件发生
-Setpoint切换过程:public resource开始恢复电源和时钟
-CPU mode切换过程:private resource开始恢复电源和时钟,恢复SSARC存储数据 - CPU进入中断服务函数并恢复现场
补充
在这里我就是简单的介绍了一下RT1170的低功耗的基本原理,目的就是让大家更加容易的上手RT的低功耗模式开发,就不在此作非常详细具体的介绍,大家如果对其感兴趣的话,可以参考NXP官方资料(可以在NXP官网上直接搜索):
- 《AN13104-Debug and Application for RT1170 Clock and Low Power Feature》
提供了很多关于低功耗功能应用调试的经验和方法 - 《AN13148-I.MXRT1170 Low-Power Modes》
非常详细的对RT1170的低功耗应用进行了介绍 - 《RT1170 Reference Mannual》
RM手册包含了所有 - SDK中的power_mode_switch例程
官方例程,简单粗暴