tencent cloud

物联网通信

动态与公告
产品动态
产品简介
产品概述
产品功能
产品优势
应用场景
产品限制
基本概念
快速入门
快速开始
场景一:设备互通
场景二:设备状态上报与状态设置
MQTT.fx接入指南
控制台使用手册
产品管理
规则引擎
子账号访问IoT
固件升级
资源管理
证书管理
开发者手册
功能组件
签名方法
设备身份认证
设备接入协议
网关子设备
消息通信
设备影子
设备固件升级
设备远程配置
资源管理
设备日志上报
NTP服务
设备端接入手册
设备接入概述
基于C SDK接入
基于 Android SDK 接入
基于 Java SDK 接入
基于 Python SDK 接入
API 文档
History
Introduction
API Category
Making API Requests
Device Shadow APIs
Device APIs
CA Certificate APIs
Product APIs
Data Types
Error Codes
常见问题
一般性问题
设备接入和上报问题
规则引擎问题
控制台相关问题
IoT Hub 政策
隐私协议
数据处理和安全协议
词汇表

设备固件升级

PDF
聚焦模式
字号
最后更新时间: 2024-12-27 15:54:13

操作场景

设备固件升级,是物联网通信服务的重要组成部分。当物联设备有新功能或者需要修复漏洞时,设备可以通过设备固件升级服务快速的进行固件升级。

实现原理

固件升级的过程中,需要设备订阅下面两个 Topic 来实现与云端的通信,如下图所示:
OTA topic

示例如下:
$ota/report/${productID}/${deviceName}
用于发布(上行)消息,设备上报版本号及下载、升级进度到云端
$ota/update/${productID}/${deviceName}
用于订阅(下行)消息,设备接收云端的升级消息

操作流程

以 MQTT 为例,设备的升级流程如下所示:
OTA 时序图

1. 设备上报当前版本号。设备端通过 MQTT 协议发布一条消息到 Topic $ota/report/${productID/${deviceName},进行版本号的上报,消息为 json 格式,内容如下:
{
"type": "report_version",
"report":{
"version": "0.1"
}
}
// type:消息类型
// version:上报的版本号
2. 登录 物联网通信控制台,进行固件上传,并将指定的设备升级到指定的版本。
3. 触发固件升级操作后,设备端会通过订阅的 Topic $ota/update/${productID}/${deviceName} 收到固件升级的消息,内容如下:
{
"file_size": 708482,
"md5sum": "36eb5951179db14a63****a37a9322a2",
"type": "update_firmware",
"url": "https://ota-1255858890.cos.ap-guangzhou.myqcloud.com",
"version": "0.2"
}
// type:消息类型为update_firmware
// version:升级版本
// url:下载固件的url
// md5asum:固件的MD5值
// file_size:固件大小,单位为字节
4. 设备在收到固件升级的消息后,根据 URL 下载固件,下载的过程中设备 SDK 会通过 Topic $ota/report/${productID}/${deviceName}不断的上报下载进度,上报的内容如下:
{
"type": "report_progress",
"report":{
"progress":{
"state":"downloading",
"percent":"10",
"result_code":"0",
"result_msg":""
},
"version": "0.2"
}
}
// type:消息类型
// state:状态为正在下载中
// percent:当前下载进度,百分比
5. 当设备下载完固件,设备需要通过 Topic $ota/report/${productID}/${deviceName}上报一条开始升级的消息,内容如下:
{
"type": "report_progress",
"report":{
"progress":{
"state":"burning",
"result_code":"0",
"result_msg":""
},
"version": "0.2"
}
}
// type:消息类型
// state:状态为烧制中
6. 设备固件升级完成后,再向 Topic $ota/report/${productID}/${deviceName}上报升级成功消息,内容如下:
{
"type": "report_progress",
"report":{
"progress":{
"state":"done",
"result_code":"0",
"result_msg":""
},
"version": "0.2"
}
}
// type:消息类型
// state:状态为已完成
在下载固件或升级固件的过程中,如果失败,则通过 Topic $ota/report/${productID}/${deviceName}上报升级失败消息,内容如下:
{
"type": "report_progress",
"report":{
"progress":{
"state":"fail",
"result_code":"-1",
"result_msg":"time_out"
},
"version": "0.2"
}
}
// state:状态为失败
// result_code:错误码,-1:下载超时;-2:文件不存在;-3:签名过期;-4:MD5不匹配;-5:更新固件失败
// result_msg:错误消息

OTA 断点续传

物联网设备会出现在部分场景处于弱网环境,在此场景下连接将会不稳定,固件下载会出现中断的情况。如果每次都从0偏移开始下载固件,则在弱网环境有可能一直无法完成全部固件下载,因此固件的断点续传功能特别必要,关于断点续传的具体说明如下。
断点续传指从文件上次中断的地方开始重新下载或上传,要实现断点续传的功能,需要设备端记录固件下载的中断位置,同时记录下载固件的 MD5、文件大小、版本信息。
平台针对 OTA 中断的场景,设备侧 report 设备的版本,如果上报的版本号与要升级的目标版本号不一致,则平台会再次下发固件升级消息,设备将获取到要升级的目标固件信息与本地记录的中断的固件信息进行比较,确定为同一固件后,基于断点继续下载。
带断点续传的 OTA 升级流程如下:
说明:
弱网环境下步骤3-6有可能会多次执行,执行成功后再执行第7步。
执行步骤3后,设备端都会收到需要执行步骤4的消息。
OTA 断点续传时序图


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈