固件升级
本文档介绍智能门锁的 OTA (Over-The-Air) 固件升级协议,包括固件文件格式、升级流程和相关指令。
固件文件格式
SYD 固件文件采用特定格式封装元数据和固件二进制内容:
<固定前缀 "SYD-BIN-DATA"><4字节元数据JSON长度><元数据JSON><固件二进制数据>元数据 JSON 结构
json
{
"platform": "",
"product": "",
"hwVersion": "",
"fwVersion": "",
"fwSize": 12,
"fwMd5": "0243b01ed0bebac0985325463b365fe1"
}| 字段 | 说明 |
|---|---|
| platform | 方案号 |
| product | 机型号 |
| hwVersion | 硬件版本,如 1.0.0.230828 |
| fwVersion | 软件版本,如 1.0.0.230828 |
| fwSize | 固件大小(字节) |
| fwMd5 | 固件 MD5 校验值 |
升级流程
APP 端验证流程
javascript
// 读取固件内容
data = readFile(...)
// 1. 验证前缀
if (data[0:11] != 'SYD-BIN-DATA') {
alert('非SYD固件,请选择正确的文件')
}
// 2. 读取元数据长度
metaLen = parseInt(data[11:14])
if (metaLen < 2 || metaLen > 10240) {
alert('元数据长度错误')
}
// 3. 解析元数据
metaStr = data[14:14+metaLen]
meta = JSON.parse(metaStr)
// 4. 提取固件二进制数据
binOffset = 14 + metaLen
bin = data[14+metaLen:]
// 5. MD5 校验
if (md5(bin) != meta['fwMd5']) {
alert('固件MD5校验失败')
}
// 6. 使用 meta 中的数据构造 OTA 协议参数
...固件包装工具
可使用在线工具打包固件:SYD固件包装工具(HTML 文件,无需服务器)
OTA 升级开始
指令码: 0x30E0
方向: APP → 门锁
加密: SM4 私钥模式
请求消息
| 字段名称 | 字段类型 | 字段长度 | 字段说明 |
|---|---|---|---|
| CmdID | 整型 | 2 | 指令 ID |
| LockID | 字符串 | 40 | 锁 ID |
| UserID | 字符串 | 20 | 用户 ID |
| Platform | 整型 | 2 | 方案号 |
| Product | 整型 | 2 | 机型号 |
| HwVersion | 字符串 | 20 | 硬件版本,如 1.0.0.230828 |
| FwVersion | 字符串 | 20 | 软件版本,如 1.0.0.230828 |
| FwSize | 整型 | 4 | 固件大小 |
| FwMD5 | 整型 | 16 | 固件 MD5 值 |
| Token | 整型 | 4 | 动态口令 |
| AuthCodeLen | 整型 | 1 | AuthCode 数据长度 |
| AuthCode | 字符串 | 变长 | 鉴权码,长度由 AuthCodeLen 指示 |
应答消息
| 字段名称 | 字段类型 | 字段长度 | 字段说明 |
|---|---|---|---|
| CmdID | 整型 | 2 | 指令 ID |
| Token | 整型 | 4 | 动态口令 |
| Status | 整型 | 1 | 处理状态 |
OTA 升级过程
指令码: 0x30E1
方向: APP → 门锁
加密: 明文传输
注意
该指令不加密,使用明文传输。单包数据最大 240 字节,使用 WriteNoRespond 服务。
请求消息
| 字段名称 | 字段类型 | 字段长度 | 字段说明 |
|---|---|---|---|
| CmdID | 整型 | 2 | 指令 ID |
| Index | 整型 | 2 | 数据包序列号 |
| Size | 整型 | 2 | 数据包大小 |
| Data | 二进制 | N | 数据包数据,N 同 Size(最大 240) |
应答消息
| 字段名称 | 字段类型 | 字段长度 | 字段说明 |
|---|---|---|---|
| CmdID | 整型 | 2 | 指令 ID |
| Status | 整型 | 1 | 处理状态 |
OTA 升级确认
指令码: 0x30E2
方向: 门锁 → APP
加密: SM4 私钥模式
请求消息
| 字段名称 | 字段类型 | 字段长度 | 字段说明 |
|---|---|---|---|
| CmdID | 整型 | 2 | 指令 ID |
| Status | 整型 | 1 | 处理状态 |
| Time | 整型 | 4 | 当前时间戳 |
应答消息
无应答。
指令汇总
| 指令码 | 名称 | 方向 | 加密 |
|---|---|---|---|
| 0x30E0 | OTA 升级开始 | APP → 门锁 | SM4 私钥模式 |
| 0x30E1 | OTA 升级过程 | APP → 门锁 | 明文 |
| 0x30E2 | OTA 升级确认 | 门锁 → APP | SM4 私钥模式 |
