学习目标:
1、模拟FLASH ECC故障
2、解决ECC故障
学习内容:
1、模拟FLASH ECC故障
当Flash内容被意外篡改时(电磁干扰、低压写入),再去对flash进行如下操作时,就会产生ECC故障

发生该故障后,想要根据实际环境复现相当不容易,这个时候我们可以通过Fls_Write()函数向Flash同一个地址,连续写入不同的数据来模拟ECC故障的产生,该方法实测有效。
补充:实际测试的时候发现不是所有sector重复写入时都能成功复现ECC故障,像保存cluster头信息的扇区写入时能更有效复现该故障。
2、解决ECC故障
根据NXP官方文档《AN12522》3.2 不可纠正错误的ECC,当Flash中产生ECC故障时
多bit错误和bus fasult错误都会导致程序进入HardFault_Handler,这也就意味着S32K146不能像S32K3x那样通过关闭ECC中断使能位来关闭该故障。

这个时候就只能在HardFault_Handler()中添加程序来处理该故障。
void HardFault_Handler(void)
{
//以下代码获取跑飞前的寄存器
__asm__("MOVS R0, #4");
__asm__("MOV R1, LR");
__asm__("TST R1, R0"); // Test LR (EXC_RETURN[2])
__asm__("ITE NE");
__asm__("MRSNE R1, PSP"); // EXC_RETUR

本文介绍了如何在S32K146微控制器中模拟FlashECC故障并提供两种解决方法:一是通过Fls_Write模拟故障并更新状态机,二是直接擦除坏块。同时提到擦除可能影响Cluster信息,需注意初始化。
最低0.47元/天 解锁文章
4169

被折叠的 条评论
为什么被折叠?



