技术方案

首页 >> 方案 >>  技术方案

基于乐鑫ESP8266的STM32+WIFI的OTA案例分享

2021年06月01日来源:艾拉比发布分享朋友圈
0

在之前文章中(STM32L425RE的差分升级能力构建【艾拉比】基于移远BC28的STM32+NB-IOT的OTA案例分享),我们演示了如何利用艾拉比的差分技术通过NB网络升级STM32的APP固件。本篇案例我们将换个方向,详细介绍如何通过WIFI模组将STM32F469的下载差分包,并且利用艾拉比的差分技术进行升级。


升级方案的设计


考虑到ESP8266模组内部的空间资源都十分的充足,所以我们为这个案例的升级设计了两套升级方案,下面我们分别展开来描述这两种方案。


(1) WIFI模组透传差分包升级MCU


如下面框架图所示,与NB网络下升级MCU的方式一致,需要在MCU里内置艾拉比的UA和UC的程序,同样MCU上也要规划一块区域来存放差分包。


image.png


基于上面的软件框架,我们将基于HTTP协议来和OTA服务器进行交互通信,以下是整个升级的流程图:


image.png


从上图中我们可以看到整个升级的流程分以下几个步骤:


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的部分固件。


image.png


基于上面的软件框架,我们将基于HTTP协议来和OTA服务器进行交互通信,以下是整个升级的流程图:


image.png


从上图中我们可以看到整个升级的流程分以下几个步骤:


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开发板进行差分升级。


image.png

image.png


这个STM32的开发板是支持触屏操作的,所以首先我们点击屏幕上的“Check for Update“发起升级流程。


image.png


点击屏幕后,OTA服务器很快返回了新版本的信息,屏幕这时候也显示了新版本的差分包大小。


image.png


检测到新版本后,设备会自动去请求下载差分包,从下面两张图中我们可以从屏幕上看到下载的进度显示。


image.png


image.png


从上图来看,差分包已经下载完成,设备会立即向OTA服务器上报这个下载的结果。我们也可以从PC上的Debuger工具中看到这个过程的log


图片


差分包下载完成后,设备会进行重启,进入了bootloader,在这个阶段,集成在设备bootloader里的UA程序会进行差分升级的工作,我们从下面两张图来看一下这个过程


image.png


image.png


从上图可以看到,屏幕上显示升级进度已经完成,升级已经完成,我们也可以在PC端的Debuger工具中看到这个过程


图片


接下来,设备会进入APP,我们为了区别版本特意将这个版本的屏幕颜色做了改动,大家可以从下面两张图上看到


image.png


我们从屏幕上可以看到,这个时候软件的版本好已经升级为2.0,设备自动开始

升级结果的上报并且已经上报成功,从PC端的Debuger软件中我们也能看到这个过程


image.png


升级结果的上报并且经上报成功,从PC端的Debuger软件中我们也能看到这个过程


图片


至此,STM32F469的这个开发板已经差分升级成功,升级流程结束。从这几个阶段的log来看,这次的差分包大小是1875个字节,整个固件的大小是87KB,下载的差分包的时间是3秒,升级的时间是11秒,不过这个时长也受限于log的串口打印以及模组的AT交互的消耗,如果在商用批量产品使用中不考虑这些限制,整个升级需要的时长、消耗的功耗都将进一步大幅降低。



  • 商务热线

    4008-210-928

  • 联系邮箱

    contact@abupdate.com

  • 艾拉比微信公众号