当Fls中发生ECC故障时的处理方法(S32K146)

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

学习目标:

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
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值