WiFi物联中的OTA升级设计原理
本帖最后由 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(内附使用说明)下载链接:http://pan.baidu.com/s/1bpoSDKN原文转自嵌入式企鹅圈
你好!你上面STM32 DEMO的网站找不到,能不能发一份到我的邮箱1516998341@qq.com,谢谢楼主 呼呼呼 发表于 2017-2-15 10:01
你好!你上面STM32 DEMO的网站找不到,能不能发一份到我的邮箱,谢谢楼主
http://docs.gizwits.com/zh-cn/UserManual/OTA%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B.html
页:
[1]