【摘要】 物联网平台支持远程对设备进行软件升级,本文将会为您介绍软件升级的流程与原理。
软件升级流程
软件(Software)一般分为系统软件和应用软件,系统软件实现设备最基本的功能,比如编译工具、系统文件管理等;应用软件可以根据设备的特点,提供不同的功能,比如采集数据、数据分析处理等。
软件升级又称为SOTA(SoftWare Over The Air),是指用户可以通过OTA的方式支持对LWM2M协议的设备进行软件升级。软件升级遵循的协议为PCP协议,设备侧需要遵循PCP协议进行软件升级的适配开发。SOTA流程如下图所示:
SOTA升级流程的详细说明:
1~2. 用户在设备管理服务的控制台上传软件包,并在控制台或者应用服务器上创建软件升级任务。
3. NB-IoT设备上报数据,平台感知设备上线,触发升级协商流程。
4~5. 物联网平台向设备下发查询设备软件版本的命令,查询成功后,物联网平台根据升级的目标版本判断设备是否需要升级。
-
如果返回的软件版本信息与升级的目标版本信息相同,则升级流程结束,不做升级处理。
-
如果返回的软件版本信息与升级的目标版本信息不同,则继续进行下一步的升级处理。
6. 物联网平台向设备订阅软件升级的状态。
7~8. 物联网平台查询终端设备所在的无线信号覆盖情况,获取小区ID、RSRP(Reference Signal Received Power,参考信号接收功率)和SINR(Signal to Interference Plus Noise Ratio,信号干扰噪声比)信息。
-
查询成功:则根据如下方式计算可同时升级的并发数计算,并按照步骤10进行处理。
-
如下图所示,如果设备的RSRP强度和SINR强度均落在等级“0”中,则同时可以对该小区的50个相同信号覆盖区间的设备进行同时升级。
-
如果设备的RSRP强度和SINR强度分别落在等级“0”和“1”中,则以信号较弱的等级“1”为准,则只能同时对该小区的10个设备进行升级。
-
如果设备的RSRP强度和SINR强度分别落在等级“1”和“2”中,则以信号较弱的等级“2”为准,则只能同时对该小区的1个设备进行升级。
如果设备的RSRP强度和SINR强度不在该3个等级范围内,且均可以查询到,则按照信号最弱覆盖等级“2”处理,则只能同时对1个设备进行升级。
-
-
-
注:如果用户在软件升级中发现同时进行升级的设备数较少,则可以联系当地运营商检查和优化设备所在小区的无线覆盖情况。
-
-
查询失败:则按照步骤9进行处理。
9. 物联网平台继续下发查询小区ID信息的命令,获取终端设备所在的小区ID信息。
-
如果查询成功:物联网平台支持同时对该小区的10个相同情况的设备进行软件升级。
-
如果查询失败:则升级失败。
10~12. 物联网平台通知设备有新的软件包版本,设备启动软件包的下载。软件包的下载按照分片的方式进行下载,支持断点续传功能,通过软件包分片中携带的“versionCheckCode”确定是否属于同一个软件包。下载完成后,设备知会物联网平台软件包已下载完毕。
13~14. 物联网平台向设备下发升级的命令,终端设备进行升级操作,升级完成后终端设备向物联网平台反馈升级的结果。
15. 物联网平台向控制台/应用服务器通知升级的结果。
软件升级版本包结构
设备升级的软件包文件由各设备厂商提供,在物联网平台上传设备的软件升级包前,需要制作软件升级的版本包,用于修改软件包的描述文件,如软件版本、厂商名称、设备类型、产品模型等信息。下面将详细介绍版本包的制作方法。
-
新建文件夹命名为“DM”,在DM文件夹下新建文件夹,命名为“linux”。
-
使用Notepad++文本工具新建一个文本文件,拷贝如下内容到文本中,在Notepad++工具的“编码”菜单中选择“以UTF-8无BOM格式编码”,然后将文本进行存储,存储路径选择步骤1中的“linux”文件夹,文件名称命名为“UpgradeDesc”,保存类型选择“.json”。
{
"specVersion": "",
"fileName": "",
"packageType": "",
"version": "",
"deviceType": "",
"manufacturerName": "",
"model": "",
"protocolType":"",
"description":"",
"versionCheckCode":"",
"deviceShard":"",
"platform":"",
"supportSourceVersionList":[],
"date":""
}
-
打开创建的“UpgradeDesc.json”文件,修改软件升级描述文件,相关字段如下表所示。
-
在与“DM”同级目录下创建文件夹,命名为“linux”,该文件夹名称必须同步骤1中的文件夹命令保持一致,将厂商软件包(软件包格式无限制)置于该文件中。
-
选中“DM”和“linux”文件夹,使用压缩工具打包成ZIP格式的压缩包,建议命令为“xx_package.zip”。
注:
-
文件“DM”和“linux”的命名是固定的。
-
“xx_package.zip”下不能包含package这层目录。
-
仅支持ZIP格式的压缩包,不能压缩成其他格式后,例如rar,再手动修改文件类型为zip。
设备侧适配开发概述
设备的OTA软件升级是基于华为定义的PCP协议进行的,设备侧需根据PCP协议定义的交互流程进行适配开发。下面我们将结合物联网平台与设备的软件升级交互流程,介绍终端设备将如何基于PCP协议构建交互过程中的请求消息和应答消息,帮助您更好的根据PCP协议进行终端侧的软件升级功能开发。
下面我们先了解下PCP消息的结构,PCP协议的请求消息和应答消息都遵循相同的消息结构,主要由这几部分组成:
PCP协议消息由:起始标识位、版本号、消息码、校验码、数据区长度和数据区组成,各字段的要求和描述如下表所示。
物联网平台发送消息接下来让我们以查询设备版本号为例看下平台与设备交互消息的结构。
根据PCP消息结构的定义可以得出,物联网平台向设备下发查询版本号时,各消息字段的填写如下:
-
起始标识:固定为消息流的前2个字节,固定为FFFE。
-
版本号:数据类型为1个字节整数,且固定为1,即在消息流中为01。
-
消息码:数据类型为1个字节整数,查询设备版本的消息码为19,转换为十六进制为13。
-
校验码:数据类型为2个字节整数,先将校验码置为0000,然后将完整的消息码流进行CRC16的算法计算得到校验码,再将得到的校验码替换原消息中的0000。
-
数据区长度:数据类型为2个字节整数,代表数据区的消息长度,根据数据区的数据结构可以得出该条消息无数据区,即数据区长度为0000。
-
数据区:数据区代表要真正发送给设备的数据,根据查询版本信息的数据区定义,该条消息是没有实际要传送的数据的,即无需数据区字段。
因此将查询版本消息的码流组合起来得到:FFFE 01 13 0000 0000。前面的校验码时讲了,需要将组合后的消息码流进行CRC16算法得到校验码4C9A,然后将该校验码替换原码流中的0000后得到FFFE01134C9A0000,该消息码流即为物联网平台发送给设备的查询版本信息的消息码流。
设备返回的应答消息
设备收到物联网平台要查询设备的软件版本号消息,设备要向物联网平台反馈查询的结果,各消息字段的填写如下。
-
起始标识固定为:FFFE。
-
版本号固定为:01。
-
消息码:与请求的消息码一致,为13。
-
校验码:CRC16计算前先用0000替代。
-
数据区长度:根据数据区的字段的数据类型得出数据区长度为17个字节,转换为十六进制为:0011。
-
数据区:根据数据区的定义可知,处理成功的结果码为00,版本号信息假设为V0.9,将V0.9进行ASCII转码得到56302E39,由于版本号的数据类型为BYTE[16],即16个字节,当前只有4个字节,因此需要在版本号数据后面补0,得到56302E39000000000000000000000000。因此,数据区合并后为0056302E39000000000000000000000000。
将查询版本信息的消息流组合起来得到:FFFE 01 13 0000 0011 0056302E39000000000000000000000000。前面讲到,还要将消息流进行CRC16算法计算得到校验码为8DE3。因此,物联网平台向设备查询版本号信息,设备向平台返回的消息流为FFFE01138DE300110056302E39000000000000000000000000。
设备升级期间,物联网平台和设备交互的其他消息也都遵循PCP协议,此处不再详细介绍。
看完本文后,您是否对设备软件升级有了更胜的了解呢?如果您想进一步了解设备软件升级的原理和操作,可以访问设备管理服务的帮助中心。
作者:华为云专家 我是卤蛋