关键流程设计
3 Mar 2025
Read time: 2 minute(s)
本节描述了 WRI 模块的关键流程设计。
Reboot Reason 的设计
WRI 模块需要和 RTC 模块的 SYS_BAK 寄存器一起配合来完成 Reboot Reason 的处理:
- WRI 负责记录硬件可监测到的 Reboot 原因,如过温保护、看门狗复位、外部输入复位等。
- SYS_BAK 负责记录软件可监测到的 Reboot 原因,如 Suspend、Panic、进入烧写模式、正常重启等。
关于 Reboot 原因,梳理分类如下:

提示:
外部 IO 复位指常用的 Reset 按键。
定义 SYS_BAK0 寄存器(4~7bit) 的值如下:(详见 include/linux/reboot-reason.h)
enum aic_reboot_reason { REBOOT_REASON_COLD = 0, REBOOT_REASON_CMD_REBOOT = 1, REBOOT_REASON_CMD_SHUTDOWN = 2, REBOOT_REASON_SUSPEND = 3, REBOOT_REASON_UPGRADE = 4, REBOOT_REASON_FASTBOOT = 5, /* Some software exception reason */ REBOOT_REASON_SW_LOCKUP = 8, REBOOT_REASON_HW_LOCKUP = 9, REBOOT_REASON_PANIC = 10, REBOOT_REASON_RAMDUMP = 11, /* Some hardware exception reason */ REBOOT_REASON_RTC = 17, REBOOT_REASON_EXTEND = 18, REBOOT_REASON_DM = 19, REBOOT_REASON_OTP = 20, REBOOT_REASON_UNDER_VOL = 21, };
针对不同场景,SYS_BAK0 寄存器中的 Reboot reason 和 WRI 中的 RST_FLAG 值对应如下:
场景 |
触发行为 |
WRI 状态 |
SYS_BAK 状态值 |
---|---|---|---|
正常重启 |
按 Reset 按键 |
EXT_RST |
COLD |
Shell 中执行 reboot 命令 |
WDOG_RST |
CMD_REBOOT |
|
Shell 执行 aicupg 命令进入烧写 |
WDOG_RST |
UPGRADE |
|
正常关机 |
长按 PowerOn 按键 |
SYS_POR |
COLD |
Shell 中执行 poweroff 命令 |
SYS_POR |
CMD_SHUTDOWN |
|
进入深度休眠状态 |
SYS_POR |
SUSPEND |
|
异常重启 |
过温保护 |
OTP |
COLD |
通过 JTAG 执行 reset 命令 |
DM_RST |
COLD |
|
RTC 模块断电 |
RTC_POR |
COLD |
|
内核中发生 SW Lock |
WDOG_RST |
SW_LOCKUP |
|
内核中发生 HW Lock |
WDOG_RST |
HW_LOCKUP |
|
内核中发生 PANIC |
WDOG_RST |
PANIC |
|
内核中触发进入 RAMDUMP |
WDOG_RST |
RAMDUMP |
|
电源电压不稳定 |
CMP_RST |
COLD |
注:
其中按 Reset 按键的情况,因为软件来不及设置 SYS_BAK,所以为初始值 0 (COLD)。