From 8e58d5fdd128932070dde3de89ef7dfa5014109f Mon Sep 17 00:00:00 2001 From: wangfq Date: Wed, 19 Aug 2026 15:13:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(vd960DBN):=20=E6=81=A2=E5=A4=8D=20factory?= =?UTF-8?q?=20=E9=85=8D=E7=BD=AE=E5=86=99=E5=85=A5=20=E2=80=94=20=E6=8D=A2?= =?UTF-8?q?=E6=96=B0=E7=A9=BA=E7=89=87=E5=90=8E=E9=85=8D=E7=BD=AE=E6=B0=B8?= =?UTF-8?q?=E4=B9=85=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 8-13 止血(SPI 写触发复位)根因已 8-17 闭环(栈溢出+printf 重入, 非 SPI 问题), offlog/snapshot 8-18 起持续 SPI 写入稳定 → 解除止血。 新空片(W25Q128)参数区无 magic + write_net_config 不写 magic → 每次上电 memory defaults, 保存配置永久丢失。恢复: mismatch 分支调 factory_dev_info() 写 magic+默认参数到 flash, 首次上电自动初始化。 --- .../OnlyUpdateApp_Peripheral/APP/cfig_flash.c | 18 +++++++----- vd960DBN/docs/devlog.md | 29 +++++++++++++++++++ 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/cfig_flash.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/cfig_flash.c index c41ab26..d08334e 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/cfig_flash.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/cfig_flash.c @@ -241,12 +241,15 @@ void load_cfg_from_flash(void) if(strncmp(mBuff, DEV_USER_FLASH_MAGIC, sizeof(DEV_USER_FLASH_MAGIC)) != 0) { free(mBuff); - /* ===== 止血 (2026-08-13): factory SPI 写触发硬件复位死循环 ===== - 现场: SPI_Flash_Write(参数区 0x00, 512B) → RST=0x00000000 硬件复位 - → magic 写不进 → 无限复位循环。SPI 写触发硬件复位实锤(与快照区无关)。 - 临时方案: 不写 Flash, 用内存默认配置继续 (恢复原逻辑删本块即可) */ - /* 2026-08-17 栈溢出修复后恢复 (栈~4.75KB) */ - PRINT("CFG: magic mismatch - MEMORY DEFAULTS (factory SPI write disabled)\n"); + /* ===== 恢复 factory 写入 (2026-08-19) ===== + 8-13 止血背景: factory SPI 写触发硬件复位死循环 — 根因已在 8-17 闭环 + (.bss 挤占 RAM → 栈溢出 + printf 重入, 非 SPI 硬件问题); + offlog/snapshot 自 8-18 起持续 SPI 写入稳定。 + 换新空片 (W25Q128) 参数区无 magic → 每次上电 memory defaults, + 且 write_net_config 保存配置不写 magic → 配置永久丢失。 + 恢复: 首次 mismatch 写出厂默认 (magic+参数) 到 flash, 后续上电正常加载。 */ + factory_dev_info(); + PRINT("CFG: magic mismatch - factory defaults written\n"); memset(g_dev_number, 0, 6); memcpy(g_dev_number, gMacAddr, 6); sprintf(g_dev_number_str, "%02X%02X%02X%02X%02X%02X", @@ -290,8 +293,7 @@ void load_cfg_from_flash(void) g_sub_code_enable.dgdus_enable = 0; g_sub_code_enable.wbdus_enable = 0; g_sub_code_enable.radar_enable = 0; - /* 2026-08-17 栈溢出修复后恢复 */ - PRINT("CFG: memory defaults OK (no factory write)\n"); + PRINT("CFG: memory defaults OK (factory written)\n"); return; } diff --git a/vd960DBN/docs/devlog.md b/vd960DBN/docs/devlog.md index 0e0ee9e..65d502e 100644 --- a/vd960DBN/docs/devlog.md +++ b/vd960DBN/docs/devlog.md @@ -4,6 +4,34 @@ > > 项目定位: DLD960 通信板 — BLE 配网、TCP JSON 协议服务、Loop MCU 串口桥接 +## 2026-08-19 — 恢复 factory 配置写入(换新空片后"老是进入出厂初始化配置") + +### 背景 + +换 W25Q128 新片后每次上电日志 `CFG: magic mismatch - MEMORY DEFAULTS (factory SPI write disabled)`,用户保存的配置不生效。 + +### 根因 + +1. **8-13 止血禁用了 factory 写入**(当时 SPI 写触发硬件复位死循环,临时方案:不写 Flash 用内存默认)——但该根因已在 8-17 闭环(.bss 挤占 RAM → 栈溢出 + printf 重入,**非 SPI 硬件问题**),offlog/snapshot 自 8-18 起持续 SPI 写入稳定,止血早该解除 +2. **新空片(W25Q128)参数区全 0xFF**,magic(PRODUCT_MODEL 字符串)不匹配 → 每次上电走内存默认 +3. **`write_net_config`/`set_ble_safe_pass` 保存配置只改字段不写 magic** → 即使保存过,下次上电 magic 仍 0xFF → 配置"永久丢失" + +### 变更(cfig_flash.c,UTF-8+CRLF) + +`load_cfg_from_flash()` mismatch 分支:删除"不写 Flash"止血,恢复调用 `factory_dev_info()`(写 magic + 默认参数 + 网络配置到参数区 0x00),打印改 `factory defaults written`。首次上电自动初始化参数区,后续上电正常加载 + 保存配置生效。 + +### 验证 + +- `check_c_balance.py` OK;`gcc -fsyntax-only` 无新错误(仅原有 unused warning) +- SPI 读写实现对 W25Q128 兼容确认:4KB 扇区擦除 + 256B 页编程分页(storage.c 标准实现),指令集与 W25Q32 相同 + +### 遗留 + +- 待板级:新片上电确认 `factory defaults written` + 二次上电不再 mismatch +- 待用户提供新芯片规格书:核对 0x90 设备 ID / JEDEC 容量码 / 指令兼容(如非华邦需重点核对) + +--- + ## 2026-08-19 — SPI Flash 识别去掉厂商代码判断(兼容多厂家同容量型号) ### 背景 @@ -1442,6 +1470,7 @@ TCP 超时要等 ~2 分钟才触发 `SINT_STAT_TIM_OUT`, | 版本 | 时间 | 说明 | |------|------|------| +| V4.6 | 2026-08-19 | 恢复 factory 配置写入: 解除 8-13 止血, 空片首启写 magic+默认参数 (换 W25Q128 后配置永久丢失修复) | | V4.5 | 2026-08-19 | SPI Flash 识别去厂商代码: W25Qxx 宏去 0XEF 前缀, ReadJEDEC_ID 删厂商校验, storage_init 低字节匹配 (兼容多厂家) | | V4.4 | 2026-08-19 | UART2 DMA 下 BLE→Loop OTA 修复: lup_feed_byte_ota 0x9F 帧解析+透传回 BLE (停等 ACK), DMA poll OTA 模式切换/溢出阈值/tick 归零, 单测 8 例 | | V4.3 | 2026-08-18 | log_query 改 hex 原始字节上报 (协议 V1.03/V1.07 修订): offlog_evt_to_hex/snap_rec_to_hex, 2 条快照 406B<800B, 快照 count 恢复 2 |