查看: 1925|回复: 0

[分享] i.MX RT1050学习笔记6-Low Power

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32014
    最后登录
    2024-4-9
    发表于 2021-3-31 15:03:25 | 显示全部楼层 |阅读模式
    i.MX RT1050学习笔记6-LowPower

    1 前言
    电源是芯片的驱动源,一个好的电源管理模块可以让一颗芯片发挥最完美的性能表现,大资本家的梦想都是想让工人吃最少的饭干最多的事,再不济也是吃合适的饭干着合适的事情,RT1050的电源管理模块就是这样的一个存在,我们可以通过电源管理模块让其发挥夸张的性能,让我们一起来学习一下该模块吧。

    2 RT1050的电源管理
    下图就是RT1050的电源管理系统的框图。
    4.1.png
    可以看到RT1050的电源管理系统主要是围绕PMU(Power Management Unit)和GPC(General Power Controller)两个模块来搭建的,其他模块相互配合。下面让我们来看看各个模块的作用。

    2.1 PMU(PowerManagement Unit)
    在介绍PMU之前,我们先介绍一下电压域(Power Domain)的概念,RT1050为了实现更加精确的电源控制和管理,就将整个片子的外设、核、内存等分成了一个个的域,每一个域都有一个电源开关,我们则是可以控制这个开关来分别控制不同的域的电源,这样则是可以非常灵活的控制整个片子的功耗(具体都有哪些电压域则是可以参考《IMXRT1050RM》的13.4.1.4.3 Power Gating DomainManagement)。

    PMU模块,大家可以将其看做是整个电源管理系统的模拟执行部分,它承担了电源输入和电源输出的功能,下图是PMU的电源树图和结构图。
    4.2.png

    4.3.png

    (两张图描绘的内容都是一样,就是外部输入啥,进入RT1050后经过什么样的转换再提供给片内各个模块)
    大家可以看到RT1050内总共有一个DCDC模块和4个LDO模块,每一个模块分别能给什么供电,从两幅图上可以看得非常清楚。其中DCDC、LDO_2P5、LDO_1P1、LDO-USB这四个模块的输出电压可调,LDO_SNVS不可以调整(具体调整范围和精度大家可参考NXP官方参考文档,在这里则不多说了)。

    2.2 GPC(GeneralPower Controller)
    这个模块就是RT1050电源系统的管理者,它的功能有两个,电源门控和唤醒中断控制器。在这里我们介绍电源门控的作用,简单的说,就是控制RT上不同子系统和不同电压域的电源开关,还有就是生产芯片的上电和断电序列,这对于RT的正常启动和掉电是非常重要的,后面我们再详细介绍。

    2.3 SRC(SRC -System reset Controller)
    系统复位控制器(SRC)控制SoC 的复位和引导操作。它负责生成所有复位信号和启动解码。复位控制器确定复位的源和复位类型,例如POR,COLD,并执行复位操作,根据复位类型,复位逻辑产生整个IC 的复位序列。
    我们在RT1050的电源系统框图中,还可以看到SNVS和CCM的身影,这些模块主要是给GPC和PMU提供一些必要的信号,比如CCM可以给SRC的复位操作和GPC的电源门控操作提供同步信号,SNVS则是可以给PMU提供唤醒信号,在这里则不再多说。

    3 Low Power
    上面对RT1050的电源系统结构进行了介绍,可以看出非常的强大,那这些设计都是为了low power,芯片的功耗表现在芯片应用上的一项重要指标,下面围绕Low Power来进行介绍。

    3.1 电源引脚
    下面列出了RT引脚的电源输出引脚定义。
    4.4.png

    3.2 RT的运行模式
    RT的运行模式有RUN模式和Low-Power模式两种。两种模式按照不同程度的不同则是又可以细分8种模式,下表则是显示着每种模式的特征。
    4.5.png
    4.6.png

    下表列出在在RUN模式下不同模式的相关配置。
    4.7.png

    下表列出在在Low-Power模式下不同模式的相关配置。
    4.8.png

    当进入Low-Power模式后,每一个模块则会被配置成如上表描述的使能状态,只有被唤醒源唤醒后,每一个模块才会被还原成原始设置。下表则是列出不同Low-Power模式的唤醒源。
    4.9.png

    在这里我们做一个总结,当RT1050处于RUN模式下时,此时的CPU是处于运行状态下的,不同的只是CPU的工作频率以及其他外设有无工作,而当RT1050处于Low-Power模式下则是有一定的区别,对于Idle模式,在进入Low-Power模式后,CPU是处于休眠状态的,当被唤醒源唤醒后,是可以恢复现场继续执行的,但是在Suspend模式和SNVS模式下,CPU则是重启,被唤醒后则是恢复不了现场。SNVS模式再次被唤醒则是相当于芯片的一次复位重启,而进入Suspend模式后被唤醒,芯片内部的一块RAM中的数据则是被保存的,CPU重启后,这段RAM内的数据则是不回丢失,可以再次找回。
    在这里值得注意的就是,当RT1050处于RUN模式下的Low power run模式下,这时候RT1050是无法切换至Low-Power模式的System Idle模式。因为当进入System Idle模式的芯片状态是依赖当前的RUN模式状态的。

    3.3 Low-Power模式的进入和退出
    如下图所示,RT可以从RUN模式直接进入四种Low-Power模式,也可以从四种Low-Power模式退出至RUN模式。
    4.10.png
    下面我们就举一个从RUN模式进入到SystemIdle的Low-Power模式的例子来说明吧。

    3.3.1 如何进入SystemIdle
    对于进入System Idle的过程,下图详细的列出了步骤:
    4.11.png

    我们再结合NXP实例代码说一下:
    1. void LPM_EnterSystemIdle(void)
    2. {
    3. // 第一部分
    4.     LPM_SetWaitModeConfig();  /* 设置等待模式配置 */
    5. //第二部分
    6.     SetLowPowerClockGate();  /* 设置低功耗时钟门,就是关闭各种不需要的时钟 */

    7.     ClockSetToSystemIdle();/* 将时钟设置成低功耗空闲 */
    8. //第三部分
    9.     /* Power down USBPHY */
    10.     PowerDownUSBPHY();/* 断电 USBPHY */

    11.     /* DCDC to 1.15V */
    12.     DCDC_AdjustTargetVoltage(DCDC, 0xe, 0x1);/* DCDC 到 1.15V */
    13.     /* DCM Mode */
    14.     DCDC_BootIntoDCM(DCDC);/* DCM 模式 */
    15.     /* Disconnect internal the load resistor */
    16.     DCDC->REG1 &= ~DCDC_REG1_REG_RLOAD_SW_MASK;/* 断开内部负载电阻 */
    17.     /* Power Down output range comparator */
    18.     DCDC->REG0 |= DCDC_REG0_PWD_CMP_OFFSET_MASK;/* 掉电输出范围比较器 */

    19.     /* Enable FET ODRIVE */
    20.     PMU->REG_CORE_SET = PMU_REG_CORE_FET_ODRIVE_MASK;/* 使能 FET ODRIVE */
    21.     /* Connect vdd_high_in and connect vdd_snvs_in */
    22.     PMU->MISC0_CLR = PMU_MISC0_DISCON_HIGH_SNVS_MASK;/* 连接vdd_high_in 并连接vdd_snvs_in */

    23.     EnableWeakLDO();/* 使能RegularLDO */
    24.     DisableRegularLDO();/* 失能常规LDO*/
    25.     BandgapOn();/* 带隙失能 */
    26. //第四部分
    27.     PeripheralEnterDozeMode();/* 外围设备进入打盹模式 */
    28. //第五部分
    29.     __DSB();
    30.     __WFI();
    31.     __ISB();
    32. }
    复制代码

    代码第一部分至第四部分分别对应着步骤部的四个部分,大家自行参照着看一看,大家如果想知道具体操作的寄存器,大家可以自行找到例程好好学习一波。在这里我们提一下第五部分的三个函数,__DSB,__ISB, __WFI。

    ①__DSB,__ISB
    DSB为数据同步,ISB为指令同步,对于单核MCU来说,这个操作可以说熟多余的,但是对于多核则是非常有必要的,因为在系统进入休眠后,需要保证几个核的数据和指令是同步的。

    ② __WFI
    WFI(Wait for interrupt)和WFE(Wait for event)是两个让ARM核进入low-power standby模式的指令,由ARM architecture定义,由ARM core实现。简单的来说,就是WFI和WFE指令可以让core进入休眠,然后等待中断或事件来唤醒。所以WFI可以让RT1050进入Low-Power模式。
    (注意:在开始执行进入Low-Power模式之前,最好禁用全局中断,这样可以保证芯片的正常运行,避免不可预估的事情发生。)

    3.3.2 如何退出SystemIdle
    下图展示了如何退出System Idle模式进入RUN模式。
    4.12.png

    从图中可以看出,当CPU别WAKE-UP信号唤醒后,只需要将进入的步骤逆向恢复就可以了。在这里我就不详细说明了。
    (大家如果想知道其他模式的进入和退出,还有每一个步骤的具体实现操作,大家则是可以参考NXP官方文档:《How to use i.MX RT Low Power Feature》以及NXP的官方例程:evkbimxrt1050_power_mode_switch_bm)。

    ————————————————
    版权声明:本文为「小猫爪」的原创文章
    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-24 02:35 , Processed in 0.113264 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表