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:
wangfq
2026-08-12 13:51:32 +08:00
parent 070db9f383
commit ef3316f2b3
3 changed files with 258 additions and 3 deletions
+11 -3
View File
@@ -1,6 +1,6 @@
# DLD960 BLE 通信协议(脱机事件日志)
> 版本: V1.002026-08-10,脱机日志部分
> 版本: V1.012026-08-12,分包上限改为随协商 MTU 动态
> 适用: vd960DBNCH32V208WCH 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 |
| 185iOS 常见) | 94 | 100 |
脱机日志 QUERY 响应最大 130BMTU=96 时 2 包(87+43 dat);MTU≥103 时 2 包(94+36 dat)。
> 分包发送由 `performPeriodicTask`50ms TMOS 周期)主动续传,两包间隔 ≤50ms,不依赖收包事件(2026-08-12 修复)。
---