1. 自动恢复技术底层原理
自动恢复整套机制分为三步流程:故障检测→自我修复→数据保护。
- 故障检测:读取复位状态寄存器、监控程序运行状态,识别异常事件来源;
- 自我修复:根据故障类型执行差异化恢复策略,区分上电冷启动、寄生干扰复位,不需要每次完整全量初始化;
- 数据保护:RAM 做高速临时备份,EEPROM 非易失介质长期保存关键参数,复位之后恢复业务上下文。
1.1 复位源识别与标记技术
MCU 复位源分为四类:LVD 低电压复位、看门狗复位、POR 上电复位、热(外部 / 寄生)复位。 复位寄存器在上电之后持续保存复位来源标记,程序启动入口优先读取该寄存器。
流程图对应文档图 1《复位源识别》:启动读取复位寄存器,分支到不同处理逻辑,完成后进入主程序。寄生复位属于 EMC 干扰最常见故障来源,依靠复位源标记实现快速恢复。
1.2 非易失性存储(EEPROM)数据管理
EEPROM 可以掉电保存数据,但存在短板:写入耗时较长;写入周期遭遇 EMC 干扰极易发生异常复位,造成存储数据损坏。 防护底层策略:
- 冗余存储:同一份关键数据保存多份副本,规避单点损坏;
- 附加校验手段:校验和、时间戳标记;
- 每次上电业务读取数据前,必须校验标记有效性,判断存储内容是否已经被干扰损坏。
1.3 本地看门狗监测与控制
错误使用方式:直接把看门狗超时时间设置到最大,仅当作 “定时炸弹”,只要不死机就喂狗。该做法无法及时捕获阶段性逻辑卡死。 正确底层逻辑:不在全局循环无脑喂狗;在每一个业务关键执行步骤之后执行喂狗刷新;一旦某个业务步骤卡死,看门狗快速超时触发复位恢复。
流程图对应文档图 2《本地看门狗监测与控制》:初始化阶段同时初始化看门狗、系统状态、软硬件资源;主循环执行业务逻辑 + 喂狗;异常检测命中之后执行复位逻辑,重新启动系统。
1.4 RAM 关键数据存储恢复机制
依靠备份 RAM硬件能力,普通 RAM 复位后数据丢失。 技术逻辑:业务运行阶段,把关键软件序列指令、时序参数持续写入备份 RAM 特定区域;一旦 EMC 干扰造成 MCU 复位,恢复程序 CRR 读取备份 RAM 内保存状态,直接恢复业务上下文,不需要外部人工干预。 示例业务逻辑:RAM(SEQ)=0x03代表高速电机激活条件,复位后读取该标记判断是否重启电机动作。
流程图对应文档图 3《自动恢复软件示例》:正常运行持续更新备份 RAM;MCU 复位触发之后执行 CRR 恢复程序,读取 RAM (SEQ) 标记,判断是否执行电机激活,加载时序参数 T1、T2,恢复业务运行。
资料获取:AN1117_增强微控制器电磁兼容性(EMC)的软件技术
2. 预防技术底层原理
预防技术的核心目标:增大电磁干扰想要破坏系统的难度,尽可能避免故障发生。覆盖中断、存储、指令字节、外设寄存器、ADC 采样、数字模块等多个维度。
2.1 中断向量闲置优化
电磁干扰可能触发闲置未使用中断。APM32 启动文件提供 Default Handler 默认中断入口;NVIC 寄存器控制中断使能,只有使能位打开的中断才能够响应中断请求。对闲置中断合理配置,避免干扰触发无用中断,减少上下文切换带来的系统风险。
2.2 看门狗动态监控,两类典型错误实现剖析
- 错误场景 1:系统初始化尚未完成就发生 PC 跑飞,但看门狗还未使能,故障无法被看门狗捕获。对应文档图 4《看门狗启用后使能延迟》。
- 错误场景 2:把喂狗操作放置在中断服务函数 ISR 里面。即使主程序已经死循环卡死,只要中断还在不断执行,就持续喂狗,看门狗永远不会超时复位,完全失去监控作用。对应文档图 5《在看门狗中断服务函数中进行喂狗操作》。
- 标准正确实现:系统初始化阶段尽早使能看门狗;喂狗操作放在主业务主循环,禁止放在中断服务函数。对应文档图 6《看门狗正确配置流程图》。
2.3 关键字节、非法字节滤除
- 关键字节:特定机器码,PC 跑飞误执行该字节,会意外唤醒低功耗模式,造成系统异常;处理:查看编译输出.list 机器码文件识别位置,在前面插入 NOP 指令移位地址,规避误触发。
- 非法字节:ISA 指令集没有定义的机器码;不同 MCU 行为不一样,有的当作 NOP 空操作,有的直接触发系统复位;处理:同样插入 NOP 指令规避非法字节序列。
2.4 闲置存储区安全防护
Flash 未使用的闲置扇区,PC 跑飞之后可能跳转到该区域执行代码。防护手段:
- 读写保护:闲置存储区配置只读;
- 冗余备份:保存程序副本,增加校验和 / 哈希校验;
- 自检与故障捕获:上电自检程序完整性;闲置区域填充未定义指令,一旦跑飞跳入,直接触发硬件异常,进入故障处理。
2.5 输入信号筛选比较、ADC 均值化
- IO 输入:不要单次就读取引脚状态就判定逻辑;多次采样比对,过滤尖峰噪声,无硬件成本,软件即可实现。
- ADC 模数采样:多次采样,取平均值,抑制随机电磁噪声带来采样跳变。
2.6 冗余数据存储管理
三种冗余手段:
- 双倍互补存储:同一个数据,同时存储原值和取反互补值,放在物理不相邻存储地址;
- 奇偶校验:检测单 bit 错误;
- ECC 错误校正码:不仅检测,还可以自动修复部分 bit 错误。 同时需要定期做数据备份交换,主副本异常可以切换备用副本。
2.7 寄存器重配置与状态监测
时钟寄存器、IO 配置寄存器极易受 EMC 干扰篡改。
- 定期刷新:主循环或者定时器定时重写寄存器配置值;
- 状态巡检:读取寄存器和预期标准值比对,一旦不一致,立刻重新恢复寄存器配置。
2.8 数字模块上电复位(V1.1 新增)
风险来源:PMU 模块遭受 EMC 冲击,LDO 电压上漂超过 1.7V,造成片上数字模块逻辑跑飞。 底层处理:上电初始化阶段,软件对全部数字模块执行一次硬件复位。文档给出 G32M3101 SDK 参考代码片段:
static void SystemReset(void)
{
/* Reset all digital module */
SCU->APBRST = 0x8477;
SCU->APBRST = 0x00000000U;
SCU->AHBRST = 0x73;
SCU->AHBRST = 0x00000000U;
}
3. 技术方案优缺点汇总(源自文档表格)
自动恢复技术要点
| 技术项 | 优点 | 短板 | 关键操作提示 |
|---|---|---|---|
| 复位源识别标记 | 精准区分复位诱因,实现差异化恢复,减少初始化耗时 | 需要使用 MCU 内部复位状态寄存器 | 程序入口第一时间读取复位寄存器 |
| 非易失性存储管理 | 掉电保存关键参数 | EEPROM 写入速度慢,擦写次数存在上限,写入过程抗干扰弱 | 多副本 + 校验和,上电校验数据有效性 |
| 本地看门狗控制 | 监控业务执行,卡死快速复位恢复 | 配置不当会造成误复位 | 关键业务步骤之后喂狗,禁止中断内喂狗 |
| 备份 RAM 数据存储 | 复位高速恢复业务上下文 | 依赖 MCU 硬件备份 RAM;普通 RAM 复位丢失数据 | 复位恢复程序读取 RAM 标记,判断业务状态 |
预防技术要点
| 预防技术 | 优点 | 缺点 | 实现方法 |
|---|---|---|---|
| 看门狗动态监控与恢复机制 | 防止程序死锁,提升整机可靠性 | 配置不合理产生意外重启 | 合理设置超时,主循环喂狗 |
| 闲置存储区安全防护 | 防止跑飞执行错误代码,保护存储数据 | 占用存储空间,增加自检开销 | 闲置区域设只读,填充异常指令,增加校验 |
| 输入信号筛选与比较 | 抑制输入噪声干扰 | 会引入逻辑延时 | 多次采样比对输入电平 |
| 中断向量闲置优化 | 降低寄生中断干扰风险 | 需要维护中断向量配置 | NVIC 按需使能中断,配置 Default Handler |
| 筛选滤除非法和关键字节 | 规避 PC 跑飞误执行危险机器码 | 少量改变代码布局 | 分析 list 文件,插入 NOP 指令移位 |
| 模数转换结果均值化处理 | 抑制 ADC 采样随机噪声 | 增加采样计算耗时 | 多次采样求取平均值输出 |
| 寄存器重配置和状态监测 | 及时修复被干扰篡改寄存器 | 占用 CPU 运行资源 | 主循环 / 定时器定期巡检刷新寄存器 |
| 冗余数据存储管理和交换 | 检测修复存储比特翻转 | 消耗更多存储空间 | 互补存储、奇偶校验、ECC、定期备份 |
152