在之前文章中(STM32L425RE的差分升级能力构建、【艾拉比】基于移远BC28的STM32+NB-IOT的OTA案例分享),我们演示了如何利用艾拉比的差分技术通过NB网络升级STM32的APP固件。本篇案例我们将换个方向,详细介绍如何通过WIFI模组将STM32F469的下载差分包,并且利用艾拉比的差分技术进行升级。
升级方案的设计
考虑到ESP8266模组内部的空间资源都十分的充足,所以我们为这个案例的升级设计了两套升级方案,下面我们分别展开来描述这两种方案。
(1) WIFI模组透传差分包升级MCU
如下面框架图所示,与NB网络下升级MCU的方式一致,需要在MCU里内置艾拉比的UA和UC的程序,同样MCU上也要规划一块区域来存放差分包。
基于上面的软件框架,我们将基于HTTP协议来和OTA服务器进行交互通信,以下是整个升级的流程图:
从上图中我们可以看到整个升级的流程分以下几个步骤:
1. STM32透过ESP8266,向OTA服务器发起注册请求。OTA服务器透过ESP8266下发注册结果,STM32将这些注册信息保存下来
2. STM32透过ESP8266,向OTA服务器发起检测版本的请求。OTA服务器透过ESP8266下发新版本的信息,这其中包含了差分包的下载地址
3. STM32基于得到的下载地址,透过ESP8266向OTA服务器发送下载差分包请求。OTA服务器会根据请求将差分包透过ESP8266下发给STM32,STM32在收到后将这些数据存储在差分包存储区域
4. STM32在下载完差分包并经过校验后,透过ESP8266上报下载升级包的结果给到OTA服务器。OTA服务器透过ESP8266下发上报结果
5. STM32在接收到云端返回的上报结果后,进行软重启,启动UA程序
6. STM32运行UA程序,进行差分升级,升级完成后存储本次升级的结果并进入系统
7. STM32透过ESP8266上报本次升级的结果给到OTA服务器。OTA服务器透过ESP8266下发上报结果
8. STM32在接收到云端返回的上报结果后,断开网络,至此整个升级流程结束
(2) WIFI内部完成MCU升级回刷MCU方案
如下面框架图所示, 这个方案需要在ESP8266内置入UC和UA程序,并且在ESP8266内划分两个区域,一个区域用于存储下载的差分包,另外一个用于临时存储MCU的部分固件。
基于上面的软件框架,我们将基于HTTP协议来和OTA服务器进行交互通信,以下是整个升级的流程图:
从上图中我们可以看到整个升级的流程分以下几个步骤:
1. STM32向ESP8266发起升级请求
2. ESP8266通过获取的STM32的信息,向OTA服务器发送注册请求
3. OTA服务器返回注册信息给到ESP8266,ESP8266将MCU的注册信息存储下来
4. ESP8266向OTA服务器发起STM32的检测请求, OTA服务器返回STM32
新版本的信息
5. ESP8266根据获取的新版本信息,向OTA服务器发起下载差分包的请求,OTA服务器收到请求后下发差分包。
6. ESP8266收到差分包,并校验通过后,向OTA服务器发送下载情况上报请求,OTA服务器收到后返回上报结果。
7. ESP8266中的UC程序通知UA程序开始进行STM32的差分升级
8. ESP8266中的UA程序完成MCU的固件升级后,向STM32请求回刷固件,在STM32允许刷写后,进行固件回刷
9. ESP8266中UA程序在STM32升级完成后,存储升级的结果,并通UC程序进行升级结果上报,UC在收到通知后,向OTA服务器上报STM32升级的结果,OTA服务器收到后返回上报的结果给到ESP8266
10. ESP8266收到OTA服务器下发的上报结果后,断开网络,至此整个升级流程结束。
从上面两个升级方案中,MCU的升级都采用的是差分升级,这相较于传统WIFI下的MCU升级优势在于:
(1)升级包下载的时间大大减小,同时也降低了升级的功耗。
(2) 升级的时间也会比整包升级的时间也大为减小,整体提升了升级的效率。下面我们再来看一下,整个设备升级的实际过程。
从下面两张图上我们看到,一张图是STM32F469的Discovery开发板子,一张图是ESP8266的串口模块,我们将通过串口线将两个设备连接在一起,对STM32开发板进行差分升级。
这个STM32的开发板是支持触屏操作的,所以首先我们点击屏幕上的“Check for Update“发起升级流程。
点击屏幕后,OTA服务器很快返回了新版本的信息,屏幕这时候也显示了新版本的差分包大小。
检测到新版本后,设备会自动去请求下载差分包,从下面两张图中我们可以从屏幕上看到下载的进度显示。
从上图来看,差分包已经下载完成,设备会立即向OTA服务器上报这个下载的结果。我们也可以从PC上的Debuger工具中看到这个过程的log
差分包下载完成后,设备会进行重启,进入了bootloader,在这个阶段,集成在设备bootloader里的UA程序会进行差分升级的工作,我们从下面两张图来看一下这个过程
从上图可以看到,屏幕上显示升级进度已经完成,升级已经完成,我们也可以在PC端的Debuger工具中看到这个过程
接下来,设备会进入APP,我们为了区别版本特意将这个版本的屏幕颜色做了改动,大家可以从下面两张图上看到
我们从屏幕上可以看到,这个时候软件的版本好已经升级为2.0,设备自动开始
升级结果的上报并且已经上报成功,从PC端的Debuger软件中我们也能看到这个过程
升级结果的上报并且经上报成功,从PC端的Debuger软件中我们也能看到这个过程
至此,STM32F469的这个开发板已经差分升级成功,升级流程结束。从这几个阶段的log来看,这次的差分包大小是1875个字节,整个固件的大小是87KB,下载的差分包的时间是3秒,升级的时间是11秒,不过这个时长也受限于log的串口打印以及模组的AT交互的消耗,如果在商用批量产品使用中不考虑这些限制,整个升级需要的时长、消耗的功耗都将进一步大幅降低。