- CHANGELOG: 新增 vd960DBN V1.02.01 条目 (DBN 单侧更新, 配套矩阵/变更/约束/验证) - README: 当前发布 vd960DBN V1.02.01; 子项目版本表 1.0 → 1.02.01
6.5 KiB
6.5 KiB
CHANGELOG — vd_960 (DLD960)
本文件记录 DLD960 整机(双 MCU 配套)的版本发布历史。
单侧固件的细粒度演进见 vd960Loop/docs/devlog.md 与 vd960DBN/docs/devlog.md。
vd960DBN V1.02.01 — 2026-08-17(DBN 通信板单侧更新)
本次为 vd960DBN 单侧发布(Loop 固件未变,协议均未变更,可正常配套)。
配套版本矩阵
| 组件 | 版本 |
|---|---|
| vd960DBN 固件 (CH32V208, DLD960GA) | 1.02.01 |
| vd960Loop 固件 (AT32F421) | 1.0(不变) |
| DLD960Loop 串口协议(MCU 间 0x7F) | V1.05(不变) |
| DLD960 TCP JSON 协议(:5960) | V1.02(不变) |
| DLD960 IoT MQTT 协议 | V1.06(不变) |
| DLD960 BLE 协议 | V1.02(不变) |
🔴 P0 稳定性修复:频繁"复位"根因闭环(栈溢出)
- 现象:恢复快照区功能后设备 100~180ms 一轮"复位"循环(RSTSCKR 无复位标志 = PC 跑飞,非硬件复位)
- 根因:
.bss ≈ 41.7KB挤占 RAM → 栈仅 ~1.9KB →load_cfg/output_cfg的 printf 栈峰值触顶 → 覆盖返回地址 → PC 跑飞跳回 0 重启 - 修复:
- RAM 瘦身两轮:ETH_MAX_PACKET_SIZE 1520→768、RECE_BUF_LEN 1400→1024、ARP 表 50→16、MQTT 发送缓冲 1024→800、loop_data payload 1400→800 → 栈 1.9KB → 6.3KB
- load_cfg 字符串 0 终止保险(防 Flash 配置字符串 %s 越界打印)
- 快照区初始化延后至开机 3s(避开启动早期 SPI 重负载窗口,非根因但减压)
🟢 可靠性:UART2 RX DMA 循环接收
- 根治遗留问题"PRINT 关中断(~7.4ms)期间 UART2 丢字节 → checksum fail(1-3 分钟一次)"
- DMA1_Ch6 循环模式硬件收字节(不依赖 CPU 中断),主循环轮询消费;512B 环形缓冲 + 溢出保护
- 帧解析状态机移入主循环,消除中断竞争
🟢 资源与代码卫生
- .bss 46KB → 41.7KB;中断路径大数组 static 化(栈峰值 -1.8KB)
- 调试代码结案清理:移除 BOOT_CNT 诊断打印、_dbg_cnt 心跳打印;保留 fault_diag 基础设施(未来疑难杂症复用)
📋 其他
- 固件版本三段式:
FIRMWARE_VER="1.02.01"(MAIN=1 SUB=2 SUBSUB=1)
已知约束
- 设备无 RTC,时钟同步依赖平台下发(校准前 ts 为上电秒数)
- BLE 上报版本为 MAIN/SUB 两字节(1.02),SUBSUB 仅字符串上报(MQTT/TCP JSON)
- 快照区延后 3s 初始化:开机 3s 内传感数据不落盘(设计接受)
- UART2 RX DMA 占用 DMA1_Ch6(全工程唯一,无冲突)
验证
- ✅ 板级:无异常重启;MQTT(159.75.137.141:1883)、BLE 广播、配置加载正常
- 待回归:UART2 DMA 长时间运行(checksum fail 消失)、TCP JSON 命令交互、快照 BLE 0x28/0x29/0x2A 查询
V1.0.0 — 2026-07-16(首个正式发布)
配套版本矩阵
| 组件 | 版本 |
|---|---|
| vd960Loop 固件 (AT32F421) | 1.0 |
| vd960DBN 固件 (CH32V208, DLD960GA) | 1.0 |
| DLD960Loop 串口协议(MCU 间 0x7F) | V1.05 |
| DLD960 串口通信协议(TTL) | V1.01 |
| DLD960 TCP JSON 协议(:5960) | V1.02 |
| DLD960 IoT MQTT 协议 | V1.06 |
⚠ 自协议 V1.05 起,Loop 固件与 DBN 固件必须同版本配套刷写,禁止混跑(variation 字段宽度变更导致帧格式不兼容)。
vd960Loop(检测 MCU,AT32F421)
检测算法(自 DLD154V4B 移植并四通道化,针对 M4 优化)
- 主循环 tick 50ms → 10ms,单路 IIR(ALFA_CAP1=79,τ≈32ms,较 8051 时代快 5 倍)
- 斜率限幅 MAX_SLOPE_RATE=5%(含低基值 floor=100 防锁死)
- 进入确认 ENTRY_CONFIRM=3(连续 3 次低于阈值才判有车,抗尖峰误触发)
- 基线冻结超时 10s + ±2% 稳定性检查:温漂/换线圈可自适应,慢速进车不误吸收
- 稳定期(上电 128 样本)旁路 IIR/限幅,窗口 100 快速收敛;常态基线窗口 500(5s 更新,噪声抑制 22×)
- 每通道可配置 hold_time(有限存在)与 relay_delay(继电器延时);有限存在超时执行全通道重启重建基线
串口上报(0x7F 协议,UART @192000)
- 0xC0 传感数据主动上报:频率、variation(3B 有符号,
Origin − CAPVD,V1.05)、车状态 - 时间量(通过时间/车间距)统一 50ms 单位;上电 3 秒抑制主动上报
- 继电器输出次数上报;0x4A 版本查询(CAPVD→实际频率 uint64 精确换算)
vd960DBN(通信 MCU,CH32V208)
TCP JSON 服务(:5960,协议 V1.02)
- 密码鉴权 + 18 条命令(新增脱机日志 log_stat/log_query/log_clear)
- 鉴权状态机 + 15 条命令;服务异常自动重启(3 条件 + 3 次限额 + 10min 冷却)
- event_report 客户端必答:5s 超时重发同 msg_id/原始 ts ×3
IoT MQTT(协议 V1.06)
- 双主题
dld960/{sn}/srv+dld960/{sn}/dev,消息类型由cmd区分 - 上电 initialize 上线消息(dev_serial/model/hard_ver/soft_ver)
- loop_data 三档调度:空闲按配置间隔 / 活动 300ms / car_state 翻转沿立即上报
- event_report 平台必答 + 16 深环形队列,ACK 后出队;不受 report_config.enable 门控
- 设备时钟同步方案B:平台经 report_config 下发 Unix ts,设备无 RTC 也能上报真实时间
- 稳定性修复:mqtt_publish 缓冲溢出发垃圾包致 broker RST 风暴(现场 P0)、packet_id=0 断连、PINGREQ 保活、分批发送(MSS=576,Publish≤500B)
- loop_data 陈旧快照修复:0xC0 帧双消费路径统一摄取,事件与缓存同源
- 脱机事件日志(W25Q32 环形 8064 条,V1.06 新增):log_stat / log_query / log_clear 三命令;BOOT 复位原因、MQTT 连接/断开、event ACK 超时、线圈事件、时钟锚点共 10 类;掉电不丢
基础设施
- BLE 小程序配置 + OTA;Loop MCU ISP 串口透传升级
- WCHNET TCP/IP(listen=N / data=N+1)、simple_json 解析器 6 项 bug 修复
文档与工具
- 四份协议文档 + 硬件资源文档齐套(见 README 协议矩阵)
- DBNetClient(TCP JSON 测试)、DBNMQTTool(MQTT 双主题测试)
- 双 MCU devlog、验收标准、variation 分析报告、现场事故归档
已知约束
- 设备无 RTC,时钟同步依赖平台下发(校准前 ts 为上电秒数)
- CH32V208 栈资源紧张:2KB 任务栈内勿连续 PRINT,勿随意扩大全局 BSS
版本号规则
- 整机发布 tag:
vX.Y.Z(本仓库 git tag + Gitea Release) - 固件版本:两侧
cmcng.h的FIRMWARE_VER,随整机版本同步 - 协议文档版本:各文档内修订记录表独立演进,发布时在配套矩阵中锁定