OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4385|回复: 2

远程升级单片机程序怎么设计?

[复制链接]

17

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2015-1-7
在线时间
101 小时
发表于 2021-4-12 20:33:48 | 显示全部楼层 |阅读模式
   
   之前的文章中介绍过串口和U盘的IAP程序设计。在物联网应用中,远程IAP升级MCU的程序是一项非常有用的功能。当设备出现程序问题或者需要更新程序时,只需要在服务器上对设备进行升级,不需要在有专门的人员去现场进行升级,节省人力物力。
    要实现远程升级,首先要实现以下几个基本功能:
    1、Flash读写。不管是本地IAP还是远程IAP,这都是最基本的功能。
    2、无线通讯。可通过WIFI、4G、以太网等多种方式来实现,根据实际项目需求选择。
    3、通讯协议。常用的通讯协议有TCP、HTTP、FTP、MQTT等。其中HTTP、FTP和MQTT都属于应用层协议,都是基于TCP(传输层)来实现的。用户也可以自己基于TCP编写简单的通讯协议来实现。
    远程IAP与本地IAP的设计思路是一致的,都需要设计BOOT程序和APP程序。但也有一些需要注意的地方。主要是远程升级需要考虑网络延迟甚至网络中断的问题。体现在以下几方面:

设计程序缓存区

    在内部或外部存储器开辟一块区域,用于存储分包接收到的程序数据。等到全部数据接收完毕后再一次性写入到Flash进行升级。这样做有以下2点好处:
    1.直接升级时间可能会比较长,影响用户正常使用,增加缓存区设计可以大大减少升级时间。
    2.直接升级时,如果网络出现问题,可能导致设备无法正常启动变砖。增加缓存区设计后,即使升级数据传输失败,也不影响设备的正常使用。

健壮的通讯协议

    本地升级时数据传输出错的概率比较小。但远程设计时就需要多考虑一些,比如前后两包数据可能同时达到等。因此,设计通讯协议时,就要更严谨,服务器发送的指令和数据都需要设备的确认回复。

程序备份设计

    即使有上面的各种设计的保障,也不能保证升级过程不会失败。最好能够设计一个程序备份区,在程序升级失败时运行备份区程序。



下面介绍一种简单的远程升级的步骤。

  • 服务器发送升级请求指令。
  • 设备回复收到请求升级指令。
  • 服务器发送程序升级数据。(一般包含包头、包号、总包数、分包的程序数据、校验)
  • 设备收到程序数据后,确认校验无误,存储到程序缓存区,并按包号回复服务器,防止出现传输包错乱。
  • 服务器收到回复后再发送下一包数据,直至结束。
  • 程序数据发送完成后,服务器发送升级结束指令。
  • 设备收到结束指令后,回复服务器。并在Flash指定位置写入升级标志,重启进入BOOT程序。
  • BOOT程序读取升级标志,若需要升级,则读取程序缓存区数据,写入到Flash中。
  • 升级完毕,跳转到Flash指定地址运行。

推荐阅读:

STM32固件IAP程序实现

STM32F4通过U盘升级程序

STM32CubeMX之内部Flash读写



https://shop72315368.taobao.com
承接软硬件项目开发
微信搜索 “嵌入式技术开发”,关注我的公众号
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

205

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1322
金钱
1322
注册时间
2015-3-3
在线时间
127 小时
发表于 2021-4-13 09:03:28 | 显示全部楼层
首先,第一帧应该传所有数据信息的概括包,然后分包进行传输,传输一包,确认一包(如果是距离较近的多台,那么最好广播模式).然后可增加断点续传,查询等包功能类型.
海纳百川者,荣耀伴一生!
回复 支持 反对

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-10-17
在线时间
13 小时
发表于 2021-4-14 10:38:22 | 显示全部楼层
文件传输、整机升级策略、NOR-FLASH掉电恢复全套解决方案。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 03:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表