OTA远程升级
OTA添加新固件时如何区分不同产品的固件?
同一种产品的OTA升级固件是相同的,不同的产品型号需要更换产品id。
上传固件时,怎么选择固件类型?
包含MCU的硬件方案,升级MCU,升级类型选择MCU;升级模组时,升级类型选择通信模组
不包含MCU的硬件方案,使用模组做二次开发,这时模组其实也是MCU,ota功能里,我们将模组也看做MCU,升级类型选择MCU
固件版本号是什么?上传固件时,怎么填写固件版本号?
固件版本号:固件版本是设备的软件版本,格式由五个字符组成“xx.xx”,x为字符‘0’-‘9’,具体的版本号需要用户定义,唯一的要求是版本号需要递增,每次MCU版本更新,版本号一定大于上一个版本号。
上传固件时,固件版本号应大于模组运行版本和本地版本的固件版本号(模组运行版本号可在云端如图处查询,本地版本为设备下载的最高版本号),注意!MCU版本不支持降级操作。
验证固件时可能会出现的异常
1)准备下载,下载进度为0%
此状态会保持1分钟,1分钟后显示“准备下载超时”
产生此异常的原因可能是:
a)上传固件时升级范围选择的“部分版本升级”,未勾选运行版本号
b)固件类型选择错误,请参考本文档2.1节选择正确类型
请确保设备运行版本号在升级范围内,固件类型选择正确。
2)下载固件超时
产生此异常的原因是下载固件时网络异常,设备掉线,请检查网络状态。
3)下载完成,升级指令下发失败
产生此异常的原因是下发升级指令时网络异常,设备掉线,请检查网络状态。
4)设备重启超时
产生此异常的原因是固件已下载完成,且升级命令已下发,但设备未执行重启。请检查函数cloud_ota_upgrade_cb中重启设备的编码实现。
5)下载未完成,升级失败
固件下载过程中本地操作出错,可能是cloud_ota_chunk_cb函数返回了ACK_ERR,请检查cloud_ota_chunk_cb中的编码实现。
6)下载完成,升级失败
固件下载完成,设备执行重启后,未运行新版本固件上线,而是运行的老版本,请检查重启程序的引导逻辑
上线设备为01.02,发布了一个01.03的版本 ,为什么app检测不到新版本?
ota升级分两步,先下载后升级,设备检测到新版本会直接下载,app触发只是触发升级操作。(可参考文档《青莲云OTA升级操作流程》中固件下载的章节)
ota升级步骤:
iot_start后调用iot_ota_option_set(120.2048),设备连云成功两分钟内会进行一次新版本检测,,有新版本且版本号高于设备当前版本时就会下载。下一次再检测就是第二天了。
设备每天会随机一个时间点去云端检测是否有新版本固件,有新版本且版本号高于设备当前版本时才会下载。
确定固件下载是否完成,下载完成后app才会检测到新版本更新。
因此如果发布了更高版本的固件,请先确定固件是否下载完成。测试阶段可重启验证,两分钟内即可检测下载。
为什么ota固件在验证的时候能收到iot_ota_chunk_cb,正式发布后却收不到?
因为验证固件的时候本地版本已更新为最新的固件版本,需要进行本地降级的工作。如linux平台需要删除运行目录下的config文件即可。