Files
vd_960/CHANGELOG.md
T
wangfq d4ce0ba23a chore(vd960DBN): 固件版本 1.02.03 → 1.02.04 (SPI 存储适配)
内容: SPI Flash 识别去厂商代码 + 恢复 factory 配置写入 (板级验证通过)。
README/CHANGELOG/devlog 同步; 手册/规格书配套版本更新 (文档保持 V1.02, 同日补充不升版)
2026-08-19 15:23:35 +08:00

173 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CHANGELOG — vd_960 (DLD960)
本文件记录 DLD960 整机(双 MCU 配套)的版本发布历史。
单侧固件的细粒度演进见 `vd960Loop/docs/devlog.md``vd960DBN/docs/devlog.md`
---
## vd960DBN V1.02.04 — 2026-08-19DBN 通信板单侧更新)
> 本次为 **vd960DBN 单侧发布**(Loop 固件未变,协议未变更,可正常配套)。
**配套版本矩阵**
| 组件 | 版本 |
|------|------|
| vd960DBN 固件 (CH32V208, DLD960GA) | **1.02.04** |
| vd960Loop 固件 (AT32F421) | 1.0(不变) |
| DLD960Loop 串口协议(0x7F / 0x9F OTA | V1.05(不变) |
| DLD960 TCP JSON 协议(:5960 | V1.03(不变) |
| DLD960 IoT MQTT 协议 | V1.07(不变) |
| DLD960 BLE 协议 | V1.02(不变) |
### 🔧 SPI Flash 存储适配修复
- **识别去厂商代码**`W25Qxx` 宏去 `0XEF` 前缀、`SPI_Flash_ReadJEDEC_ID()` 删厂商校验、`storage_init` 低字节匹配——兼容其他厂家同容量型号(如 0x1A 厂商)
- **恢复 factory 配置写入**:解除 2026-08-13 止血(根因 8-17 已闭环),换新空片(W25Q128)后不再每次上电进出厂初始化,配置读写恢复正常
- **板级验证通过**2026-08-19):W25Q128 配置读写正常
---
## vd960DBN V1.02.03 — 2026-08-19DBN 通信板单侧更新)
> 本次为 **vd960DBN 单侧发布**(Loop 固件未变,协议未变更,可正常配套)。
**配套版本矩阵**
| 组件 | 版本 |
|------|------|
| vd960DBN 固件 (CH32V208, DLD960GA) | **1.02.03** |
| vd960Loop 固件 (AT32F421) | 1.0(不变) |
| DLD960Loop 串口协议(MCU 间 0x7F / 0x9F OTA | V1.05(不变) |
| DLD960 TCP JSON 协议(:5960 | V1.03(不变) |
| DLD960 IoT MQTT 协议 | V1.07(不变) |
| DLD960 BLE 协议 | V1.02(不变) |
### 🔧 BLE→Loop OTA 升级修复(0x9F 帧透传回 BLE)
- **现象**UART2 RX DMA 改造后,通过 BLE 给地感(Loop MCUOTA 升级失效
- **根因**DMA poll 帧解析 `lup_feed_byte()` 只认 0x7FLoop bootloader 回的 0x9F 响应帧(pre_ok/addr_ok/data ACK)全部被吞;OTA 为**停等协议**0xA7 WITH_BACK 每块必回 ACK),工具等不到 ACK 升级卡死
- **修复**:新增 `lup_feed_byte_ota()` 0x9F 帧状态机(SUM 校验无 XOR);`uart2_dma_poll``g_flag_counter_ota.flag` 切换 0x9F/0x7F 解析器;`uart_srv` OTA 分支 0x9F 帧透传回 BLE + 清 flagOTA 溢出阈值放宽 + 收帧 tick 归零
- **验证**:gcc 隔离单测 8 断言全过;**板级 BLE OTA 全流程实测通过**2026-08-19
- **已知约束**:OTA 模式无自动退出机制(`g_flag_counter_ota.flag` 置 1 后需断电重启恢复 0x7F 通信),维持现状
### 📦 脱机日志快照流 + hex 上报(2026-08-18 已含,协议 V1.03/V1.07
- TCP/MQTT `log_*` 命令支持 `stream=snapshot` 传感快照流(复用命令 + stream 字段,不新增命令码)
- `log_query` records 改 **hex 原始字节**上报(OfflogEvt 32B→64 hex / SnapRec 64B→128 hex2 条快照 406B < 800B 缓冲)
- MQTT 查询命令补齐:`ssc_net_query` / `iot_net_query` / `iot_topic_query`(协议命令表全对齐)
---
## vd960DBN V1.02.01 — 2026-08-17DBN 通信板单侧更新)
> 本次为 **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 fail1-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(全工程唯一,无冲突)
### 验证
- ✅ 板级:无异常重启;MQTT159.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(检测 MCUAT32F421
**检测算法**(自 DLD154V4B 移植并四通道化,针对 M4 优化)
- 主循环 tick 50ms → **10ms**,单路 IIRALFA_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(通信 MCUCH32V208
**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=576Publish≤500B
- loop_data 陈旧快照修复:0xC0 帧双消费路径统一摄取,事件与缓存同源
- **脱机事件日志(W25Q32 环形 8064 条,V1.06 新增)**log_stat / log_query / log_clear 三命令;BOOT 复位原因、MQTT 连接/断开、event ACK 超时、线圈事件、时钟锚点共 10 类;掉电不丢
**基础设施**
- BLE 小程序配置 + OTALoop MCU ISP 串口透传升级
- WCHNET TCP/IPlisten=N / data=N+1)、simple_json 解析器 6 项 bug 修复
### 文档与工具
- 四份协议文档 + 硬件资源文档齐套(见 README 协议矩阵)
- DBNetClientTCP JSON 测试)、DBNMQTToolMQTT 双主题测试)
- 双 MCU devlog、验收标准、variation 分析报告、现场事故归档
### 已知约束
- 设备无 RTC,时钟同步依赖平台下发(校准前 ts 为上电秒数)
- CH32V208 栈资源紧张:2KB 任务栈内勿连续 PRINT,勿随意扩大全局 BSS
---
## 版本号规则
- 整机发布 tag`vX.Y.Z`(本仓库 git tag + Gitea Release
- 固件版本:两侧 `cmcng.h``FIRMWARE_VER`,随整机版本同步
- 协议文档版本:各文档内修订记录表独立演进,发布时在配套矩阵中锁定