嵌入式单片机 / 企业面试高频题
设备配置参数每次修改都写进内部Flash,过一段时间就读出乱码。面试官通常会追问:存储器为什么不能像RAM一样随意覆盖,以及中途掉电怎么办。
面试先说结论
常见MCU Flash编程通常只能按器件规则把已擦除位由1写成0,恢复为1需对页/扇区执行擦除。反复擦写受到寿命限制;保存重要参数时应使用版本、长度、CRC、双槽/日志与掉电提交策略,而不是直接覆盖唯一一份有效数据。
一、核心原理与工程判断
擦除和编程粒度不同
不同STM32系列的Flash页、扇区和编程字宽规则不一样,必须查具体型号参考手册。有些器件支持ECC,未按对齐或编程粒度操作可能导致异常。擦除通常以较大的页/扇区为单位,编程粒度则较小。
掉电为何危险
假设先擦除唯一保存参数的Flash页,再写入新值,擦除和编程过程中突然掉电,旧参数可能已失效,新参数又未写完。仅靠上电后检查一个固定标志位,不能可靠发现所有写坏情况。
怎样设计可靠提交
常用做法是双槽或追加式记录:为新记录写入版本号、长度、校验和与序列号,写完并验证后再更新有效性标记。启动时选择最后一份校验通过的记录。实际写入次序、异常复位处理与容量规划需要结合Flash特性设计。
二、实际排查与设计步骤
确认具体MCU的页/扇区大小、编程对齐、擦写寿命和电压范围。
确定参数更新频率,估算寿命;高频写入考虑磨损均衡、EEPROM或FRAM等替代方案。
设计至少两个有效记录位置,新增记录先写数据再提交有效标志。
在写入前后检查供电稳定性,控制低压写入风险,记录错误返回码。
测试擦除中、写入一半、校验前后等多个时刻强制断电重启,验证可恢复性。
三、面试中的常见失分点
误区1:把Flash当成RAM反复覆盖同一地址。
误区2:以为加CRC就自动解决掉电更新中的原子性问题。
四、面试官可能继续追问
面试追问:为什么同一段数据写得不频繁也会提前损坏?
还要检查是否总是更新固定页、温度和工作电压是否超规格、擦写控制是否正确,以及是否存在程序逻辑重复写入。
相关业务与课程
围绕电子工程师实际岗位能力,了解对应方向的系统课程。

扫码关注































