P1 业务: - 管理:0x16 出厂复位(清配对+时区)、0x18 模组重启、0x1A 通知 MCU 重启(预留) - 对时:网关 DEVICEINFO 下发 Unix 秒+时区,写入 RTC;MCU 0x1C/0x1D 读当前时间 - 版本:UART 0x40 拉 MCU 信息,SOC 0x41 上报网关;网关 ACK 等待 2s,最多 3 次 RTC: - 新增 usr_periph,打开板级 "rtc";开发板无 32K 用 LRC,量产模组再改 CLK_SEL_32K - 对时补偿 +1s;时区存 VM;出厂复位清除时区;硬件走时,软件只刷新 UTC 缓存 链路与 0x14: - VM paired_flag 仍表示已绑定;CONFIGURED 改为绑定+已连接+CCC,否则保持 RECONNECTING - 0x07/0x41 等 notify 未就绪不发送、不占重试,避免 MCU 过早上报
10 KiB
SOC方案接入通信协议文档
修订记录
| 文档版本 | 协议版本 | 日期 | 编写人 | 修订类型 | 修订内容 |
|---|---|---|---|---|---|
| V1.0.0 | V1.0 | 2026-07-08 | 麦田 | 新建 | 首次发布SOC方案接入协议通讯文档 |
协议说明
-
数据采用大端模式(Big Endian)传输。
-
数据帧格式: 包头 + 包长度 + 命令 + 序列号 + 数据 + 校验和。
-
包头固定为
0x55AA。 -
包长度表示 命令开始至校验和结束 的数据长度。
-
命令字(Command)用于区分不同功能。
-
序列号(Seq)由请求方递增生成,ACK需原样返回,用于匹配请求与响应。
-
默认所有命令采用 一问一答机制,发送方发送命令后,接收方必须返回对应 ACK。
-
ACK 数据包包含 Result 字段,用于返回执行结果。
-
超时未收到 ACK 时,发送方可进行重试,最大重试次数建议为 3 次。
-
数据点标志(Bitmap)由 DP 配置文档自动生成,一个 Bit 对应一个 DP。
-
数据点值按照 Bitmap 中 Bit 置位顺序依次排列。
-
读取命令通过 Bitmap 指定需要读取的 DP,Bitmap 全 1 表示读取全部 DP。
-
BLE 模组主要负责数据透传、蓝牙连接及状态管理,业务数据由 MCU 处理。
-
校验方式:累加和校验(Sum Check),计算范围为 包长度字段至校验和前一个字节。
Result 定义:
| 值 | 含义 |
|---|---|
| 0x00 | 成功 |
| 0x01 | 参数错误 |
| 0x02 | 设备忙 |
| 0x03 | 不支持该操作 |
| 0x04 | 校验错误 |
| 0x05 | 执行失败 |
OTA 专用错误码
| 值 | 含义 |
|---|---|
| 0x20 | 无需升级(版本一致) |
| 0x21 | OTA 版本低于当前版本 |
| 0x22 | Flash 空间不足 |
| 0x23 | OTA 状态错误 |
| 0x24 | OTA文件检验失败 |
| 0x25 | 升级失败 |
基本通讯协议
设备上报版本信息
设备绑定上网关之后,主动上报固件版本到服务器,此命令通过网关的应答格式判断是否发送成功。。
设备 => 网关
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x41 |
| 4 | 序列号 | 1 | 与请求的序列号一致 |
| 5 | Result | 1 | 执行结果(见 Result 定义) |
| 6 | BLE Version | 3 | 固件版本号,格式:主版本号(1Byte)+次版本号(1Byte)+修订版本号(1Byte),显示格式为:Vx.x.x |
| 7 | MCU Version | 3 | 固件版本号,格式:主版本号(1Byte)+次版本号(1Byte)+修订版本号(1Byte),显示格式为:Vx.x.x,如MCU不存在则填0 |
| 8 | Hardware Version | 3 | 硬件版本号,格式:硬件主版本号(1Byte)+硬件次版本号(1Byte)+硬件修订版本号(1Byte),显示格式:Vx.x.x |
| 9 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
Version版本格式说明
| 字节 | 字段名称 | 内容说明 |
|---|---|---|
| Byte0 | 主版本号 | 产品架构、通信协议等重大变化时递增 |
| Byte1 | 次版本号 | 新增功能或功能优化时递增 |
| Byte2 | 修订版本号 | Bug修复、参数调整、性能优化时递增 |
示例
| MCU Version | 版本号 |
|---|---|
| 0x01 0x02 0x05 | V1.2.5 |
| 0x05 0x02 0x21 | V5.2.33 |
网关 => 设备
通过网关的应答格式判断是否发送成功
APP控制设备
APP => 设备
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x03(下发控制) |
| 4 | 序列号 | 1 | APP递增生成,ACK原样回传 |
| 5 | 数据点标志 | x((DP数量+7)/8) | 一个字节可代表8个数据点 |
| 6 | 数据点值 | x | 数据值 |
| 7 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
设备 => APP
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x04(应答下发控制) |
| 4 | 序列号 | 1 | 与请求的序列号一致 |
| 5 | Result | 1 | 执行结果(见 Result 定义) |
| 6 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
APP读取设备
APP => 设备
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x05(下发读取) |
| 4 | 序列号 | 1 | APP递增生成,ACK原样回传 |
| 5 | 数据点标志 | x((DP数量+7)/8) | 指定需要读取的 DP,Bitmap 全 1 表示读取全部 DP |
| 6 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
设备=> APP
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x06(应答读取) |
| 4 | 序列号 | 1 | 与请求的序列号一致 |
| 5 | 数据点标志 | x((DP数量+7)/8) | 返回的数据点标志 |
| 6 | 数据点值 | x | 数据值 |
| 7 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
设备主动上报数据
此命令直接上报到服务器,通过网关的应答格式判断是否发送成功。
设备 => APP/IPC
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x07(主动上报) |
| 4 | 序列号 | 1 | 设备递增生成 |
| 5 | 数据点标志 | x((DP数量+7)/8) | 一个字节可代表8个数据点 |
| 6 | 数据点值 | x | 数据值 |
| 7 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
APP/IPC => 设备
通过网关的应答格式判断是否发送成功
扩展通讯协议
APP向设备推送OTA升级
功能说明: APP 将与设备升级相关的信息发送给设备,设备根据这些信息判断是否允许OTA升级,并返回升级准备结果。
APP => 设备
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 固定 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x30 |
| 4 | 序列号 | 1 | 数据包序列号 |
| 5 | 固件类型(Type) | 1 | 0x01:MCU 0x02:BLE |
| 6 | 固件版本(Firmware Version) | 3 | OTA 固件版本号 |
| 7 | 固件长度(Payload Length) | 4 | OTA Bin 数据长度 |
| 8 | 固件 CRC32(Payload CRC32) | 4 | OTA Bin 数据 CRC32 校验值 |
| 9 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
设备 => APP
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 固定 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x31 |
| 4 | 序列号 | 1 | 与请求保持一致 |
| 5 | Result | 1 | 执行结果(见 Result OTA 专用错误码定义) |
| 6 | Max Data Length | 2 | 设备 单次允许接收的最大 Payload 长度(Byte) |
| 7 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
APP向设备推送OTA数据
功能说明: APP 根据 设备 返回的 Max Data Length 对 OTA Bin 进行分片,并按顺序发送给设备。 设备 每接收一包数据后立即返回应答,APP 收到成功应答后继续发送下一包。
APP => 设备
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 固定 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x32 |
| 4 | 序列号 | 1 | 数据包序列号 |
| 5 | 分片序号 | 2 | 当前数据包的分片序号,分片序号从1开始计算 |
| 6 | 总分片数 | 2 | |
| 7 | Payload Data | x | OTA Bin 数据,长度 ≤ Max Data Length |
| 8 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
设备 => APP
功能说明: 设备 成功接收并处理当前 OTA 数据包后返回 Result。 APP收到成功应答后继续发送下一包 OTA 数据;若返回失败,则停止本次 OTA 升级。
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 固定 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x33 |
| 4 | 序列号 | 1 | 与请求保持一致 |
| 5 | Result | 1 | 执行结果(见 Result 定义) |
| 6 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
设备通知APP模组OTA升级完成
**功能说明: ** 设备完成OTA升级后,主动通知APP当前升级结果及固件版本信息。
设备 => APP
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 固定 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x34 |
| 4 | 序列号 | 1 | 数据包序列号 |
| 5 | 类型(Type) | 1 | 0x01:MCU 0x02:BLE |
| 6 | OTA Result | 1 | OTA结果 |
| 7 | Firmware Version | 3 | 当前固件版本 |
| 8 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
APP => 设备
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 固定 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x35 |
| 4 | 序列号 | 1 | 与请求保持一致 |
| 5 | Result | 1 | 执行结果(见 Result 定义) |
| 6 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
APP向设备通知OTA停止
功能说明: APP 主动通知设备终止当前 OTA 升级流程。设备收到后立即停止 OTA 数据接收,释放 OTA 相关资源,并返回处理结果。
APP => 设备
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 固定 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x36 |
| 4 | 序列号 | 1 | 数据包序列号 |
| 5 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
设备 => APP
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 固定 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x37 |
| 4 | 序列号 | 1 | 与请求保持一致 |
| 5 | Result | 1 | 执行结果(见 Result 定义) |
| 6 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
设备向APP通知OTA停止
功能说明: 设备在 OTA 过程中因内部异常无法继续升级时,主动通知 APP 停止当前 OTA。APP 收到通知后立即停止发送 OTA 数据,并返回应答。
设备 => APP
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 固定 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x38 |
| 4 | 序列号 | 1 | 数据包序列号 |
| 5 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |
APP => 设备
| 序号 | 字段名称 | 字节长度 | 内容说明 |
|---|---|---|---|
| 1 | 包头 | 2 | 固定 0x55AA |
| 2 | 包长度 | 2 | len(命令...校验和) |
| 3 | 命令 | 1 | 0x39 |
| 4 | 序列号 | 1 | 与通知保持一致 |
| 5 | Result | 1 | 0x00:已收到并停止 OTA |
| 6 | 校验和 | 1 | 和校验(包长度...校验和前一个字节) |