Skip to main content

产品通用协议

所有产品共用本页的报文、系统命令和结果码。字节流使用 AF FA + LEN;CAN / CAN FD 使用 ISO-TP。点击命令查看字段。

CMD 分段​

范围归属用法
0x00保留不得作为 CMD 使用
0x01–0x0F通用系统命令Boot 与 App 必须实现已分配的四条命令
0x10–0x1F通用业务命令序列号和硬件版本等,产品按需实现
0x20–0x2FIAP 升级命令支持升级的型号按统一载荷实现
0x30–0x4F通用预留当前不得使用
0x50–0xEF产品业务命令各产品独立定义
0xF0–0xFF工厂与调试命令不作为公开接口

命令报文与接口分帧​

字段长度
SEQ1字节
CMD1字节
PAYLOAD0 至 1024 字节
CRC162字节

原始报文为 SEQ + CMD + PAYLOAD + CRC16(4–1028 字节)。CRC 使用 CRC-16/CCITT-FALSE:poly=0x1021、init=0xFFFF、不反射、xorout=0,覆盖 SEQ、CMD、PAYLOAD;CRC 低字节先发。多字节数值使用小端。

UART / RS485、BLE 透传和 Wi‑Fi TCP 等字节流线路发送 AF FA + LEN(2字节小端) + 原始报文。LEN 是原始报文长度,不含外层 4 字节;接收方按帧头和长度收齐后校验 CRC。PAYLOAD 无需转义;错误帧丢弃,断链后丢弃半帧。CAN / CAN FD 使用 ISO-TP 传原始报文,不添加字节流外层头。RS485 多设备共线的地址与收发规则尚未统一定义。

例如空载荷 Get Info:SEQ=01、CMD=01、CRC16=3E1F,原始报文为 01 01 1F 3E,字节流帧为 AF FA 04 00 01 01 1F 3E。

主机请求使用 SEQ=1..255;响应回显 SEQ 和 CMD,SEQ=0 留给设备主动事件。每条逻辑链路一次只保留一笔未完成请求;超时重发必须保持完整请求原始帧不变。响应 PAYLOAD 首字节是 Result。收到 ACCEPTED 后继续等待同一请求的最终响应。Get Info.MaxPayload 是当前模式的载荷上限,包含响应的 Result 字节。

通用结果码​

值名称含义
0x00OK最终成功
0x01ACCEPTED异步命令已接收,后续还会返回最终结果
0x02BUSY设备忙
0x03BAD_COMMAND不支持 CMD
0x04BAD_PAYLOAD长度或内容错误
0x05BAD_STATE当前状态不允许
0x06BAD_SEQUENCESEQ 冲突或重复请求不一致
0x07VERIFY_FAILED校验失败
0x08IO_ERRORFlash、外设或链路错误
0x09TIMEOUT操作超时
0x0AINTERNAL_ERROR内部错误

除命令另有规定外,非 OK 的最终响应和 ACCEPTED 中间响应都只带一个 Result 字节。

系统命令 · 0x01–0x0F​

0x01 Get Info 获取设备信息

请求 PAYLOAD

空

成功响应 PAYLOAD · 19字节

Result(1字节) + ProtocolVersion(1字节) + TargetID(4字节) + HWVersion(2字节) + Mode(1字节) + BootVersion(4字节) + AppVersion(4字节) + MaxPayload(2字节)

ProtocolVersion=1;Mode=0 引导程序,1 应用程序。目标ID 用于固件兼容校验;MaxPayload 包含响应结果字节,范围为 19 至 1024 字节。

0x02 Get UID 获取设备 UID

请求 PAYLOAD

空

成功响应 PAYLOAD · 13字节

Result(1字节) + UID(12字节)

UID 是固定的 12 字节原始数据,不是十六进制文本;引导程序与应用程序返回同一个 UID。

0x03 Reboot 重启设备

请求 PAYLOAD

空

成功响应 PAYLOAD · 1字节

Result(1字节)

先完整发送 OK 响应,再复位;OTA 正在进行时返回 BAD_STATE。

0x04 Enter Boot 进入引导程序

请求 PAYLOAD

空

成功响应 PAYLOAD · 1字节

Result(1字节)

应用程序写入引导程序保持标志,发完 OK 响应后复位进入 Boot;引导程序收到时返回 BAD_STATE。

通用业务命令 · 0x10–0x1F​

以下命令由产品按需注册;Boot 与 App 均必须实现上方四条系统命令。未实现的通用业务命令返回 BAD_COMMAND。

0x10 Product SN Read 读取产品序列号

请求 PAYLOAD

空

成功响应 PAYLOAD · 3+N 字节

Result(1字节) + Provisioned(1字节) + SNLength(1字节) + SN(N字节)

未写入时 已写入标志=0、N=0;已写入时 已写入标志=1、N=1..32。SN 只允许 ASCII 大写字母、数字和连字符。

0x11 Product SN Write 写入产品序列号

请求 PAYLOAD · 1+N 字节

SNLength(1字节) + SN(N字节)

成功响应 PAYLOAD · 2+N 字节

Result(1字节) + SNLength(1字节) + SN(N字节)

N=1..32;仅首次写入且具备工厂状态或物理授权。持久化并回读通过后才回复 OK。

0x12 HW Version Read 读取硬件版本

请求 PAYLOAD

空

成功响应 PAYLOAD · 4字节

Result(1字节) + Provisioned(1字节) + HWVersion(2字节)

未写入时 已写入标志=0、硬件版本=0;写入后与“获取设备信息”返回的硬件版本一致。

0x13 HW Version Write 写入硬件版本

请求 PAYLOAD · 2字节

HWVersion(2字节)

成功响应 PAYLOAD · 3字节

Result(1字节) + HWVersion(2字节)

硬件版本不得为 0;默认只允许首次写入且需工厂状态或物理授权。已写入不同值时拒绝。

IAP 升级命令 · 0x20–0x2F​

支持升级的型号通过 BEGIN → WRITE → VERIFY → COMMIT 处理完整 IAP2 镜像文件;明文与加密 IAP2 使用同一组命令,设备按自身策略验证镜像。BEGIN、WRITE、VERIFY、COMMIT、ABORT 可能先回 ACCEPTED,再回相同 SEQ 和 CMD 的最终结果。等待最终响应后再发下一条命令。

CMD命令请求 PAYLOAD最终成功响应 PAYLOAD
0x20BEGIN 开始升级ImageSize(4字节),完整 IAP2 文件总长度,含镜像头Result(1字节)
0x21WRITE 写入数据Offset(4字节) + Data(N字节),从文件偏移 0 顺序发送;N≥1,4+N≤MaxPayloadResult(1字节)
0x22VERIFY 验证镜像空Result(1字节)
0x23COMMIT 提交镜像空Result(1字节)
0x24ABORT 中止升级空Result(1字节)
0x25STATUS 查询升级状态空Result(1字节) + State(1字节) + ImageSize(4字节) + Received(4字节)

STATUS.State:0 空闲、1 接收中、2 已验证、3 失败、4 已提交;STATUS 直接回最终结果。ImageSize 和 Received 均按字节计,包含镜像头。提交响应丢失时先重发原请求;设备重启后用运行版本确认镜像是否生效。中止后新的升级从 BEGIN、偏移 0 开始。

已出厂设备的协议格式按型号与固件版本确认。

产品通用协议 v1 · 报文与命令。镜像头和授权数据格式由对应产品规定。