zoukankan      html  css  js  c++  java
  • 04-STM32+ESP8266+AIR202远程升级篇-功能1-STM32自动访问升级,基于ESP8266(TCP,HTTP)(备份升级)

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_B/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

    说明

     

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

    升级方式为:备份升级

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

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

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

    info.txt文件内容:

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

    提示

    1.默认使用官方服务器提供的路径下载测试,下面说明的测试流程,

    如果自己还没配置好服务器,可使用默认提供的参数测试!

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

    3.和基础篇一样,串口1作为日志输出口,串口2和ESP8266相连接(杜邦线连接)

     

    BootLoader

    1.打开BootLoader程序

    2.设置下载的程序文件的地址(可以先默认使用该地址测试)

    当前程序文件在本人服务器的放置路径如下(后面会说明怎么生成user_crc.bin文件)

    下载BootLoader程序到开发板

    提示:BootLoader程序让软件优化了下(减小内存占用)

    1.下载以后打印如下

     falsh分配情况

    用户程序

     1.打开用户程序

     

     2.修改获取云端固件信息文件的地址(可以先默认使用该地址测试)

     

    云端固件信息文件在本人服务器的放置路径如下(后面有说明怎么生成info.txt文件)

     

    提示

    BootLoader默认是加载用户程序运行

    后面咱分为两种情况:

    人为下载进去用户程序和不下载进去用户程序

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

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

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

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

    2.调整用户程序的下载设置

    只擦除使用的部分

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

    4.记得修改路径,否则会报错

    5.然后点击下载

    6.运行时打印的日志如下(程序是每隔10S发送get指令获取 info.txt文件)

    当前程序版本 0.0.0

     

    7.连接服务器需要保证wifi可以上网

    如果WIFI没有配网,可以使用基础控制篇的APP/微信小程序按照基础篇教程给WIFI配网

    为了方便测试,可以直接给调试串口发送连接路由器指令

    指令:  {"ssid":"QQQQQ","pwd":"11223344"}

    QQQQQ :自家路由器名称   pwd: 自家路由器密码

    8.正常运行下部分截图说明

    发送http请求 info.txt文件

    如果和当前程序版本不一致

    1.提取url写入flash,置位升级标志,重启

    以上是BootLoader检测到有升级标志,则备份源程序,然后发送http指令获取程序文件

    升级完成以后,运行新程序.

     

     提示:新程序和当前用户程序功能一样,只是设置的版本号不一样

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

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

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

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

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

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

    ① 按下PB5(不要松开)

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

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

    3.客户可以用串口调试助手设置wifi模块连接的路由器

    {"ssid":"QQQQQ","pwd":"11223344"}

    4.发送 updata start 指令

    发送了 updata start指令以后单片机会直接获取更新程序文件,执行更新操作

    提示:

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

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

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

    2.该状态下也支持APUConfig配网,配网结束以后也会自动重新升级

    应用到自己的服务器

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

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

    html:网站根目录

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

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

    2.打开BootLoader程序的 IAP.c

    修改一下 http://mnif.cn/ota/hardware/STM32ESP8266BK/    和上面服务器路径保持一致

    后面的是具体的程序文件名称,可随意指定.

    3.打开用户程序,修改info.txt文件获取的地址

    可以和上面的程序地址设置一样,也可以不一样,info.txt里面有版本号,程序下载路径,具体下面有介绍

    型号和服务器上保持一样

    提升一个版本号,便于升级测试

     

    编译用户程序

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

    2.打开OTA Tools上位机软件

     

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

    3.按照红框选择配置

     

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

     

    5.点击 生成固件

     

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

     info.txt文件(utf8编码)

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

    "version":"0.0.1" 

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

    "size":15990

    程序文件大小

    url

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

    info:

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

    user_crc.bin文件

    此文件是在user.bin的基础上增加了CRC校验位

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

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

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

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

     

    备份升级流程图

    以上流程图只是整体运行说明,为了保证稳定可靠,实际上有许多细节,请用户看程序详细说明部分

    用户程序执行详细说明

    1.用户程序就做两件事情

    一是处理更新,另一个是http获取处理info文件

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

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

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

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

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

    IAPUpdateDispose();

    如果期间有了错误导致了重启,BootLoader便自动回滚!

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

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

    BootLoader程序执行详细说明

    1.BootLoader程序执行相对比较复杂,不过我的代码的理念是

    代码是写给别人看的,更重要的是写给别人用的!

    其实最终还是放到用上!

    为了便于客户移植使用,程序整体封装成了包,后面会有相应的移植教程,供用户参考移植

    2.检测是否进入崩溃处理

    3.更新状态处理都是在这个函数里面处理

    4.如果有更新标志 ,备份程序

    5.否则 检测更新状态,如果更新状态有错误则执行回滚操作

    6.如果更新状态是刚升级完程序,则写入0xFF

    7.如果是有更新标志,则控制模块连接Web服务器(建立TCP连接)

    本程序也支持https下载程序文件

    8.如果连接上Web服务器,则发送获取程序文件指令

    最后的红框是在说明如果发送了指令服务器10S内没有返回数据,则会重新执行连接.

    程序设置有下载超时30S检测,一般只能重新连接3次.到达时间重启,执行程序回滚.

    9.接收函数放在了串口中断里面

    函数 IAPHttpHead(Res); 是为了去除http的数据头

    函数 IAPPutDataToLoopList(Res); 是把程序数据写入环形队列

    由于https访问即SSL访问不能透传模式

    所有需要剔除 +IAPXXXX

    10,只要环形队列里面有数据,则取出来写入flash

    如果到达校验个数,则提取先前存储的数据进行校验

    注意:并不是先校验再存储,而是先存储再提取校验!

     

    11,程序里面有下载超时和整体运行超时检测

    下载超时:只有在确认开始写入程序文件的时候才运行,每次写入程序文件会清零.

    主要解决接收一半程序便不再接收的问题

    整体运行超时:该超时只要执行BootLoader程序便一直运行

    客户可以在IAP.h修改默认的超时时间

    其它细节说明

    1.在前面的文章中说过一个事情:凡是在BootLoader里面使用中断,

    用户程序必须重写,可以不做任何处理,但是必须重写!!!

    BootLoader里面使用了,

    滴答定时器中断;  串口1,2接收中断,空闲中断; 看门狗.

    为了便于用户移植使用,在加载用户程序之前清除了除了看门狗以外的所有中断.

    用户只需在用户程序里面打开开门狗.具体看后面的移植使用部分

    2.http / https 访问与用户填写的url有关

    http://mnif.cn/ota/hardware/STM32ESP8266PP/            http访问,端口80          
    https://mnif.cn/ota/hardware/STM32ESP8266PP/          https访问,端口443        
    http://mnif.cn:8080/ota/hardware/STM32ESP8266PP/   http访问,端口8080

    https://mnif.cn:888/ota/hardware/STM32ESP8266PP/    https访问,端口888

    注:当前底层单片机支持https访问下载,但是Web服务器还需要配置

    解析函数位置(BootLoader IAP.c):

     3.关于flash区域分配

    客户可以在 stmflash.h里面设置flash分配

    调整以后,可以查看日志查看具体地址信息

    然后根据上面打印的信息调整用户程序参数

    警告!BootLoader里面的stmflash文件和用户程序里面的stmflash文件必须保持一致

    警告!BootLoader里面的stmflash文件和用户程序里面的stmflash文件必须保持一致

    警告!BootLoader里面的stmflash文件和用户程序里面的stmflash文件必须保持一致

    结语

    其实此套升级方案经过了大量用户的测试,应用和反馈,然后经过好几次的迭代

    才形成了当前的方案.客户当前只需要拿去使用即可.

    后面有时间可以再慢慢消化掉.

  • 相关阅读:
    二:虚拟游戏摇杆
    一:AndEngine的小例子
    打造属于自己的安卓Metro界面
    linux设备驱动第四篇:驱动调试方法
    C# 二叉查找树实现
    初识 Angular 体会
    C# 霍夫曼二叉树压缩算法实现
    TypeScript笔记[5]泛型+Dictionary 转
    Axiom3D学习日记 5.Frame Listeners, and Input Handling
    Axiom3D学习日记 4.地形,天空,雾
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/13283377.html
Copyright © 2011-2022 走看看