前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >04-STM32+W5500+AIR202远程升级篇

04-STM32+W5500+AIR202远程升级篇

作者头像
杨奉武
发布2020-08-03 21:15:38
1.2K0
发布2020-08-03 21:15:38
举报
文章被收录于专栏:知识分享知识分享

说明

这节测试一下STM32+W5500实现利用http远程更新STM32程序

升级方式为:备份升级

STM32控制W5500使用http获取云端info.txt文件,从文件里面获取远端固件版本,固件下载地址等信息

如果和自身版本号不一致,固件下载地址写入flash,设置更新标志,重启,

BootLoader提取固件下载的地址升级程序!

注:当前程序只支持HTTP下载,HTTPS将放到优化章节里面

提示1

1.我已经把固件文件放在了自己的服务器上

默认使用本人提供的下载路径测试

后面会说明如何应用到用户的服务器.

2.记得修改控制生成bin文件的指令,否则编译报错

3.跳线帽短接单片机串口1 和 USB转串口模块

下载BootLoader程序到开发板

1.下载以后打印如下

2.falsh分配情况 

提示2

后面咱分为两种情况:

人为下载进去用户程序和让单片机升级进去用户程序

一,人为下载用户程序到开发板(注意下载细节)

1.上面已经下载了BootLoader程序,为了再次下载用户程序不覆盖掉BootLoader程序

需要下载的时候做一下配置.

需要使用下载器 ST-Link  / Jlink 

2.打开用户程序( STM32F10xTemplate )

调整用户程序的下载设置

选择只擦除使用的部分

 3.注意检查下其它配置是否正确

4.记得根据自己的软件修改路径,否则编译会报错

5.然后点击下载

6.下载进去用户程序以后,将会从BootLoader加载用户程序运行

注:用户程序是在基本控制篇MQTT通信程序的基础上增加了升级处理程序

7.用户程序运行10S左右发送get指令获取云端的info.txt文件

info.txt文件

version: 云端固件的版本号

size: 云端固件的大小

url: 云端固件的下载地址

info:暂时用不到,后面的APP/上位机控制升级使用

如果和当前固件版本不一致,则提取size和url存入flash,设置更新标志,重启

8.BootLoader检测到升级标志,提取固件文件大小,解析url,执行备份

9.发送get指令获取程序文件,写入flash,打印每一帧数据校验结果

10,写入下载成功标志,重启以后运行新程序

11,我放到云端的程序就是当前的用户程序,只不过版本设置的不一样

也是每隔10S发送get指令获取info.txt文件,检测一下版本

二,只下载BootLoader的情况下测试

1.如果客户不能按照上面的方式下载用户程序

BootLoader程序里面也是可以测试升级

实际上该功能是为了预防程序彻底崩溃而做!

注意:程序本身就支持自动回滚,崩溃处理基本上用不到!

2.下载好BootLoader程序以后,需要用户按照下面的步骤操作

① 按下PB5(不要松开)

② 复位STM32(或者断电上电)

③ PB5按下大约10S,指示灯500ms闪耀,此时松开PB5,程序进入崩溃处理状态

3.使用调试口发送以下指令

{"data":updata,"cmd":"start"}

程序重启以后将自动执行更新操作

提示:

1.崩溃处理状态下,也支持重新设置程序文件下载地址

{"url":"http://mnif.cn/ota/hardware/STM32W5500BK/user_crc.bin"}

当前是按照内部默认路径.

应用到自己的服务器

1,在自己的网站根目录建立几个文件夹

关于本人服务器文件夹解释:

html:网站根目录

ota -> hardware : ota升级,用于升级硬件端程序

STM32W5500BK: 作为产品的型号,和程序里面设置的型号保持一致!!!后面的控制升级方式会用到这个型号

2.打开BootLoader程序的 IAP.c

修改一下 http://mnif.cn/ota/hardware/STM32W5500BK/user_crc.bin

mnif.cn/ota/hardware/STM32W5500BK  根据自己的服务器修改

3.打开用户程序的 IAP.c

修改  http://mnif.cn/ota/hardware/STM32ESP8266BK/info.txt

mnif.cn/ota/hardware/STM32W5500BK  根据自己的服务器修改

char DeviceModel[50] = "STM32ESP8266BK";//型号和上面保持一致

char FirmwareVersion[FirmwareVersionLen] = "0.0.1";//提示一个版本好测试

编译用户程序

1.默认会生成 user.bin文件

2.打开OTA Tools上位机软件

提示:该软件是修改bin文件加入校验(使得升级稳定可靠)

3.按照红框选择配置

固件版本和程序里面设置的一致

固件下载地址(文件路径) http://mnif.cn/ota/hardware/STM32W5500BK/   和上面设置的一致

4.选择用户程序生成的 bin文件

5.点击 生成固件

6.将在user.bin目录生成info.txt 和 user_crc.bin文件

info.txt文件(utf8编码)

{"version":"0.0.1","size":42380,"url":"http://mnif.cn/ota/hardware/STM32W5500BK/user_crc.bin","info":"1.解决了部分BUG 2.优化了部分程序"}

"version":"0.0.1"    :程序版本号,升级前先访问这个文件,用于对比版本号

 "size":42380    :程序文件的大小,用于接收判断接收完成

 url  :固件的下载地址,单片机获取此地址,通过访问此地址获取固件程序

 info:  当前用不到,APP/微信小程序,点击检查硬件版本,更新时,提示的信息.

user_crc.bin文件

此文件是在user.bin的基础上每隔128字节增加了CRC校验位

如果最后不满128字节则用0xff补全

7.把info.txt 和 user_crc.bin 放到云端服务器

8.然后按照一开始的测试步骤测试即可

注意:如果客户事先下载用户程序然后测试,需要保证和云端写的版本不一致!

否则会显示版本一致,不需要升级.

用户程序执行详细说明

1.用户程序对于更新就做三件事情

一是解析info.txt文件的地址

上面的程序是解析  char IAPUrlUserInfoPath[IAPUrlPathLen]="http://mnif.cn/ota/hardware/STM32W5500BK/info.txt";

IAPStructValue.SSLEN    :0-http   1-https

IAPStructValue.IP   :IP地址或者域名  解析上面的为:mnif.cn

IAPStructValue.Port   :端口号  如果用户不指定,http默认80端口,https默认443端口

IAPStructValue.Path  :路径     /ota/hardware/STM32W5500BK/info.txt

二是处理更新

从上面的流程图可知:写完程序以后BootLoader写入更新状态为 0x01

重启以后,BootLoader判断是0x01 写入 0xFF

用户程序需要清除这个状态,如果不清除0xFF

那么再次重启以后,BootLoader判断是0xFF便会执行回滚操作!

提示:用户应该在认为程序执行没有错误的地方调用 

IAPUpdateDispose();

三是http获取处理info文件

上面的程序便是解析info.txt文件里面的内容

对比版本号,提取文件大小,提取url,设置更新标志,重启

BootLoader程序执行详细说明

1.BootLoader所有的初始化程序都在  IAPInit();

2.提取升级文件信息

3.如果有更新标志则备份程序文件,擦除程序运行地址,准备接收程序

4.如果没有更新标志,检查更新状态变量

如果是更新有错误,则回滚程序

如果更新标志是 0x01 则修改更新标志为 0xff

5.如果有更新标志,控制W5500连接服务器

6.连接上服务器以后,置位连接标志

7.发送get指令获取程序文件

8.如果判断接收到了 Web服务器返回的数据,写入缓存

9.从环形队列里面提取数据写入falsh,提取写入的数据,校验

提示:为了保证校验无误,是先写入,然后再提取之后做校验

而不是先校验数据,再写入!

10,接收完数据,如果有错误则设置对于的更新状态,否则写入0x01(重启)

11.如果有错误则执行尝试升级

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 提示1
  • 下载BootLoader程序到开发板
  • 提示2
  • 一,人为下载用户程序到开发板(注意下载细节)
  • 二,只下载BootLoader的情况下测试
  • 应用到自己的服务器
  • 编译用户程序
  • 用户程序执行详细说明
  • BootLoader程序执行详细说明
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档