
一、流程概述
HTTPS 方式 OTA 升級(jí)流程描述
結(jié)合 MQTT 服務(wù)、設(shè)備和 Web 端總結(jié)的主題發(fā)送情況:
云端下發(fā)升級(jí)包信息給設(shè)備:
主題:
/${serialNumber}/http/upgrade/set
方向:云端 -> 設(shè)備
觸發(fā)時(shí)機(jī):在 Web 端判斷 OTA 版本可升級(jí)且用戶確認(rèn)升級(jí)后
消息內(nèi)容:包含升級(jí)包的 URL、版本和狀態(tài),如
{ "taskId": 26, "url": "/profile/iot/1/2024-0824-001954.bin", "version": 1.2, "status": 1 }
設(shè)備上報(bào)升級(jí)進(jìn)度:
- 主題:
/${serialNumber}/http/upgrade/reply
- 方向:設(shè)備 -> 云端
- 觸發(fā)時(shí)機(jī):設(shè)備下載升級(jí)包過程中定時(shí)上報(bào)
- 消息內(nèi)容:包含升級(jí)進(jìn)度和狀態(tài),如
{ "taskId": 26, "progress": 100, "version": "1.2", "status": 2 }
- 主題:
設(shè)備升級(jí)完成后上報(bào)最新版本以及狀態(tài):
主題:
/${serialNumber}/http/upgrade/reply
方向:設(shè)備 -> 云端
觸發(fā)時(shí)機(jī):設(shè)備端升級(jí)完成后
消息內(nèi)容:包含最新版本和狀態(tài),如
{ "taskId": 26, "version": "1.2", "status": 3 }
模擬的整體交互流程:
// status狀態(tài)字段定義
AWAIT(0, "等待升級(jí)","未推送固件到設(shè)備"),
SEND(1, "已發(fā)送","已發(fā)送設(shè)備"),
REPLY(2, "升級(jí)中","設(shè)備OTA升級(jí)中"),
SUCCESS(3, "成功","升級(jí)成功"),
FAILED(4, "失敗","升級(jí)失敗"),
STOP(5, "停止","設(shè)備離線停止推送"),
UNKNOWN(404, "未知","未知錯(cuò)誤碼");
//主題定義
${taskId}/ws/ota/status 是云端后臺(tái)推送給云端前臺(tái)的一個(gè)展示狀態(tài)主題
${serialNumber}/http/upgrade/set 是云端推送給設(shè)備的主題
${serialNumber}/http/upgrade/reply 是設(shè)備上給云端的主題
左邊是云端上報(bào) , 右邊是設(shè)備上報(bào)
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
}
二進(jìn)制包方式OTA升級(jí)
一、引言
OTA(Over-the-Air)升級(jí)是一種通過無線網(wǎng)絡(luò)對設(shè)備進(jìn)行遠(yuǎn)程升級(jí)的技術(shù)。本文檔旨在詳細(xì)描述 OTA 升級(jí)的流程,包括升級(jí)啟動(dòng)、升級(jí)包傳輸?shù)拳h(huán)節(jié)。
二、OTA 升級(jí)流程概述
- 平臺(tái)自行拼裝 OTA 格式,啟動(dòng) OTA 升級(jí)。
- 云端向設(shè)備發(fā)送升級(jí)啟動(dòng)指令。
- 設(shè)備收到升級(jí)啟動(dòng)指令后,進(jìn)行校驗(yàn)和驗(yàn)證,若通過則向云端回復(fù)指令。
- 云端收到設(shè)備的正確回復(fù)后,開始 OTA 升級(jí)包傳輸。
- 云端向設(shè)備發(fā)送升級(jí)包傳輸指令。
- 設(shè)備收到升級(jí)包傳輸指令后,進(jìn)行校驗(yàn)和驗(yàn)證,若通過則向云端回復(fù)指令。
- 云端根據(jù)設(shè)備的回復(fù)判斷是否所有升級(jí)包都已傳輸完成,若未完成則繼續(xù)發(fā)送下一個(gè)升級(jí)包傳輸指令,直至升級(jí)完成。
三、具體流程步驟

主題:
- 云端 -> 設(shè)備:/{deviceNum}/fetch/upgrade/set
- 設(shè)備 -> 云端:/{deviceNum}/fetch/upgrade/reply
報(bào)文示例:
- 升級(jí)啟動(dòng)階段:
- 云端 -> 設(shè)備:
0x55aa 0x00 0x0A 0x0004 [固件包字節(jié)數(shù)] [校驗(yàn)和]
- 設(shè)備 -> 云端:
0x55aa [0x00 - 0xFF] 0x0A 0x0001 [升級(jí)包分包傳輸大小] [校驗(yàn)和]
- 升級(jí)包傳輸階段:
- 云端 -> 設(shè)備:
0x55aa 0x00 0x0B 0x0004 + [數(shù)據(jù)包長度] [包偏移][數(shù)據(jù)包內(nèi)容] [校驗(yàn)和]
- 設(shè)備 -> 云端:
0x55aa [0x00 - 0xFF] 0x0B 0x0000 [校驗(yàn)和]
- 升級(jí)啟動(dòng)
- 云端 -> 設(shè)備:云端向設(shè)備發(fā)送升級(jí)啟動(dòng)指令,指令包含幀頭(0x55aa)、版本號(hào)(0x00)、指令類型(0x0A)、子指令(0x0004)、固件包字節(jié)數(shù)和校驗(yàn)和(從幀頭開始,按字節(jié)求和,對 256 求余)。
- 設(shè)備 -> 云端:設(shè)備收到升級(jí)啟動(dòng)指令后,進(jìn)行校驗(yàn)和驗(yàn)證。若校驗(yàn)和驗(yàn)證通過,設(shè)備向云端回復(fù)指令,指令包含幀頭(0x55aa)、版本號(hào)(0x00 - 0xFF)、指令類型(0x0A)、子指令(0x0001)、升級(jí)包分包傳輸大?。?x00:256byte(默認(rèn));0x01:512byte;0x02:1024byte)和校驗(yàn)和(計(jì)算方式同云端發(fā)送的指令)。
- 升級(jí)包傳輸
- 云端 -> 設(shè)備:云端向設(shè)備發(fā)送升級(jí)包傳輸指令,指令包含幀頭(0x55aa)、版本號(hào)(0x00)、指令類型(0x0B)、子指令(0x0004 + 數(shù)據(jù)包長度)、前四字節(jié)為包偏移,后面為數(shù)據(jù)包內(nèi)容(若包偏移大于等于固件包大小,則包傳輸結(jié)束)和校驗(yàn)和(從幀頭開始,按字節(jié)求和,對 256 求余)。
- 設(shè)備 -> 云端:設(shè)備收到升級(jí)包傳輸指令后,進(jìn)行校驗(yàn)和驗(yàn)證。若校驗(yàn)和驗(yàn)證通過,設(shè)備向云端回復(fù)指令,指令包含幀頭(0x55aa)、版本號(hào)(0x00 - 0xFF)、指令類型(0x0B)、子指令(0x0000)、空內(nèi)容和校驗(yàn)和(計(jì)算方式同云端發(fā)送的指令)。
- 升級(jí)完成判斷
- 云端收到設(shè)備的回復(fù)后,判斷是否所有升級(jí)包都已傳輸完成。
- 若已完成,OTA 升級(jí)結(jié)束。
- 若未完成,繼續(xù)發(fā)送下一個(gè)升級(jí)包傳輸指令,回到升級(jí)包傳輸步驟。
二、注意事項(xiàng)
- 在整個(gè)升級(jí)過程中,校驗(yàn)和的驗(yàn)證是確保數(shù)據(jù)準(zhǔn)確性和完整性的重要環(huán)節(jié),任何校驗(yàn)和不匹配的指令都應(yīng)被視為錯(cuò)誤并進(jìn)行相應(yīng)的處理。
- 升級(jí)包的傳輸過程中,需要確保無線網(wǎng)絡(luò)的穩(wěn)定性,以避免數(shù)據(jù)丟失或傳輸中斷。
- 若升級(jí)過程中出現(xiàn)異常情況,應(yīng)具備相應(yīng)的錯(cuò)誤處理機(jī)制,例如重試、回滾等操作,以保證設(shè)備的正常運(yùn)行。
三、操作流程
HTTPS 方式 OTA 升級(jí)流程操作
1. 運(yùn)維管理-產(chǎn)品固件:添加固件,選擇產(chǎn)品:

2. 固件詳情添加任務(wù):
- 產(chǎn)品固件列表點(diǎn)擊固件詳情


3. 實(shí)時(shí)觀察任務(wù)升級(jí)進(jìn)度:
查看任務(wù)詳情:
等待預(yù)定升級(jí)時(shí)間開始升級(jí):
設(shè)備升級(jí)中:
設(shè)備升級(jí)成功: