From 1bbaac0046d1d3b340932999f3fc869e7c90172c Mon Sep 17 00:00:00 2001 From: wangfq Date: Thu, 13 Aug 2026 15:31:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(vd960DBN):=20HardFault=5FHandler=20?= =?UTF-8?q?=E6=8A=93=20RISC-V=20=E5=BC=82=E5=B8=B8=E7=8E=B0=E5=9C=BA=20?= =?UTF-8?q?=E2=80=94=20=E5=AE=9A=E4=BD=8D=E5=B4=A9=E6=BA=83=E6=BA=90?= =?UTF-8?q?=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 诊断修正(2026-08-13): RST=0x10000000(bit28 SFT) = HardFault_Handler 内 NVIC_SystemReset, 不是硬件复位! 复位紧跟 LUP 传感器帧(30ms内), 0xC0 帧处理路径触发代码异常。模拟实验 SPI 写(cnt=64/128 擦除+头写) 全部成功, SPI 写本身不触发复位, 推翻 VDD 跌落/共线假设。 - HardFault_Handler 打印 mcause(0x342)/mepc(0x341)/mtval(0x343) mcause 5/7=野指针(mtval给地址) 2=非法指令 4/6=未对齐 mepc 用 .map 文件反查函数 --- .../BLE/OnlyUpdateApp_Peripheral/APP/ch32v20x_it.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/ch32v20x_it.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/ch32v20x_it.c index 517efd3..2ec8bc9 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/ch32v20x_it.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/ch32v20x_it.c @@ -16,6 +16,7 @@ #include "ch32v20x_it.h" #include "eth_driver.h" #include "CONFIG.h" +#include "debug.h" /********************************************************************* * LOCAL FUNCTIONS @@ -47,6 +48,16 @@ void NMI_Handler(void) */ void HardFault_Handler(void) { + /* 诊断 (2026-08-13): 抓 RISC-V 异常现场, 定位 HardFault 源头 + mcause: 5=Load访问错误 7=Store访问错误 2=非法指令 4/6=未对齐 + mepc : 异常指令 PC (用 .map 文件反查函数) + mtval : 错误访问地址 (Load/Store fault 时=野指针地址) */ + uint32_t _mcause = 0, _mepc = 0, _mtval = 0; + __asm__ volatile("csrr %0, 0x342" : "=r"(_mcause)); + __asm__ volatile("csrr %0, 0x341" : "=r"(_mepc)); + __asm__ volatile("csrr %0, 0x343" : "=r"(_mtval)); + PRINT("HARDFAULT: mcause=0x%08lx mepc=0x%08lx mtval=0x%08lx\n", + (unsigned long)_mcause, (unsigned long)_mepc, (unsigned long)_mtval); NVIC_SystemReset(); while(1) {