设备接入 IOTDA-设备侧适配开发指导:下载升级包

时间:2024-07-30 11:30:47

下载升级包

根据PCP协议约定的交互流程, 物联网平台 通知设备有新的软件版本时,设备向物联网平台请求下载软件包,按照分片的序号进行下载。

设备发送的请求消息

根据PCP消息结构的定义可以得出,设备向物联网平台发送的请求软件包分片的第一条消息,各消息字段的填写如下。

  • 起始标识固定为:FFFE。
  • 版本号固定为:01。
  • 消息码:查询消息码表可知请求升级包的消息码为21,转换为十六进制为:15。
  • 校验码:CRC16计算前先用0000替代。
  • 数据区长度:根据数据区的字段的数据类型得出数据区长度为18个字节,转换为十六进制为:0012。
  • 数据区:目标版本号为平台下发的新版本通知版本号,即v1.0,转换为十六进制为56312E30000000000000000000000000,分片序号为第0个分片,即0000。

    字段

    数据类型

    描述及要求

    目的版本号

    BYTE[16]

    目的版本号,由ASCII字符组成,位数不足时,后补“0X00”

    分片序号

    WORD

    表示请求获取的分片序号,从0开始计算,分片的总数为软件包大小除以每个分片的大小并向上取整获得。设备可以保存已经收到的分片,下次直接从缺失的分片开始请求,达到断点续传的效果。

设备向物联网平台发送请求软件包分片的第一条消息为:FFFE 01 15 0000 0012 56312E30000000000000000000000000 0000(CRC16校验前),经CRC16计算得到校验码为:5618。则替换校验码后设备发送的第一条请求分片消息为:FFFE01155618001256312E300000000000000000000000000000。

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

物联网平台的应答消息

物联网平台收到设备的请求软件包分片消息后,将会给设备下发分片的数据。物联网平台向设备响应的第一条请求分片的消息,各消息字段的填写如下。

  • 起始标识固定为:FFFE。
  • 版本号固定为:01。
  • 消息码:与请求的消息码一致:15。
  • 校验码:CRC16计算前先用0000替代。
  • 数据区:先讲数据区再讲数据区长度。结果码:00,分片序号:第0个分片:0000,分片数据:跟软件包定义的内容有关,我们假设软件包内容为HELLO, IoT SOTA!,经ASCII码转换为十六进制为:48454C4C4F2C20496F5420534F544121,共16字节。用户上传软件包时手动输入升级包分片大小为500byte,即最大长度为500字节。这种情况下,无需在数据的后面补充0。
  • 数据区长度:根据数据区的字段定义得出该数据长度为19,转换为十六进制为:0013。

    字段

    数据类型

    描述及要求

    结果码

    BYTE

    0X00处理成功。

    0X80升级任务不存在。

    0X81指定的分片不存在。

    分片序号

    WORD

    表示返回的分片序号。

    分片数据

    BYTE[n]

    分片的内容,n为实际的分片大小。如果结果码不为0,则不带此字段。

物联网平台向设备发送的第一个软件包分片消息为:FFFE 01 15 0000 0013 00 0000 48454C4C4F2C20496F5420534F544121(CRC16校验前),经CRC16计算得到校验码为:E107。则替换校验码后物联网平台向设备发送的第一个软件包分片消息为:FFFE0115E107001300000048454C4C4F2C20496F5420534F544121。

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

support.huaweicloud.com/devg-iothub/iot_01_0047_2.html