E
Member
一台跑了两年的设备,突然出现参数丢失,重启后恢复出厂设置。查了一圈发现是 MCU 内部 Flash 的参数存储区写磨损,某个扇区写到寿命了。这类故障平时看不出来,到量才爆发。先确认是不是磨损:读出故障扇区的擦写记录,或者看参数区有没有校验失败的历史。Flash 标称 10 万次擦写听起来很多,但参数每分钟存一次,两年就是 100 万次,早就超了。再看写入策略:参数变化就全量擦写整个扇区是最伤的。改成变化阈值触发存储,参数变化小于阈值不写,写入次数立刻降了一个数量级。再进一步做环形队列轮换扇区,磨损摊到多个扇区上。然后做双备份加校验:两个备份区轮流写,每个备份带 CRC,启动时先校验主备份,失败自动切到备用备份。这次故障的设备没有备份,丢了就是丢了;加了双备份之后,单个扇区损坏不再影响运行。最后看掉电保护:写一半断电是最容易损坏数据的场景。写操作加掉电检测,电压跌落时立即停止写入,或者用双备份的原子切换保证任何时候至少有一份完整数据。内部 Flash 存参数,擦写次数一定要先算账,再谈别的。大家有没有遇到过 Flash 磨损导致的诡异故障?参数存储一般怎么做磨损均衡?
