跳至主要內容

OTA固件升级

fastbee2024年9月27日大约 6 分钟

一、流程概述

HTTPS 方式 OTA 升级流程描述

结合 MQTT 服务、设备和 Web 端总结的主题发送情况:
  1. 云端下发升级包信息给设备
    • 主题:/${serialNumber}/http/upgrade/set

    • 方向:云端 -> 设备

    • 触发时机:在 Web 端判断 OTA 版本可升级且用户确认升级后

    • 消息内容:包含升级包的 URL、版本和状态,如

      {
        "taskId": 26,
        "url": "/profile/iot/1/2024-0824-001954.bin",
        "version": 1.2,
        "status": 1
      }
  2. 设备上报升级进度
    • 主题:/${serialNumber}/http/upgrade/reply
    • 方向:设备 -> 云端
    • 触发时机:设备下载升级包过程中定时上报
    • 消息内容:包含升级进度和状态,如
      {
      "taskId": 26,     
      "progress": 100,  
      "version": "1.2", 
      "status": 2
      }
  3. 设备升级完成后上报最新版本以及状态
    • 主题:/${serialNumber}/http/upgrade/reply

    • 方向:设备 -> 云端

    • 触发时机:设备端升级完成后

    • 消息内容:包含最新版本和状态,如

      {
      "taskId": 26,
      "version": "1.2",
      "status": 3
      }
模拟的整体交互流程:
   // status状态字段定义
    AWAIT(0, "等待升级","未推送固件到设备"),
    SEND(1, "已发送","已发送设备"),
    REPLY(2, "升级中","设备OTA升级中"),
    SUCCESS(3, "成功","升级成功"),
    FAILED(4, "失败","升级失败"),
    STOP(5, "停止","设备离线停止推送"),
    UNKNOWN(404, "未知","未知错误码");

    //主题定义
    ${taskId}/ws/ota/status          是云端后台推送给云端前台的一个展示状态主题

    ${serialNumber}/http/upgrade/set  是云端推送给设备的主题

    ${serialNumber}/http/upgrade/reply 是设备上给云端的主题

左边是云端上报 , 右边是设备上报

Topic: /26/ws/ota/status
{
  "serialNumber": "D1832O34Z5M1",
  "status": 0,
  "timestamp": 1724482221250
}
Topic: /26/ws/ota/status
{
  "serialNumber": "D1832O34Z5M1",
  "status": 1,
  "timestamp": 1724482221251
}
Topic: /D1832O34Z5M1/http/upgrade/set
{
  "taskId": 26,
  "url": "/profile/iot/1/2024-0824-001954.bin",
  "version": 1.2,
  "status": 1
}
                                                                    Topic: /D1832O34Z5M1/http/upgrade/reply
                                                                    {
                                                                    "taskId": 26,
                                                                    "progress": 5,
                                                                    "version": "1.2",
                                                                    "status": 2
                                                                    }
Topic: /26/ws/ota/status
{
  "serialNumber": "D1832O34Z5M1",
  "status": 2,
  "timestamp": 1724482231404,
  "progress": 5
}
                                                                    Topic: /D1832O34Z5M1/http/upgrade/reply
                                                                    {
                                                                        "taskId": 26,
                                                                        "progress": 50,
                                                                        "version": "1.2",
                                                                        "status": 2
                                                                    }
Topic: /26/ws/ota/status
{
  "serialNumber": "D1832O34Z5M1",
  "status": 2,
  "timestamp": 1724482251326,
  "progress": 50
}
                                                                    Topic: /D1832O34Z5M1/http/upgrade/reply
                                                                    {
                                                                    "taskId": 26,
                                                                    "progress": 70,
                                                                    "version": "1.2",
                                                                    "status": 2
                                                                    }
Topic: /26/ws/ota/status
{
  "serialNumber": "D1832O34Z5M1",
  "status": 2,
  "timestamp": 1724482290405,
  "progress": 70
}
                                                                    Topic: /D1832O34Z5M1/http/upgrade/reply
                                                                    {
                                                                    "taskId": 26,
                                                                    "progress": 100,
                                                                    "version": "1.2",
                                                                    "status": 2
                                                                    }
        
Topic: /26/ws/ota/status
{
  "serialNumber": "D1832O34Z5M1",
  "status": 2,
  "timestamp": 1724482302296,
  "progress": 100
}

                                                                    Topic: /D1832O34Z5M1/http/upgrade/reply
                                                                    {
                                                                    "taskId": 26,
                                                                    "progress": 100,
                                                                    "version": "1.2",
                                                                    "status": 3
                                                                    }
Topic: /26/ws/ota/status
{
  "serialNumber": "D1832O34Z5M1",
  "status": 3,
  "timestamp": 1724482308749
}

二进制包方式OTA升级

一、引言

OTA(Over-the-Air)升级是一种通过无线网络对设备进行远程升级的技术。本文档旨在详细描述 OTA 升级的流程,包括升级启动、升级包传输等环节。

二、OTA 升级流程概述
  1. 平台自行拼装 OTA 格式,启动 OTA 升级。
  2. 云端向设备发送升级启动指令。
  3. 设备收到升级启动指令后,进行校验和验证,若通过则向云端回复指令。
  4. 云端收到设备的正确回复后,开始 OTA 升级包传输。
  5. 云端向设备发送升级包传输指令。
  6. 设备收到升级包传输指令后,进行校验和验证,若通过则向云端回复指令。
  7. 云端根据设备的回复判断是否所有升级包都已传输完成,若未完成则继续发送下一个升级包传输指令,直至升级完成。
三、具体流程步骤

主题:

报文示例:

  1. 升级启动阶段:
    • 云端 -> 设备:
        0x55aa 0x00 0x0A 0x0004 [固件包字节数] [校验和]
        0x55aa [0x00 - 0xFF] 0x0A 0x0001 [升级包分包传输大小] [校验和]
  1. 升级包传输阶段:
    • 云端 -> 设备:
        0x55aa 0x00 0x0B 0x0004 + [数据包长度] [包偏移][数据包内容] [校验和]
        0x55aa [0x00 - 0xFF] 0x0B 0x0000 [校验和]
  1. 升级启动
    • 云端 -> 设备:云端向设备发送升级启动指令,指令包含帧头(0x55aa)、版本号(0x00)、指令类型(0x0A)、子指令(0x0004)、固件包字节数和校验和(从帧头开始,按字节求和,对 256 求余)。
    • 设备 -> 云端:设备收到升级启动指令后,进行校验和验证。若校验和验证通过,设备向云端回复指令,指令包含帧头(0x55aa)、版本号(0x00 - 0xFF)、指令类型(0x0A)、子指令(0x0001)、升级包分包传输大小(0x00:256byte(默认);0x01:512byte;0x02:1024byte)和校验和(计算方式同云端发送的指令)。
  2. 升级包传输
    • 云端 -> 设备:云端向设备发送升级包传输指令,指令包含帧头(0x55aa)、版本号(0x00)、指令类型(0x0B)、子指令(0x0004 + 数据包长度)、前四字节为包偏移,后面为数据包内容(若包偏移大于等于固件包大小,则包传输结束)和校验和(从帧头开始,按字节求和,对 256 求余)。
    • 设备 -> 云端:设备收到升级包传输指令后,进行校验和验证。若校验和验证通过,设备向云端回复指令,指令包含帧头(0x55aa)、版本号(0x00 - 0xFF)、指令类型(0x0B)、子指令(0x0000)、空内容和校验和(计算方式同云端发送的指令)。
  3. 升级完成判断
    • 云端收到设备的回复后,判断是否所有升级包都已传输完成。
    • 若已完成,OTA 升级结束。
    • 若未完成,继续发送下一个升级包传输指令,回到升级包传输步骤。

二、注意事项

  1. 在整个升级过程中,校验和的验证是确保数据准确性和完整性的重要环节,任何校验和不匹配的指令都应被视为错误并进行相应的处理。
  2. 升级包的传输过程中,需要确保无线网络的稳定性,以避免数据丢失或传输中断。
  3. 若升级过程中出现异常情况,应具备相应的错误处理机制,例如重试、回滚等操作,以保证设备的正常运行。

三、操作流程

HTTPS 方式 OTA 升级流程操作

1. 运维管理-产品固件:添加固件,选择产品

2. 固件详情添加任务

* 新增任务,升级范围可选全部设备或指定设备 **注意**:选择预定升级时间,会在该时间节点升级,如果不选择,点击保存后立即升级

3. 实时观察任务升级进度

二进制包方式OTA流程操作同上