前言

这节说明一下如何使用阿里云物联网平台的OTA远程升级STM32程序

用户必须已经学习完了基本控制篇里面的阿里云物联网平台教程!

阿里云物联网平台是通过MQTT获取升级固件的版本,固件大小和下载地址信息.

升级概述

1,实现升级是使用的基础通信里面的Topic

阿里云介绍文档:

https://help.aliyun.com/document_detail/89307.html?spm=a2c4g.11186623.6.712.2409429dNoQXsh

/ota/device/inform/a1m7er1nJbQ/${deviceName} 

设备通过这个主题上报设备的固件版本号,要求设备在连接上服务器以后第一时间上报.

格式: {"id":"0000","params":{"version": "0.0.1"}}

/ota/device/upgrade/a1m7er1nJbQ/${deviceName}

设备需要订阅这个主题,服务器会通过这个主题下发固件信息

一般在上传新固件以后,在平台上操作以后,平台才会主动下发.

size是固件大小;  version是服务器固件版本;  url是固件下载地址

{"code": "1000","data": {"size": 432945,"version": "2.0.0","isDiff": 1,"url": "https://iotx-ota-pre.oss-cn-shanghai.aliyuncs.com/nopoll_0.4.4.tar.gz?Expires=1502955804&OSSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XfgJu7P6DWWejstKJgXJEH0qAKU%3D&security-token=CAISuQJ1q6Ft5B2yfSjIpK6MGsyN1Jx5jo6mVnfBglIPTvlvt5D50Tz2IHtIf3NpAusdsv03nWxT7v4flqFyTINVAEvYZJOPKGrGR0DzDbDasumZsJbo4f%2FMQBqEaXPS2MvVfJ%2BzLrf0ceusbFbpjzJ6xaCAGxypQ12iN%2B%2Fr6%2F5gdc9FcQSkL0B8ZrFsKxBltdUROFbIKP%2BpKWSKuGfLC1dysQcO1wEP4K%2BkkMqH8Uic3h%2Boy%2BgJt8H2PpHhd9NhXuV2WMzn2%2FdtJOiTknxR7ARasaBqhelc4zqA%2FPPlWgAKvkXba7aIoo01fV4jN5JXQfAU8KLO8tRjofHWmojNzBJAAPpYSSy3Rvr7m5efQrrybY1lLO6iZy%2BVio2VSZDxshI5Z3McKARWct06MWV9ABA2TTXXOi40BOxuq%2B3JGoABXC54TOlo7%2F1wTLTsCUqzzeIiXVOK8CfNOkfTucMGHkeYeCdFkm%2FkADhXAnrnGf5a4FbmKMQph2cKsr8y8UfWLC6IzvJsClXTnbJBMeuWIqo5zIynS1pm7gf%2F9N3hVc6%2BEeIk0xfl2tycsUpbL2FoaGk6BAF8hWSWYUXsv59d5Uk%3D","md5": "93230c3bde425a9d7984a594ac55ea1e","sign": "93230c3bde425a9d7984a594ac55****","signMethod": "Md5","module": "MCU"},"id": "1507707025","message": "success"
}

/ota/device/progress/a1m7er1nJbQ/${deviceName}

上报更新进度

/ota/device/request/a1m7er1nJbQ/${deviceName}

主动请求云端固件信息

开始测试

1.打开本节的BootLoader程序 和 用户程序

2.修改用户程序  根据自己在平台注册的设备信息修改

3.使用下载器分别下载BootLoader程序 和 用户程序到开发板(顺序不能颠倒)

4.如果没有下载器

请用户参考远程升级的第一节组合hex文件以后下载到开发板.

5.正常运行

上报的版本是 0.0.0

把升级包上传到服务器

1.修改用户程序里面的固件版本

注:这个随意,我修改的是0.0.2,不过在后面需要这个版本号,记着自己的版本号哈

2.编译下工程

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

4.打开OTA Tools.exe软件生成带有CRC校验的固件

5.点击生成固件以后会在原先的目录生成user_crc.bin文件

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

在物联网平台上新增固件

1.设备运维 - 固件升级

2.选择添加模块(使用默认的好像不能主动查询到固件信息)

升级包名称:随意写,  所属产品:选择您当前设备所属的产品

3.模块名称填写1,这个是和单片机程序对应的

这个模块具体啥作用还没看出来!!!

4.选择咱刚才添加的升级包模块,版本号填写刚才用户程序设置的版本号

5.上传固件

6.先不选择验证

验证的话需要先让其中一个设备远程升级验证下.有个繁琐的过程

不过实际产品应用尽量选择验证!

这个验证呢后面会说,咱先快速的使用起来.

开始控制设备升级了

1.点击批量升级

2.选择动态升级

3.下面这些选项,按照自己的需求更改

最后选择覆盖原先的升级任务,就是可以保持设备更新最新的程序

4.观察下串口日志

服务器推送给了咱设备固件信息

5.BootLoader升级完成,运行下载的用户程序

6.用户程序每隔一段时间获取下服务器上的固件信息

假设咱更新了程序

1.修改版本号

2.编译下工程

3.打开OTA Tools.exe软件生成带有CRC校验的固件

4.添加升级包

5.下面的步骤我就不多说了

假设需要验证

1.改个新版本的程序上传上去

2.点击验证

现在批量升级不可以点击,必须先验证下固件

这个是咱先前设备更新完成以后上报的版本号

3.选择可以用来测试的设备

4.可以看到设备开始升级

升级成功上报版本

5.然后按照前面的操作下批量升级就可以了.

单片机程序说明(这篇文章有点长!!!)

2.小总结

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

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

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

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

不过这个Web服务器文件的下载地址是通过阿里云的MQTT获取到的.

3.Flash分配

用户可以根据自己的需求调整stmflash.h文件Flash分配大小

注意:BootLoader程序和用户程序的stmflash.h文件要保证一样.

注意:如果使用的芯片的Flash容量是 256及其以上的型号

假设使用的是 256的

因为容量是256的,所以flash是以2K为一页.

首先FLASH_IAP_SIZE, FLASH_UPDATE_SIZE, FLASH_USERDATA_SIZE 保证是2的倍数

为保证程序运行区和程序备份区的地址是某一页的开始地址

所以  LASH_IAP_SIZE + FLASH_UPDATE_SIZE + FLASH_USERDATA_SIZE 的和需要是4的倍数

用户程序详细说明

1.设置中断向量偏移

地址其实就是用户程序运行地址

2.软件设置程序运行位置和占用flash大小

注:日志会打印这些信息,根据日志打印的设置即可

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

如果更新成功,BootLoader里面会把更新状态置为 0xFF;用户程序需要调用一下这个函数清零这个状态.

如果用户程序不清零这个状态,重启以后BootLoader检查到0xFF会认为执行用户程序失败了.然后执行回滚.

如果本身BootLoader下载程序过程中就检查到下载的程序文件有问题,BootLoader把更新状态设置为对应的错误

然后执行回滚.用户程序需要调用一下这个函数清零状态,如果用户程序不清零这个状态,

重启以后BootLoader检查状态是错误,就会再次执行回滚

5.控制模组连接MQTT服务器

6.在MQTT连接成功回调函数中发送消息和订阅相关OTA的主题

7.在MQTT接收数据回调函数中解析数据

如果接收到更新文件信息,判断版本,解析url,解析固件大小,把url和固件大小存储到flash, 重启

BootLoader程序详细说明

1.查看IAPInit函数

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

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

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

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

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

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

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

8.在串口中断函数里面把固件数据写入缓存

注: IAPHttpHead是为了去掉http 头,找到数据的开始位置

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

10.校验数据的时候是把先前写入的提取出来校验

11.如果缓存里面没有数据,如果接收到相应的文件个数或者超过一段时间没有接收到数据

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

然后做各种判断,

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

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

超过一段时间没有接收到数据,是在这里做的判断

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

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

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

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

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

12.重启以后如果检测到状态是0x01则写入0xFF,执行用户程序

如果检测状态是更新错误,则回滚程序,执行用户程序.

细节说明

1.如果编译用户程序出现下面的警告

其实是这个地方导致的

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

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

用户可以把后面的16改为17或者其他大些的数值,直至不出现警告即可.

2.在前面的文章中说过一个事情:

凡是在BootLoader里面使用中断,跳转到用户程序以后同样有效

BootLoader里面使用了,滴答定时器中断;  串口1,2接收中断,空闲中断; 看门狗.

在加载用户程序之前清除了除了看门狗以外的所有中断.

如果用户在BootLoader里面使用了其它中断,也需要在此处清除!!

如果用户在BootLoader里面使用了其它中断,也需要在此处清除!!

如果用户在BootLoader里面使用了其它中断,也需要在此处清除!!

4.用户按照自己的项目修改BootLoader程序注意事项

1.在发送完获取程序文件指令以后,主循环不能带有执行超过5ms的延时函数

延时函数的存在会影响提取缓存数据写入flash的时间,从而导致缓存溢出,数据接收不完整.

2.如果用户想在BootLoader运行的时候显示更新状态或者进度

可以在IAPInit() ;IAPGetProgramFile(); IAPWriteData();函数里面相应的位置增加提示

注意:IAPWriteData()函数里面不能加延时!!!!

3.如果要展示更新进度

文件大小(字节): IAPStructValue.FileSizeSave

当前接收(字节): IAPStructValue.FileSizeNow

03-STM32+Air724UG远程升级篇OTA(阿里云物联网平台)-STM32+Air724UG使用阿里云物联网平台OTA远程更新STM32程序相关推荐

  1. 03-STM32+Air724UG远程升级篇OTA(自建物联网平台)-STM32+Air724UG实现利用http/https远程更新STM32程序(TCP指令,单片机程序检查更新)

    说明 这节测试一下STM32+Air724UG实现利用http远程更新STM32程序 我已经把固件文件放在了自己的服务器上 默认使用本人提供的下载路径测试 文件路径:  网站根目录->ota-& ...

  2. 01-STM32+Air724UG远程升级篇OTA(自建物联网平台)-STM32如何实现的升级程序

    说明 这节提供给用户一份实现更新STM32的程序(兼容STM32f103全系列) 主要说明STM32是如何实现的升级程序.后面的章节都是在这节的基础上进行优化. 该节源码开源: https://git ...

  3. 03-STM32+BC26丨260Y远程升级篇(自建物联网平台)-功能测试-STM32+BC26丨260Y实现利用http远程更新STM32程序(单片机程序检查更新)

    说明 这节测试一下STM32+BC26丨260Y实现利用http远程更新STM32程序 提供了BC26 和 BC260Y两份程序 两份程序代码是一样的,只有小小个别的差别 这节以STM32+BC260 ...

  4. 01-STM32+BC26丨260Y远程升级篇(自建物联网平台)-基础知识-STM32如何实现的升级程序

    说明 这节提供给用户一份实现更新STM32的程序(兼容STM32f103全系列) 主要说明STM32是如何实现的升级程序.后面的章节都是在这节的基础上进行优化. 该节源码开源: https://git ...

  5. 远程升级技术在汽车智能网联系统中的运用

    本文由田端祥,段晖,陈洁,邹伟乐联合创作 摘要 在新的时代背景下,社会经济不断发展,与之汽车数量呈现出递增式的增长.汽车数量的不断激增,带来的是技术的不断革新,车辆配置技术日臻强大,进而使得驾驶者.汽 ...

  6. STM32 IAP 在线升级原理全解析

    点击左上角的"关注",定期更新 STM32 最新资讯,总有你想要的信息! STM32 IAP 在线升级原理全解析 1. 什么是 IAP?    IAP(In-Application ...

  7. 【阿里云生活物联网架构师专题 ④】分享可商用的ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA笔记。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.esp32接入阿里云物联网平台,实现天猫精灵语音控制: 2.es ...

  8. 6-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(远程升级STM32程序,基于Wi-Fi,同时支持升级Wi-Fi,APP控制版)...

    https://www.cnblogs.com/yangfengwu/p/10456306.html 视频教程 https://www.bilibili.com/video/av54942955/ 请 ...

  9. STM32 OTA远程升级

    STM32 OTA远程升级 第一章 STM32 OTA软硬件结构构成 前言:OTA全称是over the air,主要应用于物联网设备作为更新代码使用,其原理在不同芯片上相通,应用较为广泛. 目录 S ...

  10. STM32 10个工程篇:1.IAP远程升级(一)

    清晨一大早起来开始撰写STM32 10个例程篇的第一章即串口IAP远程升级,虽然网络上有很多免费和付费的STM32教程,但是仍然不断地说服自己沉住气.静下心写一份独一无二的,这份独一无二中也凝聚了一名 ...

最新文章

  1. html初始模板,CSS初始化模板(HTML+CSS模板)
  2. 肇庆配送启动运营 谋定·农业大健康-李喜贵:共筑湾区“菜篮子”
  3. 在你的计算机上使用qr码登录,如何在Android 10上使用QR码共享您的Wi-fi凭据 | MOS86...
  4. tensorflow学习笔记七----------卷积神经网络
  5. 深入理解 nvidia-docker 2.0
  6. lisp中getkword输入默认_2分钟学会在Word中制作田字格 米字格 书法练字再也不用买本子了...
  7. Python中类和对象的概念,面向对象编程
  8. 大数据架构师必读的NoSQL建模技术
  9. 2022最新软件库iApp源码+简约唯美/对接hybbs
  10. 天猫商城多幅图片并排展示广告效果,鼠标指向高亮其它阴影
  11. 4k hidpi 黑苹果_黑苹果 篇四:开启mac下的2k hidpi选项,同时开启144hz
  12. DLL注入 + VEH 的方式处理异常
  13. shecodject生成免杀木马,一步过360、火绒
  14. “Bluetooth keeps stopping“
  15. 《德米安》从那以后伤口很痛,但偶尔我会找到钥匙,沉入心底
  16. 箱形图 python_Python-箱形图
  17. remoting项目运用
  18. 基尔霍夫电流/电压定律
  19. NAND FLASH的读写操作(硬件原理图分析)
  20. Python科学计算summary

热门文章

  1. Gartner:2017年十大科技趋势盘点
  2. 德州农工大学计算机专业如何,德州农工大学美国排名
  3. linux wrf 系统_WRF模式学习_从linux安装开始
  4. 论文写作——1 论文的框架与introduction段落安排
  5. Word插入Excel的时候报错:用于创建此对象的程序是Excel
  6. 如何采集与分析RocketMQ客户端日志
  7. 必看!云桌面与传统PC六项成本对比
  8. OC_AddressBook_通讯录
  9. SpringData JPA联表分页查询需要使用countQuery属性
  10. Android P 源码分析 5 - Low memory killer 之 lmkd 守护进程