Infineon TC297 reset 内容整理
SCU、RCU、SMU
System Control Unit (SCU)
Reset Control Unit (RCU)
Safety Management Unit (SMU)
程序复位原因
读取RCU的寄存器RSTSTAT(Reset Status Register), 根据寄存器的值确认产生Reset的原因
例如,我们读到了寄存器的bit3-SMU为1,SMU为1既The last reset was requested by this reset trigger。
进一步查询复位原因
需要关注的几个寄存器
AG0-AG6 : Alarm Group 0 Status - Alarm Group 6 Status
AGnCFx (n=0-6, x=0-2) : Alarm configuration
需要关注的概念
Alarm Signals :Alarm Signals分为group0到group6共7个组,每个组的bit为31-0共32bits, 每个bit对应一个Alarm Signals。
每个Alarm Signals的配置寄存器有0、1、2三个,既AGnCFx (n=0-6, x=0-2)中的x,一共有n组,n=0-6.
每个Alarm Signals有对应的Alarm Action Configuration Codes,
Code = SMU_AG<n>CF2. SMU_AG<n>CF1. SMU_AG<n>CF0, n=0...6。
能直接引起reset的有0x5(SMU_NMI)和 0x6(SMU_RESET).
引起SMU是复位源的原因
这众多Alarm Signals中,哪些或者哪个Signals才是引起reset的原因,首先检查AGnCFx的配置,看一看哪些Alarm Signals的code被配置为0x5或0x6的值。
根据SMU寄存器的基地址及寄存器地址偏移,确定AGnCFx的位置,如下图
AG2CF2 - AG2CF1 - AG2CF0 —> 0x20000000 - 0x20000000 - 0x00000000
即Group2 的bit29对应的Alarm Signals的code 为 110,即0x6
group2的bit9对应的Alarm Signals为 SMU-Alarm: Timer time-out (Safety Mechanism: Recovery Timer 0)
AG3CF2 - AG3CF1 - AG3CF0 —> 0x001E0000 - 0x00000000 - 0x001E0000
bit20 code = 101 SCU/WDTCPU2 Alarm: CPU2 watchdog time-out
bit19 code = 101 SCU/WDTCPU1 Alarm: CPU1 watchdog time-out
bit18 code = 101 SCU/WDTCPU0 Alarm: CPU0 watchdog time-out
bit17 code = 101 SCU/WDTS Alarm: Safety Watchdog time-out
其它组的寄存器值都为0
如果程序只使用了CPU0,并且只配置了Safety WD, 那么引起复位的复位原因有Safety Watchdog time-out或Timer0 timeout。最终的原因就是因为没有及时喂狗,导致的程序复位。
至于为什么没能及时喂狗,需要针对程序继续查询。