【OpenCPU】MN316-DLVD丨OneNETFOTA升级使用介绍

菩禔看科技 2024-04-21 19:40:35

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后长时间未打印检测到升级任务的回调,或者升级重启再次登录平台后长时间未打印升级成功的回调,一般是什么原因?

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

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

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





转载自中移物联网,仅供模组品牌对应于中移物联网模组体系参考。

声明:《菩禔物联》所发表内容均为原创,所有原创内容仅用于交流,不代表任何立场和观点。极少数优才文章注明来源的,版权归原出处所有(无法查证版权的或未注明出处的均来源于网络搜集)。如有侵权,请联系我们删除或更改。内容的真实性、准确性和合法性由原作者负责。转载内容(视频、文章、广告等)只以信息传播为目的,仅供参考,不代表本平台认同其观点和立场。

The content published in the Bodhi Union of Things is original, and all original content is for communication purposes only and does not represent any position or viewpoint. A very small number of excellent talent articles indicate their source, and the copyright belongs to the original source (those that cannot be verified or whose source is not indicated are all collected online). If there is any infringement, please contact us to delete or make changes. The authenticity, accuracy, and legality of the content are the responsibility of the original author. The reprinted content (videos, articles, advertisements, etc.) is only for the purpose of information dissemination and is for reference only. It does not mean that this platform agrees with its views and positions.

0 阅读:0

菩禔看科技

简介:感谢大家的关注