SD NAND-贴片式TF卡-存储卡-免费申样 | 拓优星辰移动版

主页 > 新闻中心 > 技术问答 >

MK米客方德 SD NAND固件升级防变砖:双分区冗余设

 

固件升级(OTA,Over-the-Air,远程在线升级)过程中断电导致设备变砖,根因通常不是运气差,而是单分区升级方案中唯一可启动的固件镜像被擦写了一半。解决思路是A/B双分区冗余设计:两份完整固件互为备份,升级只写非活动分区,校验通过后再原子切换启动标志,掉电则自动回滚旧版本。这套机制要真正可靠,离不开存储介质自身的掉电保护能力——MK米客方德SD NAND(贴片式SD卡)内置控制器通过高达12万次随机断电测试,配合ECC纠错、坏块管理和磨损均衡,让双分区方案在嵌入式设备上落地时少踩很多坑。


为什么单分区升级会变砖

一次典型的OTA流程包括下载新固件、擦除旧固件区、写入新镜像、校验、切换启动这几步。危险窗口出现在“擦除完成、写入未完成”之间:此时旧固件已被破坏,新固件还不完整,设备重启后没有任何可用镜像,就是俗称的变砖。即使固件本身写完了,文件系统元数据(FAT表,记录文件在存储中位置的“目录”)如果在更新瞬间断电,也可能导致分区挂载失败、固件文件读不出。
野外设备、车载终端、工业仪表的升级现场恰恰最容易断电:太阳能供电的数采终端阴天电压跌落,车载设备升级时拧钥匙熄火,工控设备升级时被人误拉电闸。指望“升级时别断电”在产品设计上是不成立的。

双分区冗余怎么设计

A/B双分区的核心是把存储划分为两个槽位,运行机制如下:
  1. Bootloader(引导加载程序,上电后最先执行的一小段代码)启动时读取一个独立的启动标志,判断该从A槽还是B槽启动;
  2. 升级时新固件只写入当前非活动的槽位,活动槽里的旧固件原封不动;
  3. 新固件写入完成后做整包校验(CRC或签名校验),确认无误再把启动标志切换到新槽;
  4. 标志位的写入必须是原子操作——掉电保护机制保证这个动作要么完成、要么维持原状,不出现中间态;
  5. 新固件启动失败(看门狗复位、启动自检不过),Bootloader自动切回旧槽,设备仍然可用。
实现时有两个细节容易被忽略。其一是启动标志本身要存放在独立、少擦写的位置并做双副本互备:更新时先写副本B再更新副本A,上电时两份不一致就以旧副本为准,避免标志位自身翻转导致误切换。其二是回滚要有版本管理:新槽连续启动失败达到阈值(比如3次)后自动标记该固件版本无效,防止设备在两个槽位之间反复横跳;升级包整包下载到临时区、CRC或签名校验通过后才落槽,不完整的包直接丢弃。这些逻辑本身不复杂,但每一步都建立在“写入可能在任意时刻被断电打断”的假设上——存储介质若不能保证单次写入的原子性,软件再严密也会被底层半写数据击穿。
这套方案对存储介质有两个硬性要求:一是写入过程中断电不能损坏已存在的数据和文件系统结构,二是写入寿命要扛得住多次升级。MK米客方德SD NAND内置的Flash控制器提供异常掉电保护、ECC纠错(自动检测并纠正存储位翻转错误)、坏块管理和垃圾回收,文件系统层面不会因掉电崩溃;SLC颗粒擦写寿命达10万次,远高于MLC的约5000次,双分区反复升级也不触及寿命瓶颈。

一个实际场景

某电力配网终端厂家做野外DTU(数据传输单元),主控为STM32H7,存储换成MKDV4GIL-AST(4Gb SLC SD NAND,工作温度-40℃~85℃,LGA-8封装6×8mm)。早期单分区方案在雨季远程升级时,每年约有0.8%的设备因升级中断电变砖,需要派人到现场用调试器重刷,单台上门成本数百元。改为双分区后,5000台设备两年内累计OTA约3万次,期间监测到升级过程中断电47次,设备全部自动回滚到旧固件,无一变砖。SD NAND的标准SD协议也让软件改造很轻:主控走SDIO接口直连,FatFS文件系统直接挂载,双分区逻辑在应用层实现,不需要开发底层Flash驱动。
值得一提的是其Smart Function(健康监测功能),可以读出芯片累计写入量、坏块数、剩余寿命和异常掉电次数。运维平台把掉电次数纳入监控后,还能反向发现供电不稳的现场。

小结

防OTA变砖的设计三要素:双槽互为备份、启动标志原子切换、存储介质自带掉电保护。文件系统层面,FatFS通用性强,LittleFS(专为嵌入式设计的掉电安全文件系统)在日志类场景掉电恢复更快,两者SD NAND都能支持。把“升级必然会遇到断电”作为设计前提,配合可靠的贴片SD卡存储,变砖问题基本可以在架构层面消除。

(责任编辑:拓优星辰)