Mpc5746R MEMU Overflow故障

一、简介

            本文主要介绍,在开发MPC5746R功能安全需求中遇到的MEMU报Overflow故障的分析以及解决办法。

二、故障描述

          一共遇到两个问题:

          1. 通过OverProgram方式植入ECC故障后,MEMU会直接复位,并不会通过FCCU置故障

          2. 上电报System Ram Overflow故障

          

           根据RM指示,此问题属于初始化顺序问题,需要在Core0启动之前初始化IMEM

    三、解决方式

       问题1: 使能系统中断

       

   因为,MACOSAR OS 会自己管理这三Exception,如果发生ECC故障会直接进Hook,通过Hook函数,进入EcuM_Shutdown状态,为了避免这种情况,需要自己处理这三个Exception.在中断服务函数中执行Memu_Handler。

void Memu_Handler(void)
{
    uint8 loopCnt=0;
    uint32 MEMU_ERR_FLAG_Value = 0x0;
    MEMU_ERR_FLAG_Value = MEMU.ERR_FLAG.R;
    IF(MEMU_ERR_FLAG_Value & MEMU_ERR_FLAG_FLASH_ECC_ALL)检查是否存在FLASH ECC故障
    {
        if(MEMU_ERR_FLAG_value & MEMU_ERR_FLAG_F_UCE)
        {
            MEMU.FLASH_UNCERR_STS.R = 0x80000000;
        }
        if(MEMU_ERR_FLAG_vaule & MEMU_ERR_FLAG_F_CE)
        {
            for(loopCnt=0;loopCnt<20;loopCnt++)
            {
                if(1 == MEMU.FLASH_CERR[loopCnt].STS.B.VLD)
                {
                    MEMU.FLASH_CERR[loopCnt].STS.R = 0x80000000;
                }
            }
        }
        if(MEMU_ERR_FLAG_Value & MEMU_ERR_FLAG_FLASH_OVERFLOW)
        {
            
        }
    }
    IF(MEMU_ERR_FLAG_Value & MEMU_ERR_FLAG_PHRRAM_ECC_ALL)//检查是否存在Peripheral RAM ECC故障
   {

    }
    IF(MEMU_ERR_FLAG_Vault & MEMU_ERR_FLAG_SYSRAM_ECC_ALL)//检查是否存在System Ram ECC故障
    {
    }
    MEMU.ERR_FLAG.R = 0xFFFFFFFF;//clear All MEMU error Flag;
}

    问题2:

     这个问题是因为在Core0启动之前还没初始化IMEM,在BsrStartup.c中增加对应部分的初始化。

    IMEM 在ld文件中的定义

部分初始化代码

进行初始化之后,还可能出现下电后重新上电报overflow故障,需要在上电初始化时清除这些故障即可!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值