项目场景:
很多有关MCU的项目应用,都需要具备远程升级程序的功能。功能实现起来容易,但是会遇到例如程序文件传输失败,bin文件原本就有BUG,中途掉电等原因导致产品死机。这时就只能由维护人员到现场重新烧程序解决,增加一大笔的维护费用。
方案概述:
由于MCU本身的资源限制,要么跑裸核,要么就是跑FreeRTOS一类的微内核操作系统,无法像linux一样能做到内核态和用户态分离。一旦运行的程序有问题就死机,死得很彻底,无法恢复,以下介绍一种程序设计方法来解决这个问题。
硬件支持:
1.外部看门狗
作用程序死机时复位。
2.外部Flash
常见的MCU程序执行方式有两种:一种是具有片内Flash的直接执行(STM32),另一种是程序存储在片外Flash用XIP的模式执行代码(NXP的i.mxRT系列)。在正常运行时,均无法直接擦出程序空间,所以这里单独加一片Flash,用于存储需要更新的程序文件和备份文件。
软件方案:
1.外部Flash驱动及分区
(1)常用的Flash都是SPI接口,根据手册实现其驱动,用于存储APP文件。
(2)根据具体的APP文件大小划定三个分区,分别是:程序区、备份程序区、程序更新信息区。
注:备份程序是产品出厂时需要写入的一个包含主要功能的有效程序。
2.APP文件传输方式