模组差分包,顾名思义,是用于更新设备模组软件的一种特殊包。在智能设备的系统架构中,不同的硬件模块往往需要专门的软件驱动和支持。当设备需要更新这些模组的软件时,就需要使用模组差分包来进行针对性的升级。如果在远程升级过程中忽略了模组差分包的固件准备或应用,就可能导致升级失败。
旧模块版本:
AirM2M_780E_LTE_AT_V1138新模块版本:
AirM2M_780E_LTE_AT_V1162
一、第一次尝试升级,出现失败
找到了FOTA远程升级的文档参考,先用手边的设备用IoT平台做下测试,看能不能升级。
Air780E最新资料:
https://www.air780e.cn/
IoT平台:
https://iot.openluat.com/
远程升级FOTA应用指南:
https://doc.openluat.com/wiki/21?wiki_page_id=6048
什么都配置好了,结果到最后模块发AT+UPGRADE触发升级的时候,却老是报错:
+UPGRADEIND: -1003
通过升级日志查询结果是“正在生成版本”?
在页面右上角看到有个红色问号“ ?”,是IoT平台的帮助中心,往下滑就看到了升级日志返回结果的对应描述。
如下图示:
正在生成版本,请稍后再次请求——看样子是版本相差太大了,平台内部还在做差分包,那我就等一会儿再请求看看。
二、第二次尝试升级,再次出现失败
保险起见间隔了30分钟再次请求,以看到已经进入下载了,但是结果却又出现了:
+UPGRADEIND: -1003
这又是什么原因?!!
先去IoT平台上看一下升级日志的结果是什么,查询看到显示的是“成功”,但实际上并没有升级成功啊,反而还报错了。
紧接着找技术人员咨询了解到,差分包大小是有限制的,不能大于480KB,否则会升级不成功。
至于IoT平台上升级日志显示“成功”,原因是这个成功代表的意思不是模块升级成功——而是给予模块的升级请求,下发了升级文件成功了。
经过进一步确认,可以通过生成差分包工具的网址,把V1138和V1162的dfota.bin文件放上去,制作一个差分包看看,到底有多大。
差分工具:
https://doc.openluat.com/chafen
等了大概3分钟左右,差分包制作出来了,点击下载后,文件大小有550KB,那确实超出了480KB,升级不了。
从技术那里还得到了一份AT固件各个版本之间制作差分包的大小,以及是否可以差分升级的表格,这方便多了啊。
有数字的代表是在480KB以内,可以差分升级的版本;空白的就是不能升级的。
差分升级表格如下图示:
那么通过这张图来看,例如我当前的模块版本是V1138,需要升级到1162,对应的交叉格并没有数字。
而且V1138升级到1147的差分包就已经到480KB的临界点了,只能先升到V1147,再升到1162。
三、事不过三,第三次升级,成功!
那么,先获取到V1147版本的固件。
Air780E模组AT量产固件下载:
https://doc.openluat.com/article/4922
然后搜索得到AirM2M_780E_LTE_AT_V1147,
解压出来找到:
AirM2M_780E_V1147_LTE_AT.dfota.bin文件,
放到IoT平台上面。
发送AT指令走下升级流程:
成功从AirM2M_780E_V1138_LTE_AT,
升级到了 AirM2M_780E_V1147_LTE_AT。
接下来就是按照步骤,
升级到 AirM2M_780E_V1162_LTE_AT版本。
四、总结及建议
从以前的老固件做升级,很重要的一点——要考虑到模块内部对差分升级所分配的FOTA分区有多少。如果差分包超过了分区(Air780E模块的FOTA分区看来就是480KB了),超出肯定是升级不了的。
紧接着和领导做了汇报,在本地测试了Air780E模组FOTA升级可以了,流程也写好了,先找了5台在外的设备远程升级,测试一下看升级后掉线的现象也确实减少了,那说明固件没问题。掉线的麻烦事,也完美解决了!
如果你在项目开发中也遇到类似问题,记得一定一定要先注意差分升级FOTA分区大小。