fix(vd960DBN): 复位原因位定义错位修正 — RST_REASON=0x08000000=PORRSTF
现场: RST_REASON 打印 0x08000000, 对照 WCH ch32v20x.h 发现 offlog.h 位定义整体错位 (IWDG=bit31❌实为bit29, SFT=bit24❌实为bit28, POR=bit25❌实为bit27, LPWR=bit29❌实为bit31) 结论: 0x08000000=PORRSTF=上电/掉电复位 → 电源跌落方向 (SPI擦除电流脉冲?) 修正: - offlog.h 位定义对齐 WCH 库, 新增 OFFLOG_RST_RMVF=bit24 - peripheral_main.c RMVF 清除改 bit24 (原写 bit27=PORRSTF 只读位, 复位标志从未清除, 历史累积污染诊断) - 协议文档 boot 事件位解析同步 测试回归全过
This commit is contained in:
@@ -124,13 +124,15 @@ enum {
|
||||
#define OFFLOG_RCC_BASE 0x40021000UL
|
||||
#define OFFLOG_RCC_RSTSCKR (*(volatile uint32_t *)(OFFLOG_RCC_BASE + 0x24UL))
|
||||
|
||||
/* 复位原因位 (RCC_RSTSCKR, STM32F1/CH32V20x 兼容布局, 待板上验证) */
|
||||
#define OFFLOG_RST_IWDG (1UL << 31) /* 独立看门狗复位 (IWDG 超时 → 主循环卡死!) */
|
||||
/* 复位原因位 (RCC_RSTSCKR, CH32V20x 布局 — 2026-08-12 对照 WCH ch32v20x.h 修正,
|
||||
原定义错位: IWDG/SFT/POR 位置全错, 且 RMVF 清标志写错位导致标志从未清除) */
|
||||
#define OFFLOG_RST_LPWR (1UL << 31) /* 低功耗复位 */
|
||||
#define OFFLOG_RST_WWDG (1UL << 30) /* 窗口看门狗复位 */
|
||||
#define OFFLOG_RST_LPWR (1UL << 29) /* 低功耗复位 */
|
||||
#define OFFLOG_RST_IWDG (1UL << 29) /* 独立看门狗复位 (IWDG 超时 → 主循环卡死!) */
|
||||
#define OFFLOG_RST_SFT (1UL << 28) /* 软件复位 NVIC_SystemReset */
|
||||
#define OFFLOG_RST_POR (1UL << 27) /* 上电/掉电复位 (真断电!) */
|
||||
#define OFFLOG_RST_PIN (1UL << 26) /* NRST 引脚复位 */
|
||||
#define OFFLOG_RST_POR (1UL << 25) /* 上电/掉电复位 (真断电!) */
|
||||
#define OFFLOG_RST_SFT (1UL << 24) /* 软件复位 NVIC_SystemReset */
|
||||
#define OFFLOG_RST_RMVF (1UL << 24) /* 清除复位标志 (写 1 清全部, WCH: RCC_RMVF) */
|
||||
|
||||
/*===========================================================================
|
||||
* API
|
||||
|
||||
@@ -319,7 +319,7 @@ int main(void)
|
||||
{
|
||||
uint32_t rcc_rst = OFFLOG_RCC_RSTSCKR;
|
||||
offlog_boot(rcc_rst);
|
||||
OFFLOG_RCC_RSTSCKR |= (1UL << 27); /* RMVF: 清复位标志 */
|
||||
OFFLOG_RCC_RSTSCKR |= OFFLOG_RST_RMVF; /* RMVF (bit24): 清复位标志 (原写 bit27=PORRSTF 无效) */
|
||||
}
|
||||
|
||||
load_cfg_from_flash();
|
||||
|
||||
Reference in New Issue
Block a user