This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430FR4133 LPM3与LPM4的功耗问题

1. 之前有提问过LPM4 使用RTC唤醒的问题(https://e2echina.ti.com/question_answer/microcontrollers/msp430/f/55/t/176268),大概原因就是:CSCTL8寄存器中的ACLKRREQEN(时钟请求默认是启用的),当进入LPM4之前检测到RTC是活动的,ACLK会开启,导致不能真正进入LPM4模式。

2. 上述现象,我是不是可以理解为实际进入的是LPM3模式?因为我在实际测试中发现,睡眠唤醒都很正常,加上我的一些外围电路,睡眠时的功耗只有约6ua。

3. 如果我的猜想成立,那我程序中睡眠时直接写入LPM3模式,功耗应该也差不多是6ua?,但我实际测试同样的电路功耗约24ua,差别很大,(RTC唤醒方式:程序用LPM3模式睡眠功耗约24,程序用LPM4模式睡眠功耗约6ua)。

4. 如果我的猜想不成立,那RTC唤醒的情况下,程序使用LPM4睡眠到底真正是进入什么睡眠状态呢,这种方式到底可不可正常使用用呢?

请教各位高手,谢谢!

  • 通常对于RTC,您需要从ACLK获取时钟。在这种情况下,您可以使用的最低功耗模式是LPM3模式,因为LPM3模式不会禁用ACLK。

    若是您使用LPM4的话,按照我的理解应该会进入一个没有明确编号的LPM模式。也就是说所谓的LPM名称并不存在。它们只是状态寄存器中不同的位组合,具有部分组合和部分独立的效果。

    因为在设置中CPUOFF位会停止CPU。该位是所有LPM的一部分,无论其他位是否有效,它总是有效的。

    您甚至可以创建其他尚不存在的组合。就像禁用DCO但让CPU保持活动状态一样。

    它没有自己的LPM编号,但是可能的,有时是有用的组合。
  • 1. 但我是目前使用LPM3模式与LPM4模式(RTC唤醒)的功耗相关太大了,因为我目前对LPM4模式+RTC的理解,应该就是ACLK开启了,其它能关闭的都关闭,如下图

    2. 我在LPM3模式下按理应该同样可以达到LPM4+RTC配置效果,如下图

    与LPM4不同的都是可选项(意味着我可以关闭)达到只开启ACLK的效果。

    3. 但是我现在测试(LPM3+RTC),最后睡眠只开启了RTC,其它外设都是关闭的(未使用到的时钟应该都会关闭),功耗与LPM4+RTC相关很大(6ua,24ua)

  • 楼主你好,LPM3和LPM4之间的差别,除了你用红框圈出的,还有中断源等内部电路。

    实际上,在mcu选用低功耗模式的时候,除了关注某种低功耗模式的电流外,更关心的是mcu在这种低功耗模式下可用的资源,以及系统在软件和硬件上的低功耗实现。

  • 既然您要使用RTC,那为何不直接使用LPM3.5呢?
  • 1. 我想搞清楚两者功耗差距的原因:

    A)我LPM3模式操作有问题?(进入LPM3模式还需要其它特定操作?所有外设都是关闭的包括看门狗,;只开启了RTC;CS寄存器我也反复查看过,没有特定操作来降低LPM3的功耗,时钟条件请求位也禁用了),

    B)又或者是LPM3与LPM4的功耗相差本来就这么大(但是从官方手册上看不应该有这么大的差距)

  • 个人感觉您的LPM3配置估计有问题,官方数据

    ILPM3, RTC Low-power mode 3, RTC, excludes SVS 3 V 25℃下 Supply Currents 为 1.25 µA

    而Low-power mode 4, excludes SVS 3 V 25℃下 Supply Currents 为 0.58µA

    若是可以的话,给出您的相关代码
  • 另外官网有进入LPM3的例程,您也可以测试一下

    ti\msp\MSP430Ware_3_80_07_00\examples\devices\MSP430FR2xx_4xx\MSP430FR413x_MSP430FR203x_Code_Examples\C



    msp430fr413x_LPM3_01.c Enters LPM3 with ACLK = XT1CLK = 32768Hz.
    msp430fr413x_LPM3_02.c Configure MCLK and SMCLK up and down to adapt LPM3.
  • void sleep(void);
    
    int main(void) 
    {   
        // Stop Watchdog timer
        WDTCTL = WDTPW + WDTHOLD;
        //初始化gpio /* 按低功耗要求配置 */
        LowPower_InitGPIO( );   
        CSCTL3 |= 0x0010;   //REFO做为FLL稳定频率
        __bic_SR_register(SCG0); // enable FLL
        while(CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)); // 等待频率锁相环FLL锁定
        // 选择MCLK和SMCLK时钟源:DCOCLKDIV(FLL将MCLK和SMCLK的频率稳定为1MHz 并且DCOCLKDIV频率为1MHz),
        // SMCLK默认与MCLK同频;选择ACLK时钟源:REFO(内部32kHz 时钟源)
        CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK; 
        CSCTL8 = 0; //禁用时钟条件请求
        __enable_interrupt();

    sleep(); ...... } void sleep(void) { RTCMOD = LOWPOWER_TIME_10SEC; // TI 建议在使能RTC 计数器中断前通过读取RTCIV 寄存器将RTCIFG 位清零。 if ( RTCIV ){ } else { } //1000分频,VLOCLK时钟源 RTCCTL |= RTCPS__1000 | RTCSS__VLOCLK | RTCIE | RTCSR; __bis_SR_register(LPM3_bits | GIE); }

    1. 这是我贴出的部分低功耗处理代码,麻烦看一下

    2. 我对比了TI官方的LPM3例程,好像没有太大的区别,只是官方使用的是XT1,而我用的是REFO

    3. GPIO部分我没有贴出,都是按照低功耗要求处理的,因为在LPM4+RTC模式下没有功耗异常,应该是正确的