forked from EmbeddedTeam/app_photomagnetic
- Add UID encoding/decoding with flash storage and CRC16 validation - Add write UID (0x07) and LED strip color (0x08) protocol commands - Add debug LED strip configuration option - Switch MCUboot signing from RSA-2048 to ECDSA-P256 - Add SMP serial client for firmware upload over UART - Add firmware version output on boot - Update upgrade documentation with ECDSA key generation steps
3.0 KiB
3.0 KiB
串口通信协议设计文档
- 帧结构:
[起始标志:16bit][数据指令类型][数据字节数:8bit][数据][CRC]- CRC从[数据指令类型]到[数据]结束
- 温度:0x00指令
- 主板请求:0x[7ee7][00][00][crc16]
- 小板回:0x[7ee7][00][02][2411][crc16]
- 主板请求时,小板回复温度
- id:0x01指令
- 主板发 0x[7ee7][01][00][crc16]
- 小板发 0x[7ee7][01][03][989680][crc16]
- 主板请求时,小板回复id
- 小板在系统上电时,主动发一次id
- 运行状态:0x02指令
- 主板发 0x[7ee7][02][01][状态值][crc16]
- 主板在运行状态变化时,主动向小板上报状态
- 状态值定义:
- 0x00:待机中
- 0x01:运行中
- 0x02:暂停中
- 0x03:故障中
- 主板发 0x[7ee7][02][01][状态值][crc16]
- 写UID:0x07指令(生产烧录自定义UID,替代MCU芯片UID)
- 主板发 0x[7ee7][07][0a][uid 10字节][crc16]
- 将10字节UID写入小板storage分区(flash),掉电不丢失
- 写入后,0x01读ID指令返回的是该UID
- UID编码规则见《UID编码规则.md》:
[设备类型 1B][产品代次 1B][生产年月 4B][序列号 4B]
- 主板发 0x[7ee7][07][00][crc16]
- 清除自定义UID,恢复使用MCU芯片UID
- 小板回 0x[7ee7][07][01][状态][crc16]
- 状态值定义:
- 0x00:成功
- 0x01:写入失败(flash擦除/写入/校验错误)
- 0x02:长度错误(UID必须为10字节,或0字节=清除)
- 说明:UID在storage分区(0x70000,64KB)起始处,记录格式
[magic "UID1" 4B][ver 1B][uid 10B][crc16 2B][pad 7B], 含CRC16-Modbus校验,损坏/未写入时自动回退芯片UID
- 状态值定义:
- 主板发 0x[7ee7][07][0a][uid 10字节][crc16]
- 灯带调色(调试):0x08指令(仅调试固件 CONFIG_APP_DEBUG_LED_STRIP=y 时存在,
生产固件不编译此命令)
- 主板发 0x[7ee7][08][03][R][G][B][crc16]
- 灯带整体设为该 RGB 颜色(R/G/B 各 0~255)
- [0,0,0] 即熄灭
- 用于开发/产线检查灯光颜色是否满足需求
- 主板发 0x[7ee7][08][03][R][G][B][crc16]
sequenceDiagram
participant S as 小板 (传感器)
participant M as 主板 (控制板)
Note over S: 系统上电
S ->> M: 【主动】发送 ID 信息 (0x01 指令帧)
Note over S, M: 周期性温度上报 (每 20ms 一次)
loop 每 20ms
S ->> M: 【主动】发送温度数据帧 (0x00 指令)
end
Note over M, S: CRC 校验范围:从帧第 3 字节开始至 CRC 前
Note over M: 主板运行状态变化
M ->> S: 【主动】发送运行状态 (0x02 指令帧)
opt 主板查询
M ->> S: 请求 ID 信息 (0x01 指令帧)
S -->> M: 回复 ID 序列号
M ->> S: 请求 温度 信息 (0x00 指令帧)
S -->> M: 回复 温度 数据
end
Note over M, S: 生产烧录 UID (0x07 指令)
M ->> S: 写入 12 字节 UID (0x07 指令帧)
S -->> M: 回复状态 (0x00 成功)
M ->> S: 请求 ID 验证 (0x01 指令帧)
S -->> M: 回复写入后的 UID