智能设备中模块单独升级方案探索

1.概述

OTA又称FOTA即固件空中升级(firmware over the air) 是物联网设备必备功能之一,主要负责对设备的bug修复和版本更新以及资源文件升级等;随着物联网的发展,物联网设备也越来越复杂,出现了一个物联网设备包含多个处理器,而且有很多场景需要升级字库,音频文件,图片等资源文件;之前的云和端一体化的OTA方案只能针对整个设备升级,具体做法是不管哪个模块需要升级都要把所有模块的固件和数据打包成一个升级文件,然后推送到设备端,设备端再对升级文件进行解析,逐个模块升级;由于没有单个模块升级的能力,把不需要升级的模块也升级了,这样既浪费流量又增加设备端出故障的风险;模块升级就是为了解决上述问题而设计的,采用多模块升级方案,可以根据针对单个模块进行升级,不需要将所有模块打包成功一个升级包,这样既节省流程也降低设备端升级的复杂度,减少升级失败的概率;

2.传统的升级方案


如上图传统的升级方案是针对整个物联网设备升级即一个物联网设备只有一个版本号,OTA是云端一体的方案,那么如果要升级如上图的模块4,由于云端只能管理一个版本号,那么就必须将模块1,模块2,模块3的固件的版本也要同步更新和模块4相同,所以4个模块就都要升级;实际只需要升级模块4就可以了,额外升级模块1,模块2,模块3带来如下缺陷:
1.使升级包变大,设备下载升级包所需流量变多,升级时间变长,设备端的缓存升级包的flash空间也要变大;流量消耗多,设备端flash空间需要更多,直接增加用户成本,下载时间变长,影响用户体验,影响设备低功耗,而且增加升级失败概率;
2.各个模块升级文件打包在一起,端侧解析升级包的软件复杂度会变高,相对容易出错,降低设备升级的成功率;

3.模块升级是如何改进的

 
如上图多模块升级升级方案示意图,云端支持多模输入,物联网设备可看作多个模块组成,每个模块有自己的版本号和模块名;采用此方案升级模块4时,只需要把模块4的升级文件上传到云端,用户可为模块4自定义一个模块名,同时填上模块4的升级版本号即可;设备端接收到文件,根据自定义的模块名和版本号再对模块4进行升级,不会影响其他模块;

如上流程图,假设用户设备包含多个模块,用户需要升级某个模块时,需要先将对应模块的固件上传云端,在上传固件到云端时,需要在这个产品下面创建要升级的模块并且输入模块名;模块名和设备端上的模块要对应,并且需要输入待升级固件的版本号;
当用从云端触发这个模块的固件升级后,设备端会收到云端下发的升级信息,具体包括模块名,固件版本号,下载固件的URL,以及固件的hash值;设备端通过接收到的信息,开始初始化OTA存储区,并开始下载固件;
设备端下载完固件后,完成固件的完整性校验(Hash值校验),然后根据模块名,判断是升级其他模块还是升级主模块,如果升级其他模块,主模块向待升级模块发起升级请求,将接收的固件发送或者copy到对应模块中;
升级完成后,将升级结果上报到云端;如果升级主模块,则重启,进入bootloader,由bootloader 完成主模块的固件更新,然后重启将主模块的版本号上报云端;如果升级过程中,有异常,主模块直接将异常上报到云端,云端根据设备端上报的信息,显示升级结果;

4.结语

现在物联网设备基本上包含多个mcu或者资源文件类型,当远程升级已成常态,一个设备只能升级一个数据包,显然已满足不了实际需求,模块升级是一种解决此种问题的很好方案;不过模块升级很好,但也有缺点,比如升级资源文件,假设一个设备有几十张图片,每个图片都有可能更新,但不会同时更新,难道需要建几十个模块吗?下期给大家介绍,解决此种情况的方案。

 

开发者支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号。

更多技术与解决方案介绍,请访问HaaS官方网站https://haas.iot.aliyun.com

 

おすすめ

転載: blog.csdn.net/HaaSTech/article/details/120742605