社区导航

 

搜索
查看: 652|回复: 1

[经验] [转]基于乐鑫ESP8266的STM32+WIFI的OTA案例分享

[复制链接]

9628

TA的帖子

133

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2019-9-12 12:05 | 显示全部楼层 |阅读模式

本篇案例我们将详细介绍如何通过WIFI模组将STM32F469的下载差分包,并且利用艾拉比的差分技术进行升级。

 

升级方案的设计

 

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

 

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

 

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

 

1.png

 

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

 

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

 

3.png

 

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

 

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

0.png

 

5.png

 

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

 

6.png

 

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

7.png

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

 

8.png

9.png

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

10.png

 

 

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

 

11.png

 

12.png

 

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

 

13.png

 

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

 

14.png

 

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

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

15.png

 

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

 

16.png

 

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

此帖出自stm32/stm8论坛

扫一扫,关注 EEWORLD 微信订阅号

行业资讯、电子趣闻、技术干货、精彩活动……尽可掌握~

玩板看这里:

http://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!



回复

使用道具 举报

75

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-9-17 08:41 | 显示全部楼层

艾拉比这个差分包制作和还原算法是免费的么?  还是必须用他们的平台?



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-11-19 07:44 , Processed in 0.102731 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表