在物联网开发中,OTA升级(firmware update Over The Air)是模组必备的功能,本文将以RTL8711、乐鑫8266 、庆科3186 wifi模块为例介绍几种的常见的ota方案,并进行对比总结。

                                       RTL8711 ota升级方案

方案简介

8711flash分区如下图:

RTL 8711AF flash分为bootloader、校验信息区、系统信息区、默认固件区,可升级固件区,用户区,默认固件区存放通过烧录方式更新的固件,可升级固件区存放通过ota升级方式更新的固件。这两个区只有可升级固件区是可以用于ota升级的。ota固件升级其实就是IAP(In ApplicationProgramming)应用编程,一般包含两个程序:Bootloader程序和APP程序。以RTL8711AF为例,芯片上电后固定从Bootloader启动。

Bootloader主要负责:

(1)读取每个区应用程序签名信息;

(2)判断应用程序该从哪个区启动;

(3)把对应的falsh区的应用程序拷贝到SRAM,跳转到SRAM运行应用程序。

APP程序负责:

(1)定期发送http请求向服务器获取最新固件信息;

(2)和当前固件对比,确定是否需要更新,如果需要更新从服务器下载最新固件到用于ota的flash区;

(3)更新flash区签名,软件复位。

固件下载的过程中会对固件进行校验检查以确认下载的固件是完整正确的包。

8711 bootloader 程序流程如下图,从系统参数中获取到两个存固件的flash区的地址后,去读取这两个区的签名,在看哪个区的签名是“81958711”便从哪个区启动。

8711 ota APP程序流程图下图,从系统参数获取了可升级区的地址后,去擦除该区,再从服务器下载新的固件写到flash去,最后对该区签名进行更新,并把另一区的签名也更新。

8711  ota方案优缺点

8711ota方案把flash分成两个区,一个区固定用于烧录,一个区用于ota升级,比较简单,容易实现;缺点是产品出厂后,若某次ota升级过程断电或断网升级失败flash被破坏,再次上电只能跑另一个烧录区固件,即出厂时烧录的第一个固件版本,无法跑上一个版本。

那能不能两个区都用于ota升级,这次升级A区下次升级B区,交替升级,当升级失败跑另一个区?此时就是上一个版本了。可以,需要重新设计整个方案。

固定一个区烧录一个区ota升级这样实现起来简单,若设计成两个区交替升级是否可以?比较复杂,原因是:

1、不同区的固件编译条件是不同的,编译时要设置相应flash区的起始地址和大小,所以生成的固件也不同,发布版本时需要发布两个固件。

2、如果要设计成两个区都可ota升级,需要有系统信息记录目前程序跑的分区,ota升级时先获取目前程序跑在哪个区,再从服务器下载另一个区对应的固件,bootloader启动时也需要知道应该从哪个区去启动,比较繁琐。

                                    乐鑫ESP8266 ota方案

方案简介

乐鑫方案采用的就是上文说的双区交替升级方案,下图为乐鑫8266 flash分区图,分区1和分区2都是可以进行ota升级的。

系统参数区存储了一个标志位,标识系统起来后应该去跑哪个区(即图中user1.bin或user2.bin)。系统启动时先去运行boot,boot读取该标志位,然后再到对应的区去读取固件运行。

举个例子,初始状态运行版本V0.1的user1.bin,系统参数区标志位为使用user1.bin。当需要升级时,上传V0.2版本的固件suer1.bin和user2.bin到云端服务器,ESP8266 wifi板执行升级时,先读取系统标志位,确定当前用的是user1.bin,然后从服务器端下载user2.bin存储到分区2,如果user2.bin是正确无误的固件,且下载成功,修改系统参数区标志位为分区2然后重启。重启后首先去读取该标志位,读到是分区2,然后从分区2启动。

如果下载固件过程中断网或断电造成下载失败,则系统再次启动时,分区标志位为使用user1.bin,此时跑的就是上一个版本,而不是出厂时的第一个版本。

乐鑫方案优缺点

乐鑫方案的优点是可以实现升级失败时回到上一个版本,而不是回到第一个版本。缺点就是每次发布版本要同时发布两个升级文件,有点繁琐,万一发布错了,user1.bin和user2.bin搞反了,导致某次升级下载的升级文件与分区不匹配,那wifi板就直接变砖头了没有挽救的余地。

                                               庆科EMW3165方案

方案简介

庆科方案不但解决了升级失败时无法回到上一版本的问题,还很简单。跟上述一样分为bootloader和app程序,不一样的是固件启动运行时步骤稍有不同。

同样在APP程序中发起HTTP请求查询服务器是否有新的固件版本并进行下载,并固定存储到片外的flash区、修改固件的参数信息、重启。重启后做的第一件事是去检查固件参数信息,是否有新的固件?若有将片外flash区的固件搬运到片内flash区,跳转到那里运行。

庆科3165的flash区域规划如下图:

Bootloader放置在片内Flash的0x08000000地址,大小为64K,设备上电后首先跳到这里执行;

Application放置在片内Flash的0x08010000地址;PARAMETER_1和PARAMETER_2(备份用)记录固件参数信息的区域,它们放在片外Flash;

OTA_TEMP区域为OTA固件存储区域,放在片外Flash,Application从网络下载bin文件然后写到该区域,而Bootloader从这个区域搬运固件到Application区域。

升级过程:

(1)Application查询服务器是否有新的固件需要下载,若有下载到OTA_TEMP区;

(2)修改PARAMETER_1参数,记录固件信息;

(3)重启

(4)Bootloader读取PARAMETER_1参数,判断OTA_TEMP区是否有新固件需要更新;

(5)若有把OTA_TEMP区的固件搬运到内置flash区;

(6)跳转到Application程序去执行。

庆科方案优缺点

优点很明显了,这种方式既保证了升级过程失败再次上电跑的是上一版本,又很简单,发版本时只需发一个固件就好不像乐鑫那么复杂。

聪明之处在于分开两个flash区,一个专门用于下载存储固件,另一个专门运行程序。这样就避免了发版本时要发两个固件,又避免了上电启动需要判断从哪个区去启动。下载固件过程若断电下载失败,再次启动先去读取固件参数,发现没有新版本,那此时跑原来片内flash的固件即上一版本固件。

缺点暂时没有发现,可能是上电后需要去搬运固件时间会稍微长一点?古北的模块用的也是这种方案,从使用体验上来看并没有明显感觉时间长。

如果你觉得本篇不错,如上图,转起来~

物联网wifi模块几种ota升级方案对比总结相关推荐

  1. wifi协议_物联网网关智能家居工业4G路由器通用的物联网WiFi模块 MQTT/TCP协议 Linux嵌入式...

    物联网网关智能家居/工业4G路由器通用的物联网WiFi模块 MT7688 支持两种运作模式:IoT gateway 模式与 IoT device 模式. 在 IoT gateway 模式中,可透过 P ...

  2. 无线模块怎么上传服务器,物联网WiFi模块如何进行数据传输

    物物相连的互联网就是我们常说的物联网了,物联网架构可分为三层:感知层.网络层和应用层,主要涵盖了数据的采集.传输及分析应用.物联网应用都有一个共同点:收集数据并将其发送到服务器或其他系统中,在数据传输 ...

  3. STM32--ESP8266物联网WIFI模块(贝壳物联)--温湿度数据上传服务器显示

    本文适用于STM32F103C8T6等MCU,其他MCU可以移植,完整资源见文末链接 一.简介 随着移动物联网的发展,各场景下对于物联控制.数据上传.远程控制的诉求也越来越多,基于此乐鑫科技推出了便宜 ...

  4. STM32--ESP8266物联网WIFI模块(贝壳物联)--远程无线控制点灯

    本文适用于STM32F103C8T6等MCU,其他MCU可以移植,完整资源见文末链接 一.简介 随着移动物联网的发展,各场景下对于物联控制.数据上传.远程控制的诉求也越来越多,基于此乐鑫科技推出了便宜 ...

  5. Arduino--ESP8266物联网WIFI模块(贝壳物联)--数据上传服务器(单数据接口)

    一.简介 随着移动物联网的发展,各场景下对于物联控制.数据上传.远程控制的诉求也越来越多,基于此乐鑫科技推出了便宜好用性价比极高的wifi物联模块--ESP8266,话不多少我们先来看看这个神奇的模块 ...

  6. 物联网wifi模块一键配置

    为什么会有一键配置?      对于IOT wifi 模块,基于成本和性能考虑,并没有类似手机一样有触摸屏交互接口,用户可以在手机看到ap 列表,点击输入密码,就可以连上网络,那怎么办? 一种办法就是 ...

  7. 几种室内定位方案对比,详细介绍室内定位应当考虑的因素-新导智能

    目前,物联网技术发展至今,定 位技术也越来越高超,精确.实现苏州新导室内定位方案的种类也越来越多:蓝牙定位,ZigBee定位,IBecon定位,RFID定位,WIFI定位,UWB定位等等.这些室内定位 ...

  8. 很酷的智能家居/工业路由器两用的物联网WiFi模块 MQTT/TCP协议 MIPS+LINUX+Openwrt技术覆盖

    MT7688 支持两种运作模式:IoT gateway 模式与 IoT device 模式. 在 IoT gateway 模式中,可透过 PCIe 界面连接至 802.11ac 芯片组,并作为双频 8 ...

  9. 单片机 | 3种时钟电路方案对比,你常用哪一种?

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 作者 | 芯片哥 来源 | 今日头条 工程师在开发一个电路系统,往往会需要用到中央处 ...

最新文章

  1. 原生js循环展示dom_【前端面试】用一道题讲 js 的事件循环队列
  2. 《WCF技术内幕》翻译32:第2部分_第6章_通道:通道状态机(1)
  3. NOIP 2012 同余方程
  4. php微信小程序物流进度推送,微信小程序 消息推送php服务器验证实例详解
  5. async异步注解和aspect切面注解等注解的原理
  6. 三种实现分布式解决方案原理分析
  7. 上班族吐槽大集合:那些发生在公司的傻X奇遇
  8. 单调谐回路谐振放大器等效电路分析_手把手教你如何分析三极管电路
  9. stringreader_Java StringReader skip()方法与示例
  10. 程序员6年换了8份工作,工资从4.5K涨到40K,网友问:谁敢要你?
  11. flamingo源码分析(1) :单例模式
  12. 十七、Oracle学习笔记:视图操作和表复制
  13. c语言读写txt坐标文件数据,C语言——从txt文件中读写数据
  14. python远程执行shell脚本文件_python SSH模块登录,远程机执行shell命令实例解析
  15. Improved Robustness to Open Set Inputs viaTempered Mixup
  16. HP246 G6 笔记本升级
  17. 华为电脑如何投屏到电视linux,华为 P30 如何投屏到电脑
  18. 人穷久了或者累久了会sb
  19. 微端和网站可以放同一台服务器吗,微端放云服务器可以吗
  20. sass + compass

热门文章

  1. python两台电脑网络互传信息,Python+pyftpdlib实现局域网文件互传
  2. 用MFC制作一个倒计时小程序
  3. 爬取知网博硕士文献及中国专利存到mysql数据库中的代码及其注意事项
  4. Linux系统中的虚拟化安装部署
  5. 基于BCH的SLP发币系统专属交易所正式上线
  6. 龙珠激斗服务器一直维护,删档最后的狂欢 龙珠激斗关服礼包用法解析
  7. 厉害了我的哥!跑步界新锐:DT Run,Tech Go
  8. 毕业论文格式常见问题汇总
  9. 一、MySQL基础查询
  10. 超越三星,华为再与苹果演绎智能手表江湖