【简介】
在此贴中(【S32K3】S32K3功能安全 FCCU 模块配置使用 )有介绍触发FCCU的异常后会进入,FCCU_ALARM_ISR 的中断处理函数。通常程序在运行过程中是不容易产生FCCU的异常错误例(如RAM的ECC错误),那我们如何验证FCCU的异常处理流程,我们可以使用芯片的EIM模块(Error Injection Module (EIM)来注入错误来验证FCCU的异常处理逻辑。
以下是EIM 的框图,可以在RAM 阵列的访问路径上翻转指定 的bit 从而触发FCCU异常事件。

我们可以使用eMCEM 的驱动接口往特定的channle 中注入错误来触发FCCU 的异常事件。

结合上述框图的说明和错误注入channel 的说明,整个错误注入的流程还是很清晰的。对应的寄存器只要如下:
EIMCR->GEIEN(故障注入的全局开关)

错误注入侧channel 使能寄存器

以下的SPD的驱动代码对应上述两个寄存器的操作处理。
故障注入使能函数:

故障注入关闭函数:

对应的channel 错误注入翻转mask寄存器

以下函数对应错误注入的翻转bit

在S32DS 的配置中我们可以针对FCCU的异常事件添加call back 函数来处理对应的异常事件,我们针对RAM0/RAM1 的添加异常callback 函数 
我们编写如下测试代码,通过EIM往PRAM0 中注入两bit的错误数据错误。
eMcem_SetupInjectionChannel(EMCEM_EIM_CH_0, 0,1); eMcem_InjectFault(EMCEM_EIM_CH_0);
注入错误后FCCU 的alarm 中断函数按照预期的被调用,并调用了我们上面实现的回调函数。

异常检出后配置触发动作为重启,重启后可以读取到本次的异常的重启原因为FCCU重启。

我要赚赏金
