出厂 provisioning 串口协议

固件接收后台分发的设备私钥与序列号,写进一次性可编程存储区,读回确认。 读侧(应用启动时从 OTP 读身份,记录格式与判定)见 docs/otp-read.md;本文档只写写侧协议。 固件不再自己产生密钥对:密钥对由后台生成、绑定序列号,写入工具登录后取密钥, 经串口发给固件。旧的“现场产生、人工登记”流程已作废。

角色与流程

  1. 出发前,现场实施人员从管理后台批量领号(发号系统去重、标记已领出)。
  2. 写入工具用操作员账号(用户名密码)登录管理后台,联网向后台取该设备的密钥对; 取密钥时上报设备序列号、型号等,后台把密钥对绑定到该序列号,并记操作时间、 操作人等审计。
  3. 写入工具经串口(DAPLink 自带虚拟串口)把私钥和序列号发给固件,固件写进 一次性可编程存储区,读回确认。
  4. 写入工具确认 OK PROVISIONED 后,该台完成;写不进或读回不符的台隔离处理, 不重试写入(存储区写一次即不可改)。

传输

命令

命令 含义 成功回复
PROV BEGIN 打开一次写入会话 OK PROV READY
PROV SERIAL <序列号> 送序列号(待提交) OK SERIAL
PROV KEY <64 位十六进制> 送私钥(待提交) OK KEY
PROV COMMIT 写存储区并读回确认 OK PROVISIONED
PROV ABORT 放弃待提交值、关闭会话 OK ABORT
PROV STATUS 查写入状态 OK PROVISIONED <序列号> 或 OK UNPROVISIONED

状态机

IDLE --BEGIN--> READY --COMMIT--> 已写入
  ^              |
  +--- ABORT ----+

提交检查顺序

COMMIT 按以下顺序检查,任一步失败即停:

  1. 已写入 → ERR ALREADY_PROVISIONED。
  2. 不在 READY → ERR BAD_COMMAND。
  3. 序列号或私钥缺失 → ERR INCOMPLETE。
  4. 写存储区失败 → ERR OTP。
  5. 读回与写入值不符 → ERR VERIFY。此时存储区已经写了、但没通过确认, 该台必须隔离处理,不能重新写入(写一次即不可改),也不能靠重试蒙过去。
  6. 全过 → OK PROVISIONED。

字段规则

错误码一览

回复 含义
ERR BAD_COMMAND 未知命令、参数个数不对、会话未打开
ERR BAD_SERIAL 序列号为空、超长、含不可见字符或空格
ERR BAD_KEY 私钥长度不对或含非十六进制字符
ERR INCOMPLETE 提交时序列号或私钥缺失
ERR ALREADY_PROVISIONED 存储区已写入,拒绝二次写入
ERR OTP 存储区读写失败
ERR VERIFY 写后读回不符,该台隔离处理

写入工具对话示例

-> PROV STATUS
<- OK UNPROVISIONED
-> PROV BEGIN
<- OK PROV READY
-> PROV SERIAL GW202611020001
<- OK SERIAL
-> PROV KEY 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
<- OK KEY
-> PROV COMMIT
<- OK PROVISIONED
-> PROV STATUS
<- OK PROVISIONED GW202611020001

相关文档

注意:本协议只覆盖出厂写入(私钥与序列号进一次性可编程存储区)。空中升级的设备端处理(收 firmware_update 命令、解包密钥、解固件、验签、安装、回执)待固件侧实现,不在本协议内;回执配对跟踪与管理台推送按钮界面同样待后续。

实现位置与测试