收藏官网首页
查看: 9830|回复: 2

WiFi物联中的OTA升级设计原理

321

主题

1054

帖子

4502

积分

论坛元老

Rank: 8Rank: 8

积分
4502
QQ
跳转到指定楼层
楼主
发表于 2016-11-8 12:47:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
本帖最后由 bigfanofloT 于 2016-11-8 12:51 编辑

WiFi物联中的OTA升级设计原理       

在物联网开发中,OTA升级是产品必备功能之一,本篇文章将以庆科EMW3165模块的OTA升级原型为例进行设计原理介绍,以及提供简单的STM32 DEMO实现帮助大家进一步理解。
一、EMW3165硬件架构
file:///C:/Users/DengQ/AppData/Local/Temp/enhtmlclip/0(4).jpg
(图片来自庆科官网)
   EMW3165内部集成了一个Cortex-M4微控制器以及一个无线射频芯片,其片内Flash容量为512K,RAM为128K,除此之外,通过SPI接口连接2M的片外Flash。现在物联网开发很多都采用这种类似的架构,或者是通过STM32外部连接WiFi模组联网,如串口等。
   OTA升级设计很重要的一个工作就是首先规划好Flash区域的布局,必须清晰地知道Bootloader, Application以及下载的.bin文件在Flash中放置的位置。
二、Bootloader和Application的角色
         OTA固件升级其实就是IAP应用编程,要完成固件升级需要设计两个程序,一个为Bootloader程序,另外一个为Application程序。通常我们是在Application程序中建立socket连接来发起HTTP请求去查询服务器是否有新的固件并进行下载的,并且在片外Flash中修改和存储固件的参数信息,而Bootloader程序主要检查固件的参数信息并且如果需要就负责将Application程序下载的固件从片外Flash搬运到片内Flash,然后跳到那里运行。
1.Bootloader角色主要完成的:
1)读取固件参数信息;
2)判断是否需要更新,如果不需要直接跳到Application区域执行;
3)如果需要更新,则将固件搬到Application区域,并且更新固件参数信息(表示已将更新过该固件了),最后跳到       Application区域执行。
当然,在搬运固件前还需要进行校验如CRC以确保完整性。
2.Application角色主要完成的:
1)发送HTTP请求查询服务器最新固件信息;
2)和当前固件做对比,如果需要更新,就进行下载;
3)将下载的固件写到规划好的OTA固件存储区域;
4)更新固件参数回写片外Flash,最后进行软件复位;
这里也相应地首先完成网络上固件下载的完整性校验,以确保在网络下载下来的固件是完整的,然后在写进OTA固件存储区域的时候也需要再进行校验计算,以在Bootloader在搬运固件时校验确保完整性。
三、Flash区域规划
   在OTA升级中我们需要存储更新的固件,如果片内Flash不够大的时候我们需要加片外Flash进行存储,简单介绍一下OTA升级时Flash区域的规划。(这里的地址划分与后面的stm32 demo程序对应,和庆科模块实际位置和大小稍有区别,但是原理都是一样的)

file:///C:/Users/DengQ/AppData/Local/Temp/enhtmlclip/0.png
1.Bootloader放置在片内Flash的0x08000000地址,大小为64K,STM32设备上电后首先跳到这里执行;(主闪存存储器被选为启动区域)
2.Application放置在片内Flash的0x08010000地址;
3.PARAMETER_1和PARAMETER_2(备份用)记录固件参数信息的区域,它们放在片外Flash;
4.OTA_TEMP区域为OTA固件存储区域,放在片外Flash,Application从网络下载bin文件然后写到该区域,而Bootloader从这个区域搬运固件到Application区域。
从上面可以看出,不管是Bootloader还是Application都需要做好片内Flash驱动和片外的Flash驱动来进行Flash操作。
四、OTA升级过程
1.Application查询服务器下载固件到OTA_TEMP区域;
2.Application根据下载的固件修改PARAMETER_1和PARAMETER_2区域的内容,固件参数信息可以简单用一个结构体记录,如:
file:///C:/Users/DengQ/AppData/Local/Temp/enhtmlclip/0(1).png
3.Application进行软件复位;
4.Bootloader读取PARAMETER_1区域信息,判断是否有固件需要更新,如判断上述结构体upgrade_type的值;
5.如果upgrade_type值为’U’,先做一下校验,再将OTA_TEMP区域的固件搬运到片内Flash区域,最后修改PARAMETER_1区域数据如upgrade_type的值改为’0’,设备下次上电后Bootloader就不会再更新固件;
6.最后Bootloader跳到Application区域执行应用程序;
五、总结
   OTA固件升级设计主要做好几部分工作:清楚芯片启动流程、完成Flash区域规划以及做好Flash驱动,Bootloader主要判断片外是否有固件待更新,如果有就搬到片内Flash,而Application程序主要完成固件的下载,其实固件更新并没有大家想象中的难以实现。
六、STM32 DEMO(内附使用说明)
原文转自嵌入式企鹅圈




1、机智云QQ群:G1群:104975951 G2群:491509598 G3群:287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits、 机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

1

主题

5

帖子

89

积分

注册会员

Rank: 2

积分
89
沙发
发表于 2017-2-15 10:01:17 | 只看该作者
你好!你上面STM32 DEMO的网站找不到,能不能发一份到我的邮箱1516998341@qq.com,谢谢楼主

点评

http://docs.gizwits.com/zh-cn/UserManual/OTA%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B.html  详情 回复 发表于 2017-2-15 10:21

321

主题

1054

帖子

4502

积分

论坛元老

Rank: 8Rank: 8

积分
4502
QQ
板凳
 楼主| 发表于 2017-2-15 10:21:09 | 只看该作者
呼呼呼 发表于 2017-2-15 10:01
你好!你上面STM32 DEMO的网站找不到,能不能发一份到我的邮箱,谢谢楼主

http://docs.gizwits.com/zh-cn/Us ... 95%99%E7%A8%8B.html
1、机智云QQ群:G1群:104975951 G2群:491509598 G3群:287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits、 机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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