MN316 OpenCPU丨OneNET FOTA升级使用介绍

FOTA(Firmware Over-The-Air)是终端设备固件的空中下载升级,指通过云端升级技术,为具有连网功能的设备提供固件升级服务,用户使用网络以按需、易扩展的方式获取智能终端系统升级包,并通过FOTA进行云端升级,完成系统修复和功能优化。

MN316 OpenCPU SDK提供的FOTA方式是以差分包进行升级,需要先通过编译获得升级前后版本固件包,即模组当前版本和目标升级版本,接着使用差分包制作工具,生成差分包,再把差分包放到服务器上,模组下载到本地进行升级。

本文从使用流程、demo代码、OneNET FOTA示例及常见问题四个方面,介绍如何通过OneNET平台进行FOTA升级。

一、OenNET FOTA使用流程解析

图1 OneNET FOTA使用流程

图1介绍了使用OneNET平台对MN316模组进行FOTA升级的常规流程,可结合MN316_OpenCPU(R14)_Standard_X.X.X.XXXXXX_release\examples\onenet\cm_demo_onenet.c中的demo示例程序加深理解。

OneNET FOTA功能包含的函数接口详细定义在include\cmiot\cm_onenet.h和cm_fota.h中查看。

二、OneNET FOTA demo代码解析

SDK中OneNET FOTA常规使用方法,可在cm_demo_onenet.c文件中查看,目前仅支持COAP方式下载升级,下面我们详细看一下。

2.1  设置用户FOTA版本号及获取FOTA版本号的函数

图2  用户版本号设置及获取

用户自定义版本号user_ver[],由用户自行维护迭代,调用接口cm_fota_get_version,该版本号在进行FOTA升级时将交互到OneNET平台上。

2.2  设置OneNET状态事件上报函数

图3  OneNET状态事件上报

图4  OneNET FOTA相关事件上报类型

在OneNET状态事件回调函数cot_event_cb里进行状态打印cm_demo_printf("event:%d\n",event),包括登录状态和FOTA状态,以便用户对FOTA进度进行判断处理。

2.3  设置用户注册OneNET FOTA通知事件函数

图5  用户注册OneNET FOTA通知事件

用户注册OneNET FOTA通知事件,FOTA完成后模组会重启,重启后会将FOTA升级成功或失败的状态通知至应用,此操作在驻网之前即会完成,应用层若需接收相关事件通知,需在此接口中调用cm_onenet_event_register()完成回调函数注册,仅用于未连接平台前。连接平台后,cm_onenet_create()被调用后,该注册的函数被cm_onenet_create()注册的函数替换,demo程序采用的此方式,所以demo程序在重新登录平台后才有升级结果上报打印。

以上,就是OneNET FOTA demo示例程序的解析,涉及FOTA以外的OneNET函数接口可在cm_onenet.h查看。

三、OneNET FOTA测试示例

下面我们用MN316 OpenCPU SDK提供的OneNET FOTA函数接口搭配OneNET平台进行测试,整体程序流程与第二节介绍的代码几乎一致,为避免重复我们只解析与第二节存在差异的部分,测试模组选用MN316-DLVS,以下为完整测试步骤。

3.1  编译初始版本

用VScode打开SDK,在文件cm_demo_onenet.c里找到当前的用户SDK版本号,如下:

图6  自定义版本号

默认是“V1.0.0”,输入./build.bat dlvs_h0 demo编译SDK,并使用logview工具合并成烧录文件,为便于区分,修改文件名为V1.0.0.mimgx,再用logview工具烧录到模组。

3.2  编译目标版本并制作差分包

修改用户版本号user_ver为“V2.0.0”,再编译、合并文件,修改烧录文件名为V2.0.0.mimgx,使用logview工具生成差分包,得到xyDelta和xyDelta_downgrade两个差分文件,xyDelta是升级差分包,xyDelta_downgrade是降级差分包(本次只测试升级,不测试降级)。

图7  差分包制作

由于OneNET平台差分包文件类型支持.zip .rar .bin .apk,故我们可以将差分文件改为xyDelta.bin,xyDelta_downgrade.bin。

3.3  在平台上部署差分升级包

图8  选择远程升级OTA

图8  上传差分包文件

点击“验证升级”,“跳过验证”,直接进行FOTA测试。

图9  验证升级

3.4  添加升级任务

模组先执行一次登录OneNET平台,目的是将用户版本号更新到平台上,创建升级任务的时候才能勾选此版本号下面的设备,再点击“批量升级”,在弹出的对话框里添加升级任务。

图10  添加升级任务

图11  勾选需要升级的设备

点击“查看”该任务,可以看到升级任务的详细信息和状态。

图12  升级任务状态

3.5  模组触发FOTA升级

模组主串口输入CM:ONENET:VERSION查询当前版本号,通过执行函数接口cm_onenet_open或者cm_onenet_updata触发FOTA升级。若模组在“已注销登录”状态下,串口发送CM:ONENET:CHECKIN执行登录请求;若模组在“已登录”状态下,串口发送CM:ONENET:UPDATE执行更新请求。

模组检测到升级任务会收到上报event:40,如果模组长时间未收到此上报,可尝试多次发送更新请求指令,正常情况下模组会开始下载差分包然后升级重启,然后发送CM:ONENET:VERSION查询版本号,可以确认是否升级成功。

图13  OneNET FOTA升级前响应结果示例

图14  OneNET FOTA升级后响应结果示例

3.6  平台显示“升级成功”

图15  OneNET平台显示“升级成功”

以上就是使用OneNET平台对模组进行FOTA升级的完整程序流程解析。

四、常见问题

1、平台上添加升级设备时,无当前设备可选,一般是什么原因?

    模组需要在升级前确保登录过OneNET平台,才能把当前版本号更新到平台,不然在升级任务的初始版本中无法选中当前设备。

2、模组有时执行cm_onenet_open或者cm_onenet_updata后长时间未打印检测到升级任务的回调,或者升级重启再次登录平台后长时间未打印升级成功的回调,一般是什么原因?

与平台和网络有关,确保网络正常后,建议用户程序逻辑上可以适当延长检测等待时间,并设置多次触发检测。

  1. 仅支持OneNET平台COAP方式的FOTA升级吗?HTTP方式呢?

   目前MN316 OpenCPU SDK版本仅支持OneNET平台COAP方式的FOTA升级,后续版本会开发支持OneNET HTTP方式FOTA升级。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值