CH592 低功耗唤醒RAM丢失问题

采用官方PM示例,

定义全局变量

uint8_t pm;

启动后,检测复位方式

    /* 配置串口调试 */
    DebugInit();
    PRINT("Start @ChipID=%02x, Reset: %02x, PM: %d\n", R8_CHIP_ID,
            SYS_GetLastResetSta(), pm);
    DelayMs(200);

打开LowPower_Shutdown示例

#if 1
    pm++;
    PRINT("shut down mode sleep %d\n", pm);
    DelayMs(2);
    LowPower_Shutdown(RB_PWR_RAM24K); //全部断电,唤醒后复位
    /*
     此模式唤醒后会执行复位,所以下面代码不会运行,
     注意要确保系统睡下去再唤醒才是唤醒复位,否则有可能变成IDLE等级唤醒
     */
    HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流)
    PRINT("wake.. \n");
    DelayMs(500);
#endif

现象:

蓝牙可以进入下电模式,按键触发唤醒后,CH592重启,重启标志有时候是05,有时候是00,然后PM变量一直从0开始

我看手册是支持在下电模式下,维持RAM供电的,请问是我哪里配置存在问题么?

补充:RB_PWR_RAM2K 和 RB_PWR_RAM24K 都尝试过,无法保留RAM的值


使用shutdown休眠,被唤醒后会从头跑代码,ram中的变量会重新赋初值。
方法①:适用只需要保存一个字节数据的场景。使用复位保持寄存器R8_GLOB_RESET_KEEP
,只要MCU不彻底断电即可保持。
方法②:ram中可以划分一块指定区域,比如说划分26K尾部的4个字节的区域,编译时ld文件中指定工程可以使用的ram长度为26k-4,则shutdown唤醒后不会复位尾部4字节ram。划分方式参考博客(flash/ram均可通过修改ld文件划分):Mounriver分配FLASH空间(CH573) - SweetTea_lllpc - 博客园


.


@TECH_JW 我要保存的内容有点多,有点复杂,sleep和shutdown下的功耗差距大不大,我现在用的sleep模式,实测电流在15ua左右,产品两节干电池供电,感觉余量不是很大,如果换成shutdown功能,还能降低不,如果差不多,我就不折腾了


如果需要休眠保持的配置项完全一致,功耗相差也不大。

要保存的内容有点多”2K字节ram够存放变量,可以做1uA左右的休眠底电流,用3楼的方法②划分最后2Kram出来不初始化,其他ram不保持,shutdown唤醒后复位。

image.png


只有登录才能回复,可以选择微信账号登录