docs(vd960Air): 帧协议对比 DBN↔Loop 0x7F + 配置同步链路 + 通道切换策略(用户决策 2026-08-31)
1. 帧格式确认: 参考 DLD960_串口通信协议 + loop_uart_proto.c 核实 - DBN↔Loop 0x7F 帧: [7F][Addr][LEN(1B)][CMD][Value][XOR][SUM], Value 0~64B - Air780↔DBN 0x7D 帧: LEN 扩 2B(≤2048B), 状态机同构, 待确认校验统一 XOR+SUM 2. 服务器参数配置链路(列入 vd960DBN 计划): BLE→DBN→UART1→Air780 存储 3. 通道切换策略: 暂定默认 4G;动态自动 vs 人工设置待讨论
This commit is contained in:
@@ -36,6 +36,19 @@
|
|||||||
- UART 链路帧格式(本工程 §3)
|
- UART 链路帧格式(本工程 §3)
|
||||||
- 与主协议共享的 JSON 结构,平台侧零改动
|
- 与主协议共享的 JSON 结构,平台侧零改动
|
||||||
|
|
||||||
|
### 2.2 服务器参数配置链路(用户决策 2026-08-31,列入 vd960DBN 开发计划)
|
||||||
|
|
||||||
|
**服务器参数(地址/端口/ClientID/账号密码/Topic)当前由小程序 BLE 蓝牙设置。** 规划:
|
||||||
|
|
||||||
|
```
|
||||||
|
小程序 → BLE → vd960DBN(CH32V208) → UART1(0x7D 帧) → Air780 存储(LuatOS fskv/luadb)
|
||||||
|
```
|
||||||
|
|
||||||
|
- **vd960DBN 更新版本(列入计划)**: 小程序设置服务器/topic 相关参数(BLE 0x13/0x15 等)时,同步经 UART1 组帧下发 Air780
|
||||||
|
- **Air780 侧**: 新增"配置下发"UART 命令处理——收到后更新本地配置存储;`config.lua` 值降级为**出厂默认**(运行时优先读存储)
|
||||||
|
- 协议面: 在《DLD960_IoT_MQTT协议》4G 适配章节新增"配置同步下发"命令(方向 srv 语义,经 DBN 透传或 DBN 主动下发)
|
||||||
|
- 好处: 现场换 4G 模块/重新配对时,参数随 BLE 一次配好,不依赖 Air780 单独刷脚本
|
||||||
|
|
||||||
### 2.1 4G 特有字段: link 对象(用户决策 2026-08-31)
|
### 2.1 4G 特有字段: link 对象(用户决策 2026-08-31)
|
||||||
|
|
||||||
上行 JSON(initialize / loop_data / event_report / heartbeat / 命令响应)注入:
|
上行 JSON(initialize / loop_data / event_report / heartbeat / 命令响应)注入:
|
||||||
@@ -70,19 +83,38 @@
|
|||||||
- JSON 解析失败时原样转发,不阻塞上行
|
- JSON 解析失败时原样转发,不阻塞上行
|
||||||
- 开关: `config.lua` `CFG_LINK_ENABLE`
|
- 开关: `config.lua` `CFG_LINK_ENABLE`
|
||||||
|
|
||||||
## 3 UART 链路帧协议(设计稿 v0.1)
|
## 3 UART 链路帧协议(设计稿 v0.2)
|
||||||
|
|
||||||
```
|
```
|
||||||
帧 = [HEAD 0x7D] [LEN_H] [LEN_L] [PAYLOAD...] [SUM]
|
帧 = [HEAD 0x7D] [LEN_H] [LEN_L] [PAYLOAD...] [SUM]
|
||||||
- HEAD: 0x7D(与 DBN↔Loop 的 0x7F 帧区分,4G 链路独立魔数)
|
- HEAD: 0x7D(避开 0x7F DBN↔Loop / 0x8F DBN 专有 / 0x9F OTA 已占用魔数)
|
||||||
- LEN: uint16 大端, PAYLOAD(JSON) 字节数, ≤2048
|
- LEN: uint16 大端, PAYLOAD(JSON) 字节数, ≤2048
|
||||||
- SUM: uint8 累加和(HEAD+LEN_H+LEN_L+PAYLOAD 全字节取低 8 位)
|
- SUM: uint8 累加和(HEAD+LEN_H+LEN_L+PAYLOAD 全字节取低 8 位)
|
||||||
- 双向对称
|
- 双向对称
|
||||||
```
|
```
|
||||||
|
|
||||||
- 为什么不用 0x7F 帧: 0x7F 帧 LEN 上限 56B,装不下 MQTT JSON(loop_data 数百字节)
|
### 3.1 与 DBN↔Loop 0x7F 帧的对比(2026-08-31 代码核实)
|
||||||
- 为什么 2B 长度: 覆盖 OTA 大分片、log_query 快照流(hex 128B)等长报文
|
|
||||||
- 状态机按 LEN 精确吃字节,payload 内 0x7D 不影响同步;SUM 失败/超长 → 丢帧
|
vd960DBN 与地感 MCU 的串口逻辑(loop_uart_proto.c,UART2,0x7F 帧):
|
||||||
|
|
||||||
|
```
|
||||||
|
[7F][Addr][LEN(1B)][CMD][Value: LEN-1B][XOR][SUM]
|
||||||
|
状态机: IDLE(找0x7F) → HEADER → VALUE → CHECK → COMPLETE
|
||||||
|
接收: UART2 RX DMA(uart2_dma_poll) 批量喂 lup_feed_byte()
|
||||||
|
校验: XOR+SUM,从 Addr 起(不含 magic)
|
||||||
|
```
|
||||||
|
|
||||||
|
| 对比项 | DBN↔Loop (0x7F) | Air780↔DBN (0x7D 本工程) |
|
||||||
|
|---|---|---|
|
||||||
|
| LEN 字段 | **1B**,Value 0~64B(协议明确上限) | **2B**,≤2048B |
|
||||||
|
| 魔数 | 0x7F | 0x7D |
|
||||||
|
| 校验 | XOR + SUM(从 Addr 起) | SUM(设计稿;待定稿确认是否统一 XOR+SUM) |
|
||||||
|
| 状态机 | IDLE→HEADER→VALUE→CHECK | 同构(IDLE→HEAD→LEN→DATA→CHECK) |
|
||||||
|
| 用途 | 命令-响应短帧 | JSON 报文流(loop_data 数百字节) |
|
||||||
|
|
||||||
|
- 为什么不用 0x7F 帧: LEN 1B 上限 64B,装不下 MQTT JSON
|
||||||
|
- 状态机同构 → vd960DBN 侧 UART1 通道可复用 `lup_feed_byte` 解析骨架
|
||||||
|
- 待确认: 校验是否统一为 XOR+SUM(与 0x7F 风格一致)
|
||||||
|
|
||||||
## 4 文件结构
|
## 4 文件结构
|
||||||
|
|
||||||
@@ -115,6 +147,16 @@ vd960Air/
|
|||||||
- [x] **dev_serial**: 采用与有线通道**同一序列号**(Topic 族一致,平台认同一台设备);config.lua 配置,部署时与 vd960DBN 保持一致
|
- [x] **dev_serial**: 采用与有线通道**同一序列号**(Topic 族一致,平台认同一台设备);config.lua 配置,部署时与 vd960DBN 保持一致
|
||||||
- [x] **4G 特有字段**: 上行注入 `link` 对象(IMEI/ICCID/IMSI/MSISDN/CSQ),平台按 §2.1 解析
|
- [x] **4G 特有字段**: 上行注入 `link` 对象(IMEI/ICCID/IMSI/MSISDN/CSQ),平台按 §2.1 解析
|
||||||
- [x] **协议并入主协议**: 4G 适配作为《DLD960_IoT_MQTT协议》章节,4G 特有部分(link 字段/不支持命令/4G 状态命令)单独标注
|
- [x] **协议并入主协议**: 4G 适配作为《DLD960_IoT_MQTT协议》章节,4G 特有部分(link 字段/不支持命令/4G 状态命令)单独标注
|
||||||
|
- [x] **服务器参数配置链路**: 当前由小程序 BLE 设置;vd960DBN 后续版本(列入计划)将 BLE 设置的服务器/topic 参数**同步经 UART1 下发 Air780**,Air780 存储更新配置(§2.2)
|
||||||
|
- [x] **通道切换策略(暂定)**: **默认 4G 无线**作为上报通道
|
||||||
|
|
||||||
|
### 待讨论(通道切换策略,2026-08-31 用户提出)
|
||||||
|
|
||||||
|
- **动态自动切换 vs 人工设置**: 有线通道失效时自动切 4G?还是由人工(拨码/小程序)指定通道?
|
||||||
|
- 动态自动: 需 vd960DBN 检测有线通断(MQTT/TCP 心跳超时)→ 切 4G;回切策略(有线恢复后自动回切?)
|
||||||
|
- 人工设置: 拨码/小程序固定通道,简单可控但现场需有人干预
|
||||||
|
- 影响面: vd960DBN 侧决策逻辑 + Air780 侧角色(常驻 4G 上报 vs 备用唤醒)+ 平台侧通道标识
|
||||||
|
- **待后续讨论定稿后更新本节**
|
||||||
|
|
||||||
### 待确认(等开发文档/板级验证)
|
### 待确认(等开发文档/板级验证)
|
||||||
|
|
||||||
@@ -130,9 +172,14 @@ vd960Air/
|
|||||||
|
|
||||||
| 阶段 | 内容 | 状态 |
|
| 阶段 | 内容 | 状态 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| P0 | 工程骨架 + 帧协议 + MQTT 单路桥接(本工程) | ✅ 骨架完成 |
|
| P0 | 工程骨架 + 帧协议 + MQTT 单路桥接 + link 字段注入 | ✅ 完成 |
|
||||||
| P1 | 协议适配文档(4G 章节) + vd960DBN 侧 UART1 通道 | ⏳ 待文档 |
|
| P1 | 协议适配文档(4G 章节)+ vd960DBN 侧 UART1 通道 + **配置同步下发(Air780 存储更新)** | ⏳ 待文档/待 vd960DBN 版本 |
|
||||||
| P2 | 板级联调: 帧校验、背压、掉线重连、看门狗 | ⏳ 待板 |
|
| P2 | 板级联调: 帧校验、背压、掉线重连、看门狗 | ⏳ 待板 |
|
||||||
| P3 | 4G 状态上报 + 通道切换 + 脱机日志/OTA 走 4G | ⏳ 规划 |
|
| P3 | 4G 状态上报 + 通道切换(策略待讨论)+ 脱机日志/OTA 走 4G | ⏳ 规划 |
|
||||||
|
|
||||||
|
**vd960DBN 侧开发计划(2026-08-31 用户确认列入):**
|
||||||
|
- [ ] UART1(PB6/PB7)通道: 帧收发 + JSON 组包/解析(复用 lup_feed_byte 骨架,0x7D 帧)
|
||||||
|
- [ ] BLE 设置服务器/topic 参数时(0x13/0x15 等),同步经 UART1 下发 Air780 配置
|
||||||
|
- [ ] 通道切换策略(待讨论: 动态自动 vs 人工设置;暂定默认 4G)
|
||||||
|
|
||||||
> 基底来源: 合宙官方 Air780EPM demo/mqtt(main.lua / uart_app.lua / mqtt/* / network_watchdog / netdrv_device),MIT 许可。
|
> 基底来源: 合宙官方 Air780EPM demo/mqtt(main.lua / uart_app.lua / mqtt/* / network_watchdog / netdrv_device),MIT 许可。
|
||||||
|
|||||||
Reference in New Issue
Block a user