NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

在物联网项目的开发过程中,必不可少的一项功能就是远程升级OTA(Over-the-Air),即使用WIFI、蓝牙、4G、NB-IOT等方式将升级包传输到MCU,MCU进行代码存储,完成升级

本系列文章将介绍基于电信AEP平台进行NB-IOT设备的远程升级,包含stm32内部flash分区、BootLoader代码编写,平台软件升级包制作,平台软件升级协议对接及参考源码等内容,后续几篇文章将陆续介绍

该系列文章目录大纲如下:

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试
  • 消息结构

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试
  • 消息码

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试
  • PCP消息识别

由于PCP协议消息和设备业务消息共用一个端口和URL通讯,平台收到设备的消息时,按照如下步骤判断是PCP协议消息还是业务消息:

  • 检查设备是否支持软件升级(根据设备profile的omCapability.upgradeCapability定义),如果不支持,则认为是业务消息。
  • 检查设备软件升级协议是否是PCP,如果不是,则认为是业务消息。
  • 检查消息前两个字节是否为0XFFFE,如果不是,则认为是业务消息。
  • 检查版本号是否合法,如果不合法,则认为是业务消息。
  • 检查消息码是否合法,如果不合法,则认为是业务消息。
  • 检查校验码是否正确,如果不正确,则认为是业务消息。
  • 检查数据区长度是否正确,如果不正确,则认为是业务消息。

如果以上检查都通过,认为是PCP协议消息。

说明:需要设备保证业务消息的起始字节不是0XFFFE。

远程升级注意要点:

  • 升级包下载之后,设备升级前,为保证设备不会因为运行不合法的升级包而导致设备成砖,需要对升级包内容进行合法性校验。
  • 务必使用平台为升级包生成的摘要校验升级包完整性。
  • 目前仅支持LWM2M协议的设备升级。
  • 电信AEP平台仅支持.zip类型的文件作为升级包。
  • 平台规定同一产品下最多创建100个升级包。

2、升级流程

根据平台官网介绍,PCP远程升级协议流程可分为以下几个步骤:查询设备版本、新版本通知、请求升级包、上报升级包下载状态、执行升级、上报升级结果,每一个步骤设备和平台之间均是一问一答的形式。

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试
  • 第三步:选择SOTA升级>升级设备管理,开始加入待升级设备

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试
  • 第五步:选择SOTA升级>开始启动,开始启动升级任务。

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

任务状态说明:

  • 未执行:任务未启动

  • 执行中:正在升级,存在未完成的任务

  • 已完毕:全部升级任务都达到终止状态,升级完成或升级失败

2.2 查询设备版本

平台启动远程升级任务之后,设备上报任意数据后触发远程升级,物联网平台向设备下发查询版本号信息,设备进行应答

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

注意:此处如果平台没有下发新版本通知的话,大概率是校验码不正确

物联网平台发送消息:

物联网平台向设备发送查询设备版本号命令:FFFE01134C9A0000

各消息字段解析如下:

  • 起始标识:固定为FFFE。
  • 版本号:数据类型为1个字节整数,且固定为1,即在消息流中为01。
  • 消息码:13,转换为10进制为19。
  • 校验码:4C9A
  • 数据区长度:0000
  • 数据区:无需数据区字段。

设备返回的应答消息:

设备收到物联网平台要查询设备的软件版本号消息,设备要向物联网平台反馈查询的结果

各消息字段的填写如下:

  • 起始标识固定为:FFFE。
  • 版本号固定为:01。
  • 消息码:与请求的消息码一致,为13。
  • 校验码:CRC16计算前先用0000替代。
  • 数据区长度:根据数据区的字段的数据类型得出数据区长度为17个字节,转换为十六进制为:0011。
  • 数据区:根据数据区的定义可知,处理成功的结果码为00,版本号信息假设为V1.0,将V1.0进行ASCII转码得到56312E30,由于版本号的数据类型为BYTE[16],即16个字节,当前只有4个字节,因此需要在版本号数据后面补0,得到56312E300000000000000000000000000。因此,数据区合并后为0056312E30000000000000000000000000。

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

2.3 新版本通知

查询完版本号,接收到设备上报的版本号消息后,平台主动对设备端发起新版本通知。

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

物联网平台发送消息:

物联网平台向设备下发下载新版本软件包通知:FFFE01141019001656312E300000000000000000000000000100013D6534

各消息字段的解析如下:

  • 起始标识固定为:FFFE。
  • 版本号固定为:01。
  • 消息码:14,转换为十进制为20
  • 校验码:1019。
  • 数据区长度:0016
  • 数据区:根据数据区的定义可知。
    • 目标版本号:由16个字节组成,此处56312E30000000000000000000000000转换为字符即是V1.0,代表平台的升级包版本号为V1.0。
    • 升级包分片大小:由2个字节组成,单位为byte,用户上传软件包时可以手动输入升级包分片大小,如果不设置默认为500byte,大小为32~500之间。此处为0100,转换为十进制为256,即一个分片包大小为256个字节。
    • 升级包分片总数:由2个字节组成,由软件包大小除以每个分片的大小并向上取整获得。此处解析软件包分片总数为013D,转换为十进制后为317。
    • 文件检验码:由2个字节组成,为软件包配置文件中的versioncheckcode 字段值,6534,转换为字符后为e4。

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

注意:此处设备应做判断,设备电量、信号质量是否正常,是否应该允许设备进行升级。

将设备给物联网平台的应答消息流组合起来得到:FFFE 01 14 0000 0001 00。

再将消息流进行CRC16算法计算得到校验码为D768。因此,设备向平台返回的应答消息流为FFFE0114D768000100

平台接收到设备的回复后处理:

  • 正常处理:如果设备不允许升级,平台中止升级任务

  • 异常处理:如果响应超时,而且没收到请求升级包消息,平台中止升级任务

平台状态显示:

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

串口助手AT指令内容:

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

设备向物联网平台发送请求软件包分片的第一条消息为:FFFE 01 15 0000 0012 56312E30000000000000000000000000 0000(CRC16校验前)

经CRC16计算得到校验码为:5618。则替换校验码后设备发送的第一条请求分片消息为:FFFE01155618001256312E300000000000000000000000000000。

其它分片请求的消息流只需要替换分片序号后,重新计算并替换CRC16校验码即可,此处就不再展开。

物联网平台的应答消息:

物联网平台收到设备的请求软件包分片消息后,将会给设备下发分片的数据。物联网平台向设备响应的第一条请求分片的消息:FFFE0115xxxx0103000000byte[256]

各消息字段的解析如下:

  • 起始标识固定为:FFFE。
  • 版本号固定为:01。
  • 消息码:与请求的消息码一致:15。
  • 校验码:xxxx。
  • 数据区长度:0103,即259字节
  • 结果码:00,
  • 分片序号:0000,第0个分片,
  • 分片数据:byte[256]的数据。

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

此处应请求下载所有的分片包,共317个分片包,后面的具体指令过程略过,和请求第一片分片包指令类似,但注意校验码必须正确,否则平台不会下发分片包内容

2.5 上报升级包下载状态

当设备接收完所有分片数据并组装完软件包后,需要向物联网平台上报软件包的下载结果,让平台知道升级包是否已经都下载完成。

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

设备发送的请求消息:

设备向物联网平台发送的上报软件包下载结果消息

各个消息字段的填写如下:

  • 起始标识固定为:FFFE。
  • 版本号固定为:01。
  • 消息码:与请求的消息码一致,为16。
  • 校验码:CRC16计算前先用0000替代。
  • 数据区长度:根据数据区的字段的数据类型得出数据区长度为1个字节,转换为十六进制为:0001。
  • 数据区:上报软件包的下载结果,比如下载成功,设备侧上报00。

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

平台状态显示:

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

串口助手AT指令内容:

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

设备向物联网平台应答的消息为:FFFE 01 17 0000 0001 00 (CRC16校验前)

经CRC16计算得到校验码为:B725。则替换校验码后设备返回的响应消息为:FFFE0117B725000100 。

平台状态显示:

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

串口助手AT指令内容:

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

设备向物联网平台上报升级结果的消息为:FFFE 01 18 0000 0011 0056312E30000000000000000000000000(CRC16校验前)

经CRC16计算得到校验码为:C7D2。则替换校验码后设备向物联网平台上报升级结果码流为:FFFE0118C7D200110056312E30000000000000000000000000。

物联网平台发送的应答消息:

物联网平台收到设备上报的升级结果消息后,将对设备进行应答:FFFE0118AFA1000100

各个消息字段的解析如下:

  • 起始标识固定为:FFFE。
  • 版本号固定为:01。
  • 消息码:18,与请求的消息码一致。
  • 校验码:AFA1。
  • 数据区长度:根据数据区的字段定义得出该数据长度为1个字节,转换为十六进制为:0001。
  • 数据区:处理成功,则返回00,升级任务不存在80。本示例以返回00处理成功为例进行说明。

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

至此,使用串口助手模拟设备进行远程升级的流程就完成了,写代码的时候根据这个流程进行发送数据,命令解析就可以了,此外平台也提供断点续传的方案,如下图所示:

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

我的公众号:

NB-IOT远程升级第2弹:软件协议讲解及AT指令测试

来源:轻松学长

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年3月8日
下一篇 2021年3月9日

相关推荐