docs(vd960DBN): BLE 日志查询交互过程文档 + 协议 V1.01 动态分包 + 周期心跳
- 新增 docs/DLD960_BLE日志查询交互.md: 0x25/0x26/0x27 完整交互示例 (真实日志逐字节解析, 分包规则, 第二分包未发问题记录) - DLD960_BLE协议.md V1.01: 分包上限改为随协商 MTU 动态 (min(MTU-9,94)) - peripheral.c: performPeriodicTask 加 500ms 心跳打印 (确认 TMOS 周期存活 + resp 队列状态, 定位第二分包为何不续传)
This commit is contained in:
+11
-3
@@ -1,6 +1,6 @@
|
||||
# DLD960 BLE 通信协议(脱机事件日志)
|
||||
|
||||
> 版本: V1.00(2026-08-10,脱机日志部分)
|
||||
> 版本: V1.01(2026-08-12,分包上限改为随协商 MTU 动态)
|
||||
> 适用: vd960DBN(CH32V208,WCH BLE 协议栈)
|
||||
> 用途: 小程序/APP 经蓝牙读取设备本地 W25Q32 环形事件日志(离线取证:区分设备真复位 vs MQTT 断连重连)
|
||||
|
||||
@@ -22,9 +22,17 @@ Magic | Header | Data | CheckByte
|
||||
|
||||
### 分包(长响应)
|
||||
|
||||
响应数据单包上限 **96B**(BLE_BUFF_MAX_LEN=100 − 4)。超过则分包,header 字节 = `(pkg_amount << 4) | pkg_seq`,`pkg_seq` 从 1 递增;收端按 `pkg_amount`/`pkg_seq` 重组,最后一片 `pkg_amount == pkg_seq`。
|
||||
响应单包数据上限**随协商 MTU 动态变化**(V1.01,修复"Too large noti 丢包"):`chunk = min(peripheralMTU - 9, 94)`(整包 = 帧头4 + dat + ckb2,须 ≤ MTU-3 且 ≤ 本地缓冲 100B)。分包时 header 字节 = `(pkg_amount << 4) | pkg_seq`,`pkg_seq` 从 1 递增;收端按 `pkg_amount`/`pkg_seq` 重组,最后一片 `pkg_amount == pkg_seq`。
|
||||
|
||||
脱机日志 QUERY 响应最大 130B → 2 包(96 + 34)。
|
||||
| 协商 MTU | 单包最大 dat | 整包最大长度 |
|
||||
|---------|-------------|-------------|
|
||||
| 23(未协商) | 14 | 20 |
|
||||
| 96(常见 Android) | 87 | 93 |
|
||||
| 185(iOS 常见) | 94 | 100 |
|
||||
|
||||
脱机日志 QUERY 响应最大 130B:MTU=96 时 2 包(87+43 dat);MTU≥103 时 2 包(94+36 dat)。
|
||||
|
||||
> 分包发送由 `performPeriodicTask`(50ms TMOS 周期)主动续传,两包间隔 ≤50ms,不依赖收包事件(2026-08-12 修复)。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user