3170|12

1万

帖子

133

资源

管理员

[转]基于乐鑫ESP8266的STM32+WIFI的OTA案例分享 [复制链接]

 

本篇案例我们将详细介绍如何通过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交互的消耗,如果在商用批量产品使用中不考虑这些限制,整个升级需要的时长、消耗的功耗都将进一步大幅降低。

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

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

个人签名

玩板看这里:

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

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


回复

80

帖子

0

资源

一粒金砂(中级)

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

点评

同关注这个问题。还是掌握在自己手上最安全。app全部更新也不是不可以。  详情 回复 发表于 2020-2-14 11:23

回复

427

帖子

0

资源

一粒金砂(高级)

zhuzd 发表于 2019-9-17 08:41 艾拉比这个差分包制作和还原算法是免费的么?  还是必须用他们的平台?

同关注这个问题。还是掌握在自己手上最安全。app全部更新也不是不可以。


回复

427

帖子

0

资源

一粒金砂(高级)

@wateras1 

谢谢!


回复

7695

帖子

20

资源

版主

IAP using ESP8266  WiFi module

Copyright 2016 STMicroelectronics

 


This application shows how to use the ESP8266 WiFi module to perform an IAP ("In Application Programming") using STM32 Cube HAL.
This application can be run with two different ways:
          
  1. Using a remote PC
scenario_1.png
     
          
  •  In this first scenario, the STM32F769xx board equipped, with the WiFi Module ESP8266, joins, alongside a PC ,a  WiFi access point.
  •  The PC is running a HTTP Web Server, the Wamp Server for example, that hosts the "hello.bin" FW file.
  •  Once WiFi access point is joined, the stm32f769 board establishes a TCP connection to the PC and send a request to download
     the "hello.bin. As soon the downloading is finished the "hello.bin" file is written to the flash.
  •  Once done, the board  will run the "hello.bin" application. when rebooted.
 
  1. Using a mobile phone scenario_2.png
  • In this second scenario, a mobile phone is configured as a WiFi access point to which the ESP8266 will connect.
  • The mobile phone is also running a HTTP web server, the Palpa web server in this case, and is hosting the hello.bin 
  • After joining the WiFi access point on the mobile phone, the stm32F7 board establishes a WiFi connection to the Palpa web server, then download the "hello.bin".
  • Once done, the "hello.bin" FW is written into the flash.
  • Rebooting the board starts the newly flashed binary.


Note:
After flashing the binary file, the IAP original application can be restarted by rebooting the board while pressing down the "USER" button.

 

 

Esp8266_IAP_Client.rar (319.98 KB, 下载次数: 23)

st_logo.png

点评

@zhuzd 看看这里  详情 回复 发表于 2020-3-5 21:56
手动点赞!版主一出手就是干货,能否介绍一下  详情 回复 发表于 2020-3-5 19:36
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复

427

帖子

0

资源

一粒金砂(高级)

littleshrimp 发表于 2020-3-4 19:11 IAP using ESP8266  WiFi module Copyright 2016 STMicroelectronics ...

手动点赞!版主一出手就是干货,能否介绍一下

点评

官方cubemxf7包里的例程  详情 回复 发表于 2020-3-6 08:01

回复

427

帖子

0

资源

一粒金砂(高级)

littleshrimp 发表于 2020-3-4 19:11 IAP using ESP8266  WiFi module Copyright 2016 STMicroelectronics ...

@zhuzd 看看这里


回复

7695

帖子

20

资源

版主

threetigher 发表于 2020-3-5 19:36
手动点赞!版主一出手就是干货,能否介绍一下

官方cubemxf7包里的例程

回复

308

帖子

1

资源

版主

不知道差分包的源码公开不公开

点评

肯定不要想了~~  详情 回复 发表于 2020-3-6 10:41

回复

427

帖子

0

资源

一粒金砂(高级)

hotsauce1861 发表于 2020-3-6 08:13 不知道差分包的源码公开不公开

肯定不要想了~~

点评

那就是没的商量了啊哈哈  详情 回复 发表于 2020-3-6 14:23

回复

308

帖子

1

资源

版主

那就是没的商量了啊哈哈

点评

本地搞一个大的FLASH,然后分多次包,估计只能这样了吧。   不知道有没有更好的方案  详情 回复 发表于 2020-3-6 18:15

回复

427

帖子

0

资源

一粒金砂(高级)

hotsauce1861 发表于 2020-3-6 14:23 那就是没的商量了啊哈哈

本地搞一个大的FLASH,然后分多次包,估计只能这样了吧。

 

不知道有没有更好的方案

点评

对于wifi这种的  完全可以搞大flash或者外置一个存储来备份儿升级包。主要就是从flash和存储的价格去衡量。因为不担心流量。他这种差分只有再对流量要求比较严格的场合用处多一下,其实还是性价比的问题,你自  详情 回复 发表于 2020-4-1 09:55

回复

80

帖子

0

资源

一粒金砂(中级)

threetigher 发表于 2020-3-6 18:15 本地搞一个大的FLASH,然后分多次包,估计只能这样了吧。   不知道有没有更好的方案

对于wifi这种的  完全可以搞大flash或者外置一个存储来备份儿升级包。主要就是从flash和存储的价格去衡量。因为不担心流量。他这种差分只有再对流量要求比较严格的场合用处多一下,其实还是性价比的问题,你自己流量贵还是找他合作贵,衡量着来。


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

最新文章 更多>>
    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表