MCU 异常复位时用户数据持久化方案

一、需求与背景

在很多应用中,需要在系统出现异常复位(非完全掉电)的情况下,保留一部分关键的用户数据

  • 挑战: 针对 L 系列等不支持 PowerDown 模式的芯片,需要采用特殊方式实现用户数据的存储。
  • 理想状态: 在支持 PowerDown 模式的 MCU 中,通常通过 REGFILE 模块实现数据的保留。

二、几种可行的数据存储方式

存储方式适用场景优点/特点限制/注意事项
REGFILE 模块支持 PowerDown 模式的 MCU专为低功耗数据保留设计。仅限于支持 PowerDown 模式的芯片。
SRAM适用于电压保持稳定的功能性复位场景数据在不掉电情况下可以保持。上电复位(POR)时需要初始化,可能需要额外的 ECC 逻辑处理。
芯片内部特殊模块空间受限的临时存储例如 DMA 寄存器、CAN 的 RAM 等。空间受限;使用后可能影响模块的正常使用
外部 EEPROM 或 内部 Flash适用于掉电情况下也需要保存数据的情况数据可长期保留,即使掉电。写入和读取时间相对较长;存在寿命(擦写次数)问题。

Export to Sheets


三、不同复位情况下的数据处理策略

MCU 的复位一般分为两种:

1. 上电复位 (POR - Power-On Reset)

  • 特点: 最彻底的复位,保证 MCU 从一个完全确定的状态启动。
  • 影响: SRAM 本身有 ECC 逻辑,此时必须进行必要的初始化(POR 初始化)。
  • 数据保留策略(基于 SRAM): 可以通过配置,选择某一块 RAM 作为一个 POR 初始化 Only 的模式,实现在上电时进行初始化,而在正常功能情况下(非 POR)直接读取。

2. 功能性复位 (Functional Reset)

  • 特点: 基本只复位 CPU、外设等工作状态和寄存器,不复位 RCU、SRAM 等模块。
  • 数据保留策略(基于 SRAM):

    • 复位过程电压保持稳定,SRAM 内容可以正常保留
    • 通过 RCU 模块(记录复位情况)对应的寄存器标志,判断是否为 POR。
    • 如果不是 POR,可以直接读取 SRAM 的值,无需初始化。

四、云途YCT配置工具支持情况

云途YCT工具可以采用如下配置方式:

增加对应的POR SRAM区域

↑增加对应的POR SRAM区域,区域要配置仅POR初始化的属性。

定义初始化属性

定义初始化属性

定义Section名称

定义Section名称

定义好初始化属性之后,可以按照如下形式定义section中的变量:

static uint32_t System_RapidResetCount __attribute__((section(".RETENTION")));

根据实际复位原因初始化变量并进行分支控制:

/*FUNCTION**********************************************************************
 *
 * Function Name : System_RapidReset
 * Description   : This function is used to reset the system with pin reset output
 *
 *END**************************************************************************/
void System_RapidReset(void)
{
    if (RCU_RSSR_POR_BOR_MASK == (RCU->RSSR & RCU_RSSR_POR_BOR_MASK))
    {
        /* Clear flag */
        RCU->RSSR |= RCU_RSSR_POR_BOR_MASK;
        System_RapidResetCount = 0;
    }
    System_RapidResetCount++;
    if (System_RapidResetCount <= 10)
    {
        /* Enable reset output */
        RCU->RPFR |= RCU_RPFR_RSTPIN_OBEN_MASK;
        SystemSoftwareReset();
    }
    else
    {
        /* Disable reset output */
        RCU->RPFR &= ~RCU_RPFR_RSTPIN_OBEN_MASK;
    }
}

本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

相关文章

发表新评论