本帖最后由 hongda 于 2024-7-31 14:29 编辑
死机原因与如何查看死机离线死机日志查看方法。使用场景整机,想看看用户有没有死机过。可以在手表的/user/exc目录下看看有没有死机文件exc_info.bin死机文件解析死机日志都会存在 /user/exc/目录下
双击env_start.bat在这里执行
执行tools/tools、dump_parser_v1.5/下的run.bat
python run.bat /user/exc/exc_info.bin 可以通过查看ssb里面的reboot重启原因,可以作为没有死机文件场景下的辅助定位手段。查看重启日志
SSB|System Boot Abnoraml, hard fault crash SSB|System Reboot cause:0x2004, total reboot count:1, exception reboot count:1
比如这里的cause为0x2004,那么对应的重启原因就是A核的异常导致。 对应的枚举就是REBOOT_CAUSE_APPLICATION_HARDFAULT = 0x2004
typedef enum {
REBOOT_CAUSE_UNKNOWN = 0x0000, // !< Used as a default for the reboot_reset_reason variable
REBOOT_CAUSE_BT_RESET_UNKNOWN = 0x8000, // !< REBOOT_CAUSE_BT_RESET_UNKNOWN
REBOOT_CAUSE_BT_SYSRESETREQ = 0x8001,
REBOOT_CAUSE_BT_WATCHDOG = 0x8002,
REBOOT_CAUSE_BT_STANDARD_CHIP_WATCHDOG = 0x8004,
REBOOT_CAUSE_BT_UPDATER_CHIP_WATCHDOG = 0x8005,
REBOOT_CAUSE_BT_RPC_TIMEOUT = 0x8006,
REBOOT_CAUSE_BT_HARDFAULT = 0x8007,
REBOOT_CAUSE_BT_NNMIFAULT = 0x8008,
REBOOT_CAUSE_BT_UNKNOWN_ISR = 0x8009,
REBOOT_CAUSE_BT_PANIC = 0x800a,
REBOOT_CAUSE_BT_STD_WDT_FRST = 0x800b, /* force reboot */
REBOOT_CAUSE_BT_STD_CHIP_WDT_FRST = 0x800c, /* force reboot */
REBOOT_CAUSE_BT_XIP_HARDFAULT = 0x800d,
REBOOT_CAUSE_BT_SSB_EXCEPTION_REBOOT = 0x800e,
REBOOT_CAUSE_BT_BUCK1_PROTECT_FRST = 0x8010, /* buck1 protect */
REBOOT_CAUSE_BT_BUCK2_PROTECT_FRST = 0x8020, /* buck2 protect */
REBOOT_CAUSE_BT_MONITOR_REBOOT_REQ = 0x8100, // !< Start of custom reset reasons
REBOOT_CAUSE_BT_REGIONS_UPDATED = 0x8101,
REBOOT_CAUSE_BT_FOTA_UPGRADE = 0x8102,
REBOOT_CAUSE_BT_END = REBOOT_CAUSE_BT_FOTA_UPGRADE + 1,
REBOOT_CAUSE_GNSS_GLOBAL = 0x7000,
REBOOT_CAUSE_GNSS_NMI = 0x7001, // !< watchdog is nmi interrupt
REBOOT_CAUSE_GNSS_HARDFAULT = 0x7002,
REBOOT_CAUSE_GNSS_PANIC = 0x7003,
REBOOT_CAUSE_GNSS_END = REBOOT_CAUSE_GNSS_PANIC + 1,
REBOOT_CAUSE_PROTOCOL_GLOBAL = 0x4000,
REBOOT_CAUSE_PROTOCOL_SYSRESETREQ = 0x4001,
REBOOT_CAUSE_PROTOCOL_WATCHDOG = 0x4002,
REBOOT_CAUSE_PROTOCOL_AXI_LOCK = 0x4003,
REBOOT_CAUSE_PROTOCOL_AXI_LOCK_TO_BT = 0x4004,
REBOOT_CAUSE_PROTOCOL_WDT_FRST = 0x4005, /* force reboot */
REBOOT_CAUSE_PROTOCOL1_WATCHDOG = 0x4006,
REBOOT_CAUSE_PROTOCOL_ADDR_MON = 0x4007,
REBOOT_CAUSE_PROTOCOL1_ADDR_MON = 0x4008,
REBOOT_CAUSE_PROTOCOL_RPC_TIMEOUT = 0x4100, // !< Start of custom reset reasons
REBOOT_CAUSE_PROTOCOL_END = REBOOT_CAUSE_PROTOCOL_RPC_TIMEOUT + 1,
REBOOT_CAUSE_APPLICATION_GLOBAL = 0x2000,
REBOOT_CAUSE_APPLICATION_SYSRESETREQ = 0x2001,
REBOOT_CAUSE_APPLICATION_WATCHDOG = 0x2002,
REBOOT_CAUSE_APPLICATION_PANIC = 0x2003,
REBOOT_CAUSE_APPLICATION_HARDFAULT = 0x2004,
REBOOT_CAUSE_APPLICATION_NNMIFAULT = 0x2005,
REBOOT_CAUSE_APPLICATION_UNKNOWN_ISR = 0x2006,
REBOOT_CAUSE_APPLICATION_WDT_FRST = 0x2007, /* force reboot */
REBOOT_CAUSE_APPLICATION_CHIP_WDT = 0x2008,
REBOOT_CAUSE_APPLICATION_XIP_CTRL = 0x2009,
REBOOT_CAUSE_APPLICATION_XIP_CACHE = 0x200a,
REBOOT_CAUSE_APPLICATION_MDMA = 0x200b,
REBOOT_CAUSE_APPLICATION_SMDMA = 0x200c,
REBOOT_CAUSE_APPLICATION_STD_CHIP_WDT_FRST = 0x200d,
REBOOT_CAUSE_APPLICATION_STD_BT_WDT_FRST = 0x200e,
REBOOT_CAUSE_APPLICATION_STD_ULP_WDT_FRST = 0x200f,
REBOOT_CAUSE_UPG_COMPLETION = 0x2040, // !< Start of custom reset reasons
REBOOT_CAUSE_MON_MEM_ALMOST_EMPTY = 0x2041,
REBOOT_CAUSE_APPLICATION_RPC_TIMEOUT = 0x2100, // !< Start of custom reset reasons
REBOOT_CAUSE_POWER_ON = 0xF0F0,
} reboot_cause_t; 经常出现的死机都是访问了非法地址,用户可以访问的合法地址的范围如下DTCM 起始地址 长度
#define APP_DTCM_ORIGIN 0x20000000
#define APP_DTCM_LENGTH 0x70000
L2RAM 起始地址 长度
#define L2RAM_OFFSET 0x60240000
#define L2RAM_FOR_APP_START L2RAM_OFFSET
#define L2RAM_FOR_APP_LENGTH 0x160000 /* 640K *
PSRAM 起始地址和长度
#define PSRAM_BASE_ADDR 0x6C000000
#define PSRAM_LENTH 0x1000000
Mcause的表单,用于查找死机原因
见附件 RISCV死机相关的寄存器
0x341 mepc Exception program counter 0x342 macause Cause of trap 0x343 mtval Bad address or instruct
|