From f76653060946dca341bb1c9cd0f9ae7c0816d9be Mon Sep 17 00:00:00 2001 From: wangfq Date: Wed, 12 Aug 2026 19:34:55 +0800 Subject: [PATCH] =?UTF-8?q?test(vd960DBN):=20=E8=B7=B3=E8=BF=87=20snap=5Fi?= =?UTF-8?q?nit=20=E5=AE=9E=E9=AA=8C=20=E2=80=94=20SPI=20=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E8=BF=98=E5=8E=9F=E6=97=A7=E5=9B=BA=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 回答'为什么旧固件正常': 旧固件也有 offlog_boot 32B 写, 理论上也踩同样硬件问题 差异: 新固件启动早期 SPI 密度翻倍(snap_init 读+擦+写头) + 快照区首擦 实验: #if 0 snap_init → SPI 序列=旧固件 稳定 → 快照 SPI 触发; 崩 → offlog_boot 本身, 旧固件也该崩(硬件一直有问题) --- .../BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c | 7 +++++++ vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/storage.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c index b7b0179..dac2a87 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/peripheral_main.c @@ -319,8 +319,15 @@ int main(void) PRINT("INIT: storage ok\n"); offlog_init(); PRINT("INIT: offlog ok\n"); + /* ===== 实验: 跳过 snap_init (2026-08-12) ===== + 目的: SPI 序列还原为旧固件(无快照SPI), 区分触发源 + 稳定 → 快照SPI(读/擦/写头)触发; 崩 → offlog_boot本身(旧固件也该崩) */ +#if 0 snap_init(); PRINT("INIT: snap ok\n"); +#else + PRINT("INIT: snap skipped (offlog-only SPI seq)\n"); +#endif /* 复位原因: 必须在初始化后立即读 (离复位时刻最近), 并清除标志, 保证下次上电只反映本次复位原因 (RCC_RSTSCKR, STM32F1/CH32V20x 兼容) */ diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/storage.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/storage.c index 7c47697..8038b6c 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/storage.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/storage.c @@ -114,7 +114,7 @@ void SPI_Flash_Init(void) SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; - SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; + SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure);