1. 整体实施思路
软件 EMC 改造建议按照 “先预防加固,再做故障自动恢复” 顺序落地。
- 第一步:做预防技术改造,在运行过程中降低故障发生概率;
- 第二步:部署自动恢复机制,就算干扰造成异常,设备可以自主修复;
- 第三步:整机测试,模拟 EMC 干扰工况验证整套逻辑有效性;
注意:软件方案不能替代硬件 PCB、电源、屏蔽等硬件 EMC 设计。
资料获取:AN1117_增强微控制器电磁兼容性(EMC)的软件技术
2. 自动恢复技术模块分步实施
2.1 复位源识别标记实现
- 固件复位启动入口,最先读取复位状态寄存器;
- 解析复位标记,区分 POR 上电复位、LVD 复位、看门狗复位、寄生热复位;
- POR 上电复位:执行完整全部外设、全局变量初始化;
- LVD 复位:优先执行电源状态判断、电源管理逻辑;
- 看门狗 / 寄生热复位:跳过完整初始化流程,直接执行故障状态恢复、错误统计,跳转主业务循环; 参考逻辑流程图:文档图 1 复位源识别流程。
2.2 非易失 EEPROM 数据保护实施
- 关键业务参数,在 EEPROM 至少保存 2 份独立副本;
- 每一份数据增加校验和或者时间戳标记;
- 每次上电读取参数的时候,必须校验校验和;如果副本 A 损坏,自动切换读取副本 B;两份全部损坏,加载出厂默认参数;
- 避免高频频繁写 EEPROM,减少写入过程遭遇干扰损坏数据的风险。
2.3 看门狗正确部署
- 在系统初始化的早期阶段就使能看门狗,尽可能缩短 “无看门狗保护窗口”;
- 喂狗代码只放置在主循环业务路径,禁止放在任何中断服务函数内部;
- 不在循环开头无脑喂狗;在每一个关键业务逻辑处理完成之后才执行喂狗;
- 超时时间匹配业务最大执行耗时,不要随意设置为最大超时时间。
参考流程图:文档图 2、图 4、图 5、图 6,区分错误和正确实现。
2.4 备份 RAM 业务状态保存恢复
前置条件:确认目标 MCU 硬件具备备份 RAM;普通 RAM 复位后数据丢失,不能使用该方案。
- 定义备份 RAM 专属变量,用于保存业务状态标记、关键时序参数;
- 业务运行过程中,业务状态发生变更,同步更新备份 RAM 变量;
- MCU 复位后,启动恢复程序 CRR 读取备份 RAM 标记;
- 根据 RAM 内保存的状态标记,恢复业务动作、时序参数,无需人工介入。
参考流程图:文档图 3 自动恢复软件示例。
3. 预防技术模块分步实施
3.1 中断向量闲置优化
- 未使用中断保持 NVIC 使能位关闭;
- 保证全部未使用中断都指向 Default_Handler 默认异常处理函数;
- 异常处理函数内部可以增加故障计数,用于产品故障日志统计。
3.2 过滤关键字节、非法字节
- 编译工程,输出.list 汇编机器码文件;
- 检索识别关键字节位置;
- 在对应位置插入 NOP 指令,移位机器码,规避 PC 跑飞误触发;
- 同样方式处理非法字节序列。
3.3 闲置 Flash 存储区防护
- 未使用 Flash 扇区设置为只读属性;
- 闲置区域填充未定义指令;
- 上电增加程序完整性自检,校验程序段校验和;检测异常进入故障处理。
3.4 IO 输入与 ADC 采样软件抗干扰
3.5 寄存器巡检与刷新机制
3.6 冗余数据存储落地
- RAM 运行数据:重要变量,采用原值 + 互补值双备份,读取的时候做比对校验;
- EEPROM 持久化参数:双倍副本 + 校验 / 奇偶校验 / ECC,按需选用;
- 定期完成主备副本同步。
3.7 数字模块上电复位(V1.1 新增)
在 main 函数最开始初始化位置加入数字模块复位代码,参考 G32M3101 示例:
static void SystemReset(void)
{
/* Reset all digital module */
SCU->APBRST = 0x8477;
SCU->APBRST = 0x00000000U;
SCU->AHBRST = 0x73;
SCU->AHBRST = 0x00000000U;
}
用途:规避 PMU 遭受 EMC 干扰 LDO 电压上漂 > 1.7V 导致数字模块跑飞风险。
4. 常见错误实现清单(文档记录坑点,完整保留)
- 看门狗使能太晚,初始化阶段 PC 跑飞,看门狗尚未启动无法捕获故障;
- 在中断服务函数里面执行喂狗,主循环卡死依旧持续喂狗,看门狗完全失效;
- EEPROM 只存单份关键参数,遭遇干扰写入中断直接参数损坏;
- 直接使用普通 RAM 当作复位状态保存区,复位之后数据已经清零;
- 寄存器只做初始化,运行全程不再巡检刷新,被干扰篡改之后无法自动复原;
- 复位之后不管复位来源,每次都完整全套初始化,拉长故障恢复时间。
5. 固件集成验证建议
- 单元模块验证:分别测试复位识别逻辑、看门狗逻辑、EEPROM 校验逻辑、RAM 恢复逻辑;
- 整机工况验证:结合 EMC 测试环境,模拟浪涌、静电等干扰,验证设备故障检测、自动恢复行为;
- 故障日志建议:增加故障记录,记录复位源、故障次数,方便后期产品现场问题排查。
阅读全文
48