凡亿教育 · 电子工程师实战教育品牌
嵌入式硬件培训:长沙/广州校区
|
课程咨询:15989478308(同微信)
免费领取课程大纲

MCU代码跑飞前后,先保住Flash和外设

MCU代码跑飞前后,先保住Flash和外设

MCU代码跑飞前后,先保住Flash和外设封面技术图

看门狗能在程序失去喂狗后重启MCU,但从跑飞到复位之间,处理器仍可能执行一串意外指令。它若跳进未用Flash,随机字节可能碰巧变成写存储、改GPIO或跳转的指令。因此安全设计不能只问“最后会不会复位”,还要限制复位前能做多少坏事,并保证复位后能诊断、能恢复。

未用Flash不应留成不可预测空地

代码区之外的Flash可能保持擦除值,也可能因为历史升级、部分擦除或生产流程留下旧数据。处理器若意外取指到这里,不会自动知道它是“空白”,只会按指令集解码。更稳妥的做法是在链接与生产镜像中将未用区填充为能快速进入故障处理的指令或安全陷阱,并对最终镜像做二进制检查。填充策略要按芯片架构确定,不能把某种MCU的非法指令编码直接搬到另一种架构。

MCU代码跑飞前后,先保住Flash和外设正文技术图1:MCU开发板实物用于对应Flash、调试口与外设都处在同一个故障边界内。

图1 MCU开发板实物用于对应Flash、调试口与外设都处在同一个故障边界内。

所有未用异常向量都要有去处

未使用的中断、总线错误、非法指令和其他异常,不应指向0、擦除区或一个空函数后直接返回。可以将它们统一引向最小故障处理器:立即把危险输出转为安全态,记录复位原因、程序计数器、栈指针和关键状态,然后受控等待看门狗或请求系统复位。记录动作必须简短且容错,不能在故障环境里再依赖大块动态内存、复杂文件系统或可能已损坏的外设驱动。

MCU代码跑飞前后,先保住Flash和外设正文技术图2:开发板与外部面包板展示一个MCU故障可以同时影响输出、供电和调试链路。

图2 开发板与外部面包板展示一个MCU故障可以同时影响输出、供电和调试链路。

复位前先保护Flash和执行器

非易失写操作应具备解锁序列、地址范围校验、状态条件和写后验证,不要让一个被误跳转的函数能用随机参数直接擦写配置区。关键参数可使用CRC、版本、双副本或事务式更新,上电时先判完整性再采用。电机、加热器、功率桥和继电器不能只靠软件在复位后拉回安全值,必要时使用默认关断的硬件使能、看门狗输出或独立故障链。

MCU代码跑飞前后,先保住Flash和外设正文技术图3:供电与复位时序图提醒棕断和不完整复位也会进入需要防护的不稳定区间。

图3 供电与复位时序图提醒棕断和不完整复位也会进入需要防护的不稳定区间。

看门狗要能中断故障链,也要留下线索

看门狗超时要短到能限制危险动作,又要允许系统最坏合法任务完成。喂狗不应散落在多个中断或任务里,否则主流程已停滞,某个局部仍可继续喂狗。更稳妥的做法是由统一健康监控点检查关键任务心跳和资源状态后再喂狗。复位早期先读硬件复位原因,保留上次故障的最小日志,连续多次同类复位时进入降级模式,避免设备在高功率状态下不断重启。

MCU代码跑飞前后,先保住Flash和外设正文技术图4:工程示意将未用Flash、故障处理和输出安全态串成一条容纳路径。

图4 工程示意将未用Flash、故障处理和输出安全态串成一条容纳路径。

用故障注入证明它真能回来

可在测试版本中人工改写返回地址、破坏栈、跳入未用向量、触发总线错误和模拟供电缓慢下降。每次注入都要检查危险输出在限定时间内关断、非易失数据保持完整、看门狗或故障处理发生、下次启动能读到正确原因,并且不进入无限重启。生产镜像还要验证未用区填充和向量表,因为调试版本的链接布局与量产版本可能不同。若MCU有独立存储保护单元、写保护位或异常捕获寄存器,要让它们成为故障设计的一部分,而不是出问题后才去找。 供电缓慢下降和反复抖动是另一类高风险窗口。电压低于正常工作要求、却尚未触发可靠复位时,CPU、Flash读取和外设时钟都可能处在不确定区间。棕断复位阈值应根据最高频率与Flash要求设置,并考虑滞回、电源斜率和外部复位器延迟。对可能在掉电过程中写非易失存储的系统,还要估算储能是否足以完成写入,否则应及早禁止新写操作。 故障日志要防止自己变成新的破坏源。可用小型固定记录、递增序号、CRC和预擦除槽位,在故障时只做最少次写入。若电源已不稳,优先保持RAM或备份寄存器中的上下文,下次启动后再安全落盘。调试端口、启动模式和现场升级路径也要保留一个可恢复方案,避免一次跑飞破坏引导参数后,设备既无法正常启动,也无法进入升级模式。所有容纳措施都要在优化开启的量产编译下重验。编译器可能删除看似不可达的陷阱代码,链接器可能把未用段放到不同区域。用链接映射、最终镜像和故障注入共同验证,才能证明保护没被工具链改写。

跑飞防护的目标不只是“最后复位”,而是把失控时间变短、把可改写对象变少、把危险输出硬件化关断,同时留下足以追查的现场。

你们的MCU看门狗复位日志,能看到跑飞前的PC和异常类型,还是只有一个复位标志?

声明:

本文由凡亿教育整理,转载请注明来源!

投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207


上一篇峰值预扫已经过线,准峰值为什么仍可能合格? 下一篇四分之一波长天线短了一半,另一半到底去哪了?