首页 > 编程语言 >1-STM32F103+ML307(中移4G Cat1)OTA升级篇(自建物联网平台)-STM32通过ML307使用http或https下载程序文件升级程序(单片机程序检查更新)

1-STM32F103+ML307(中移4G Cat1)OTA升级篇(自建物联网平台)-STM32通过ML307使用http或https下载程序文件升级程序(单片机程序检查更新)

时间:2024-10-16 14:10:58浏览次数:6  
标签:ML307 文件 建物 flash 程序 用户程序 固件 BootLoader

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

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

 

 

说明

这节测试一下STM32通过ML307(中移4G Cat1)使用http或https远程下载升级单片机程序

为应对小容量单片机问题,升级底层包也支持把备份程序写到外部flash.

 

打开BootLoader程序,说明下flash支持情况

1,当前程序(V3.0.0)支持外接W25Q80/16/32/64/128,后续将根据用户需求增加更多的flash支持

 

 

 

使用内部flash备份程序和外部flash备份程序时, 内部的flash分配情况如下:

使用外部flash以后,备份用户程序区放到了外部flash, 使得用户程序有了更大的空间

 

 

 

2,当前开发板未板载外部flash,测试外部flash需要用户自己外接flash

MCU     flash芯片

PA4   --   CS

PA5   --   CLK

PA6   --   MISO (SO)

PA7   --   MOSI (SI)

 

 

3,flash选择

 如果用户使用内部flash备份程序, 则把FLASH_EXTERN_BACKUP_ENABLE 设置为0

 如果用户使用外部flash备份程序, 则把FLASH_EXTERN_BACKUP_ENABLE 设置为1

 

 

测试

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

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

文件路径:  网站根目录->ota->hardware->STM32ML307BK

 

 

user_crc.bin: 是固件程序文件.

该固件程序文件并不是直接可以运行的文件

里面的数据每隔128字节后面增加2位CRC校验位

单片机下载以后每隔130字节校验一下数据,然后把前128字节写入Flash.

加入CRC校验让升级变的稳定可靠.

 

info.txt文件内容:

 

 

version:0.0.1  云端固件程序版本

 url:http://mnif.cn/ota/hardware/STM32ML307BK/user_crc.bin   固件程序下载地址

"info":"1.解决了部分BUG  2.优化了部分程序"       使用APP控制升级时,APP的提示信息.

 

升级过程:

用户程序里面每隔一定时间控制网络模块使用http的GET指令获取云端info.txt文件

然后从文件里面获取服务器里面的固件程序版本和固件程序下载地址等信息

如果与自身版本号对比不一致,就把固件程序下载地址写入flash,然后设置更新标志,重启,

重启执行BootLoader以后,BootLoader程序检测到更新标志,则提取固件下载的地址,

然后使用http下载程序文件,把程序文件写入flash,完成升级.

 

 

备份升级流程图

 

 

 

GPRS模块和底板安装说明

单片机通过串口2和GPRS模块通信;  单片机PA8引脚作为复位模组使用;

(单片机)PA2    ----   (ML307)RX;

(单片机)PA3    ----   (ML307)TX;

(单片机)PA8    ----   (ML307)RST

 

注意: 单片机都是使用串口2和模组通信,所以需要拆掉ESP8266

 

测试

1.使用下载器下载BootLoader程序

 

 

 

 

使用单片机串口1打印串口日志(115200)

 

 

 

 

2.下载用户程序到开发板

 

 

 

 

3.观察日志,说明执行流程

开始运行用户程序,默认提供的用户程序设置的程序版本是0.0.0

 

 

 

 

用户程序控制模组连接服务器,使用get指令获取获取服务器上的固件信息文件 info.txt

检测到版本不一致以后,把获取的url存储到flash,设置更新标志,重启.

重启之后BootLoader提取url

 

 

BootLoader发送get指令获取程序固件

 

 

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

 

 

 

用户程序运行后控制模组连接服务器,使用get指令获取获取服务器上的固件信息文件 info.txt

现在程序版本和上面的是一致的,所以不需要更新

 

 

 

 

应用到自己的服务器(如果使用SSL, 则把下载路径的http改为https即可)

1,首先确定好程序文件在服务器的路径

关于本人服务器文件夹解释:(自己随意就好,最后的文件夹命名建议使用产品的型号)

html:网站根目录

ota: ota升级

hardware : 硬件程序

STM32ML307BK: 作为产品的型号(根据自己的产品型号修改)

 

 

我把固件放到了里面那么固件程序下载地址为:

http://服务器IP地址/ota/hardware/STM32ML307BK/user_crc.bin

 

那么固件信息的下载地址为:

http://服务器IP地址/ota/hardware/STM32ML307BK/info.txt

 

 

2.修改  用户程序(mcu_project)  的IAP.C文件

提示:我把它们存储在程序bin文件的1024字节倍数的位置是为了BootLoader下载的时候便于提取这些数据;

1.产品型号(我设置的为STM32ML307BK)

2.修改固件程序版本(可随意指定,我设置的为0.0.2)

3.修改记录云端固件信息文件下载地址(我的为:http://mnif.cn/ota/hardware/STM32ML307BK/info.txt)

 

 

 

 

 

5.修改BootLoader程序 的 IAP.c (设置下产品型号和默认的固件程序下载地址)

注意:BootLoader里面的产品型号要和用户里面的一样!!!!

BootLoader程序下载的时候会判断这个型号一不一致

 

 

6.编译用户程序(mcu_project)

会在工程目录的bin文件夹生成 user.bin文件

 

 

7.打开OTA Tools上位机软件

 

 

8.按照红框选择配置

 

 

 

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

 

 

 

10.点击 生成固件

 

 

 

11.将在user.bin目录生成user_crc.bin文件

 

 

 

 

这边说下两个bin文件的区别:

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

 

2.OTA Tools软件会改写size,会把此文件大小填写到此处

 

12.把生成的user_crc.bin文件拷贝到服务器

 

 

 

13.还差一个info.txt文件

我准备了一个模板

 

14.修改版本号(和用户程序里面设置的一样)

 

 

 

 

16.修改固件程序下载地址(和服务器上面的保持一致)

 

 

 

 

 

17.最后的提示信息不需要更改,当前用不到

 

 

 

 

18.把info.txt文件也拷贝到服务器,然后按照一开始的步骤测试即可

 

 

小总结

远程升级单片机程序其实就是使用模组以TCP方式连接Web服务器,

然后给TCP服务器发数据,数据格式是GET指令.

服务器接收到指令以后会下发文件给模组,模组通过串口把数据发给单片机,

单片机接收到数据以后写到flash,最后加载运行.

关于Flash分配调整

1.打开BootLoader 或者 用户程序(mcu_project)里面的iap_interface.h 文件

--------------------------------------------------------内部flash--------------------------------------------------------

如果是使用内部flash备份程序,flash的开头存储的BootLoader程序,  结尾存储更新相关数据, 预留一些空间让用户存储其它数据

最后剩下的平半分, 一部分存储用户程序, 另一部分用来备份用户程序

 

 

--------------------------------------------------------外部flash--------------------------------------------------------

备份的程序存储到了外部flash, 内部flash的最一开始存储的BootLoader程序, 

然后是存储用户程序, 然后是存储更新相关数据, 最后预留一些空间让用户存储其它数据

 

 

 

2,用户可以根据自己的需求调整Flash分配大小, 注意:BootLoader程序和用户程序的Flash分配要保证一样.

--------------------------------------------------------内部flash--------------------------------------------------------

 

 

调整完成以后,下载BootLoader程序, 串口会打印flash具体分配

 

--------------------------------------------------------外部flash--------------------------------------------------------

 

 

 

调整完成以后,下载BootLoader程序, 串口会打印flash具体分配

 

 

3,无论是否使用外部flash,用户在项目中如果需要使用内部flash存储数据, 可以根据自己存储的数据量调整

数据存储的起始地址是:  FLASH_USERDATE_ADDR

 

 

4,如果使用外部flash备份数据,同时用户也需要使用外部flash存储数据,

为了不影响备份区,我给用户提供了数据存储的起始地址:  FLASH_EXTERN_USERDATE_ADDR

 

 

5.调整完flash以后,用户需要根据BootLoader打印的信息, 来设置用户程序(mcu_project)运行地址和占用空间

 

这个要根据自己打印的设置

 

 

 

关于升级底层包

1.升级底层包分为iap, flash_extern, iap_interface文件

 

 

1,flash_extern文件是配置和外部flash通信的文件

 

 

2. iap文件主要是控制着升级流程的文件

可以在BootLoader程序里面设置升级过程中需要如何去下载,设置多大的缓存区

 

 

3. iap_interface是接口文件

根据移植的单片机实现内部的接口,只要完成里面的接口就完成了升级程序框架

 

 

 

 

 

用户程序说明

1.解析下info.txt下载路径(服务器上记录固件信息的文件)

做这个程序是为省去用户解析的繁琐.

 

 

 

 

 

 

 

执行解析之后:

IAPStructValue.SSLEN = 0;

IAPStructValue.IP = mnif.cn;

IAPStructValue.Port = 80;

IAPStructValue.Path = /ota/hardware/STM32ML307BK/info.txt

 

如果路径写的是https

IAPStructValue.SSLEN = 1;

IAPStructValue.Port = 443;

 

如果指定了端口号   http://mnif.cn:8080/xxxxxx

IAPStructValue.Port = 8080;

 

 

4.处理更新(这个程序需要在认为用户程序没有问题的时候在用户程序里面执行一下)

解释:

BootLoader更新程序的时候会设置一些更新状态;用户程序需要调用一下这个函数清除更新状态.

如果用户程序不清除更新状态,那么一旦程序重启以后BootLoader检查到更新状态以后会自行回滚程序.

 

 

 

5.控制模组发送get指令获取服务器上记录固件信息的文件

 

 

 

 

解析info.txt文件内容, 如果版本号不一样,提取和存储url然后设置升级标志,重启.

 

 

7,补充:如果编译用户程序出现下面的警告

 

 

其实是这个地方导致的

 

 

为了便于BootLoader程序提取用户程序bin文件里面的型号,把型号存储在了偏移1024字节的位置.

设置的这个字符串存储的位置影响到了芯片本身默认分配一些数组的位置.就会报上面的警告.

貌似不影响什么...

 

 

BootLoader程序详细说明

1.查看IAPInit函数

 

 

 

2.获取存储的固件下载的url,并解析下url

 

3.如果有更新标志,则备份下用户程序

 

4.如果没有更新标志,则查看下更新状态

如果状态是更新有错误,则执行回滚,如果检测到没有备份的程序,就重新执行升级

 

5.如果更新状态是0x01,就设置更新状态为0xFE

 

7.控制模组连接TCP服务器(Web服务器), 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

8.在TCP接收数据函数里面把固件数据写入缓存

单片机是通过串口和模组通信,所以在串口中断里面接收

 

 

 

 

 

 

 

9.从缓存取数据,并写入flash

 

 

 

 

  

 

 

 

 

 

11,如果接收到相应的文件个数

设置 IAPStructValue.ReadDataEndFlag = 1;认为接收完成

 

 

12,判断接收完成之后做各种判断

如果确实接收完了,则写入0x01状态,重启.

如果有错误,则尝试重新下载.

 

 

 

 

13,如果是程序文件下载完成以后重启,重启以后检查到更新状态是0x01会设置更新状态为0XFE

 

 

 

 

 

 

14,然后加载运行用户程序

 

 

 

 

 

 

 

 

15,超过一段时间没有接收到数据了也设置为接收完了数据

 

 

 

 

 

 

 

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

整体运行超时是BootLoader程序一运行就一直累加的的定时, 超过时间就会控制程序重启

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

标签:ML307,文件,建物,flash,程序,用户程序,固件,BootLoader
From: https://www.cnblogs.com/yangfengwu/p/18469821

相关文章

  • 基于Node.js+vue个人博客系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的快速发展,个人博客作为一种重要的网络应用形式,逐渐成为人们表达自我、分享知识和经验的重要平台。博客不仅能够记录个人的成长历程、生活点......
  • 基于Node.js+vue会议管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息化时代的到来,各类会议活动日益频繁,会议管理成为组织工作中不可或缺的一环。传统的会议管理方式往往依赖于纸质记录和人工协调,不仅效率低下,还容易出......
  • 基于Node.js+vue高校食堂饭卡管理(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景高校食堂作为学生学习和生活的重要场所,其管理效率和便捷性直接关系到学生的日常生活质量。传统的高校食堂饭卡管理方式往往依赖于人工操作和纸质记录,这不仅......
  • jsp电子商务平台设计与实现4x766程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景随着互联网技术的不断进步,电子商务平台已成为现代商业活动的重要组成部分。它不仅打破了地域限制,为消费者提供了丰富的商品选择和便捷......
  • jsp电子产品销售系统n0tof程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、课题名称电子产品销售系统的设计与实现二、研究背景与意义随着电子商务的蓬勃发展,电子产品销售行业正经历着从传统销售模式向线上销售模式的......
  • jsp电影推送及电影数据管理系统3f6db(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、课题背景与意义随着电影产业的快速发展,用户对电影的选择需求日益多样化。然而,如何从海量的电影资源中精准地找到用户感兴趣的内容,成为了一个亟......
  • jsp电影院管理系统7740a--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景与目标随着电影市场的不断扩大和观众需求的多样化,电影院管理面临着诸多挑战。传统的人工管理方式已难以满足高效、准确、实时的管理需......
  • 利用Socket,编写一个聊天程序
    实验1:利用Socket,编写一个聊天程序实验要求要求1.给出聊天协议的完整说明;2.利用C或C++语言,使用基本的Socket函数完成程序。不允许使用CSocket等封装后的类编写程序;3.使用流式套接字、采用多线程(或多进程)方式完成程序;4.程序应该有基本的对话界面,但可以不是图形......
  • jsp电子商城系统8vaq3--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景随着互联网技术的飞速发展,电子商务已成为现代商业的核心模式之一。电子商城作为电子商务的关键载体,为企业和个人提供了一个跨越地域限......
  • jsp电子产品的售后服务系统的设计与实现1az78(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、课题名称电子产品售后服务系统的设计与实现二、研究背景与意义随着电子产品的普及和市场竞争的加剧,优质的售后服务已成为企业提升客户满意度......