fix(vd960DBN): 恢复 factory 配置写入 — 换新空片后配置永久丢失
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, 首次上电自动初始化。
This commit is contained in:
@@ -241,12 +241,15 @@ void load_cfg_from_flash(void)
|
|||||||
if(strncmp(mBuff, DEV_USER_FLASH_MAGIC, sizeof(DEV_USER_FLASH_MAGIC)) != 0)
|
if(strncmp(mBuff, DEV_USER_FLASH_MAGIC, sizeof(DEV_USER_FLASH_MAGIC)) != 0)
|
||||||
{
|
{
|
||||||
free(mBuff);
|
free(mBuff);
|
||||||
/* ===== 止血 (2026-08-13): factory SPI 写触发硬件复位死循环 =====
|
/* ===== 恢复 factory 写入 (2026-08-19) =====
|
||||||
现场: SPI_Flash_Write(参数区 0x00, 512B) → RST=0x00000000 硬件复位
|
8-13 止血背景: factory SPI 写触发硬件复位死循环 — 根因已在 8-17 闭环
|
||||||
→ magic 写不进 → 无限复位循环。SPI 写触发硬件复位实锤(与快照区无关)。
|
(.bss 挤占 RAM → 栈溢出 + printf 重入, 非 SPI 硬件问题);
|
||||||
临时方案: 不写 Flash, 用内存默认配置继续 (恢复原逻辑删本块即可) */
|
offlog/snapshot 自 8-18 起持续 SPI 写入稳定。
|
||||||
/* 2026-08-17 栈溢出修复后恢复 (栈~4.75KB) */
|
换新空片 (W25Q128) 参数区无 magic → 每次上电 memory defaults,
|
||||||
PRINT("CFG: magic mismatch - MEMORY DEFAULTS (factory SPI write disabled)\n");
|
且 write_net_config 保存配置不写 magic → 配置永久丢失。
|
||||||
|
恢复: 首次 mismatch 写出厂默认 (magic+参数) 到 flash, 后续上电正常加载。 */
|
||||||
|
factory_dev_info();
|
||||||
|
PRINT("CFG: magic mismatch - factory defaults written\n");
|
||||||
memset(g_dev_number, 0, 6);
|
memset(g_dev_number, 0, 6);
|
||||||
memcpy(g_dev_number, gMacAddr, 6);
|
memcpy(g_dev_number, gMacAddr, 6);
|
||||||
sprintf(g_dev_number_str, "%02X%02X%02X%02X%02X%02X",
|
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.dgdus_enable = 0;
|
||||||
g_sub_code_enable.wbdus_enable = 0;
|
g_sub_code_enable.wbdus_enable = 0;
|
||||||
g_sub_code_enable.radar_enable = 0;
|
g_sub_code_enable.radar_enable = 0;
|
||||||
/* 2026-08-17 栈溢出修复后恢复 */
|
PRINT("CFG: memory defaults OK (factory written)\n");
|
||||||
PRINT("CFG: memory defaults OK (no factory write)\n");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,34 @@
|
|||||||
>
|
>
|
||||||
> 项目定位: DLD960 通信板 — BLE 配网、TCP JSON 协议服务、Loop MCU 串口桥接
|
> 项目定位: 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 识别去掉厂商代码判断(兼容多厂家同容量型号)
|
## 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.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.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 |
|
| 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 |
|
||||||
|
|||||||
Reference in New Issue
Block a user