feat(vd960DBN): 快照区延后初始化(开机3s后) — 避开启动早期SPI重负载窗口 (2026-08-17)
诊断: 08-14恢复快照区后频繁重启。RSTSCKR无复位标志(非硬件复位) + BOOT_CNT恒=1(.noinit被清, RAM全丢级) + 实验A(跳过offlog_boot)仍崩 → 启动早期SPI重负载(offlog/snap init 擦+整扇区写回~80ms×2)让系统 进入临界状态, 后续SPI操作(load_cfg读参数区)成为压垮点。 方案: - snapshot.c/h: 新增 snap_delayed_init(), 主循环每轮调用, 开机3s后 首次进入执行 snap_init (非阻塞, mstick()>=3000 门控) - peripheral_main.c: main() 移除 snap_init 调用; 主循环喂狗后加 snap_delayed_init(); 撤销实验A(恢复offlog_boot)/实验B(恢复load_cfg) - 3s内传感帧由 snap_enqueue/snap_flush 的 !_ready 门控自动丢弃不落盘 - 保留 BOOT_CNT 诊断打印(.noinit 计数器+地址) - devlog 置顶 2026-08-17 条目
This commit is contained in:
@@ -4,10 +4,51 @@
|
||||
>
|
||||
> 项目定位: DLD960 通信板 — BLE 配网、TCP JSON 协议服务、Loop MCU 串口桥接
|
||||
|
||||
## 2026-08-17 — 快照区延后初始化(开机 3s 后)— 启动早期 SPI 重负载疑似触发跑飞
|
||||
|
||||
### 背景
|
||||
08-14 恢复快照区功能(8873b33)后,现场频繁"复位"(100~180ms 一轮完整启动日志)。
|
||||
Hex 日志诊断:
|
||||
|
||||
| 观察 | 推断 |
|
||||
|------|------|
|
||||
| RST_REASON 首次 0x08000000(POR),之后恒 0x00000002(无任何复位标志位) | 非硬件复位(POR/IWDG/SFT/PIN 都会置位) |
|
||||
| 无 FAULT_DIAG 输出 | 非 HardFault(fault_diag 仅在 HardFault 后打印) |
|
||||
| 每轮都到 `INIT: snap ok`,之后无任何 ASCII 直接 71B 乱码+重启 | 跑飞点在 snap_init 之后(offlog_boot/load_cfg/output_cfg 区间) |
|
||||
| 实验A(跳过 offlog_boot,commit 0c717e4):仍崩 | offlog_boot 非触发点 |
|
||||
| BOOT_CNT 恒=1(.noinit 计数器每次从 0 开始) | RAM 全丢级重启(掉电-恢复但未触发 POR) |
|
||||
|
||||
### 结论
|
||||
启动早期 SPI 重负载(offlog_init 擦+整扇区写回 ~80ms + snap_init 擦+整扇区写回 ~80ms)
|
||||
让电源/系统进入临界状态,随后的 SPI 操作(load_cfg 读参数区)成为压垮点。
|
||||
08-13"稳定 6 分钟"实为实验状态(snap_init/offlog_boot 均 #if 0),非完整固件。
|
||||
|
||||
### 方案
|
||||
快照区延后到开机 3s 后初始化:避开启动早期 SPI 重负载窗口;3s 内传感帧
|
||||
由 snap_enqueue/snap_flush 的 !_ready 门控自然丢弃(视为无效快照数据)。
|
||||
|
||||
| 文件 | 变更 |
|
||||
|------|------|
|
||||
| `snapshot.c` | 新增 `snap_delayed_init()`:主循环每轮调用,mstick()>=3000 且未初始化时执行 snap_init(非阻塞) |
|
||||
| `snapshot.h` | 声明 `snap_delayed_init()` |
|
||||
| `peripheral_main.c` | main() 移除 snap_init 调用;主循环喂狗后加 snap_delayed_init();撤销实验A(恢复 offlog_boot)/实验B(恢复 load_cfg/output_cfg);保留 BOOT_CNT 诊断打印 |
|
||||
|
||||
### 验证
|
||||
- [ ] 板级:开机 3s 内无 `INIT: snap ok`(快照区未初始化),3s 后出现
|
||||
- [ ] 板级:不再循环重启,BOOT_CNT 不再恒 1
|
||||
- [ ] 板级:断网期间快照正常落盘、BLE 0x28/0x29/0x2A 查询正常
|
||||
- [ ] 若仍循环:示波器抓 VDD(SPI 擦写瞬间跌落)+ 实验B 二分 load_cfg/output_cfg
|
||||
|
||||
### 遗留
|
||||
- BOOT_CNT 打印保留(确认 .noinit 段生效 + 区分复位 vs 跑飞重启)
|
||||
- 快照区延后 3s 期间(0~3s)传感数据不落盘(按需求接受)
|
||||
- 电源裕量问题若确认:W25Q32 VCC 加 100nF+10uF 电容、SPI 走线远离电源
|
||||
|
||||
---
|
||||
|
||||
## 2026-08-14 — 快照区功能恢复启用 + UART2 波特率澄清
|
||||
|
||||
|
||||
### 背景
|
||||
printf 重入复位问题已确诊修复(2026-08-13,SPI 写无罪)。实验遗留的隔离代码收尾:快照区恢复启用、模拟写密度的 `sim_snap_spi` 实验桩移除。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user