一、 本篇内容简介
本篇主要通过日志打印和一些云端的显示,来讲解整个SOTA升级的过程。
二、实验现象
2.1、目标代码
2.2、最终效果
当我们升级成功后,会跳转到APP_B执行程序。
三、设计思路
根据电信云平台的OTA设计特性,本次设计是通过256字节作为一次传输长度(数据段),具体不了解的同学可以看这篇有介绍
【CH32V303RCT6】NB模块在CTwing下的OTA升级
当看完这篇再回头看这篇,可能会印象深一点,不然就跟可能会有点头大。
3.1、升级包处理
由于原始数据包没有校验位,无法得知在下发数据过程中有没有发生数据错误,故为了整个目的,想着给他加上个校验位和数据长度位(各占用四个字节)。
首先。每一帧数据是256字节,通过写一个上位机,将IDE生辰的bin文件,在其前面加上校验位和数据长度,这个长度是真实的应用长度,即未处理时BIN文件的长度,也就是我们写入flash中数据的长度。
上位机图片:
效果如下:
第一个是整个原始BIN文件的CRC32校验值,后四个字节是数据大小,由图可知,是7300字节。
然后,当接收到第一帧数据时,将这个值取出来,然后按照这个长度,擦除flash
由于CH32V303RCT6一页是256字节,故7300/256= 28.5,所以应该擦除29页。
擦除完以后,接下来就是接收数据,每一帧都有校验位,故对每一帧都进行校验,校验没有问题,就按照顺序将这些数据写入flash中,
这个动作一直持续到数据接收完成,
当接收完成后,就要告诉服务器,我接受完了,要不要准备升级。
当发送完AT+CTM2MSEND=FFFE0116850E000100
这个时,就会收到平台的消息fffe0117cf900000
这个时候再发送个AT+CTM2MSEND=FFFE0117B725000100
告诉它那我就升级了。
此时本地就应该进行数据校验,,校验没问题,就开始执行升级。
升级完成后,要告诉平台,当前升级后的版本,平台会更新这个版本。
我这里为了演示简单,直接校验没问题,就上发升级成功,然后再进行跳转,这样好做点,不然有得加很多东西,比如标志位要写入FLASH中,以及在新程序中加入SOTA部分函数。麻烦。