核心名词
针对单片机
-
内部flash:单片机的内部代码存储器。
-
外部flash:外挂的flash。SPI NOR Flash的W25q64、I2C EEPROM的AT24C系列。
-
RAM:单片机的运行内存。
单片机升级方式
bootloader + app启动方式,正常情况下上电启动时bootloader负责判断是否要升级app版本。IAP功能对app分区进行擦除和写入。还有一种情况,app区代码在执行时收到更新指令,直接软件复位重启。
-
单分区不备份:
适用范围:内部flash很小,没有外挂flash。
流程:1.bootloader判断进入升级,2.从串口拿到升级的信息,对app内容擦除写入。
适用场景:基本没什么使用商业场景,风险还大,用来学习boot+app这个概念,一旦没完成完整的升级就会出现死机,所以必须要求有个存储标志位用来判断是否是完整的app代码。读写flash后部分没有占用的分区页。
-
单分区+备份:
适用范围:内部flash够大,没有外挂flash,内部flash比代码大小大起码两倍。
流程:1.bootloader判断进入升级,2.备份当前app代码到备份区,3.从串口拿到升级信息,对app内容擦除写入。
适用场景:升级不频繁。
-
外挂flash备份:
适用范围:这个需要设计电路时添加外置flash存储器。
流程:1.app运行是判断是不是要进行升级,2.通过串口拿到升级信息写入到外置flash中,并且版本信息也要写入到外置flash,3.写完之后,软件复位,bootloader通过外置flash中版本信息判断是否要升级,4.bootloader从外置flash中拿到升级信息对app内容擦除写入。
适用场景:ota升级最容易出现问题就是网络,写到外部的flash,保证升级内容完整,再对现有的内容擦除写入更新不容易出错。
-
外挂flash多备份:
与"外挂flash备份"基本一致,就是多了几层备份,会备份多个版本。
-
直接烧录替换:
这个不是ota,但是有些c端用户设备,可以提供一个上位机软件,一个比较适合用户操作的界面,让用户通过这个软件对设备进行更新升级。而不是用什么stc-icp之类的软件。这个软件会通过串口拿到设备的版本信息,同时软件从服务器中拿到最新版本的升级bin文件。
软件设计要求:1.一键安装ch340驱动,把ch340驱动放到软件目录下,软件中一个按钮(安装驱动)点击按钮后拉起ch340驱动软件进行安装。2.自动识别串口,要求用户先拔掉与设备连接的usb,识别到当前串口数量和串口名称信息,用户插入设备连接usb之后,判断新增的串口,打开新增的串口,发送握手协议,拿到设备的信息。剩下的就是烧录了。
boot和app需求:可以做boot和app分区,也可以不做。
-
内存卡升级:
适用范围:要求电路设计时规划内存卡插槽。
流程:1.插上内存卡。2.手动断电重启。3.bootloader判断是否有内存卡,并且内存卡内容是否正确,防止随意的内存卡都修改app分区,如果内存卡数据有问题1s钟后自动启动app分区内容,不做修改。4.内存卡数据正确,擦除和写入app分区。
上位机软件要求:内存卡数据应该在前部分数据就说明本次版本信息。比如verson+crc+data这种方式写入内存卡。上位机软件写卡流程,1.从服务器拿到版本信息,拿到bin文件。2.写入内存卡,将版本信息和校验和数据等内容烧到内存卡。