TC377 - MTU MBIST之内存自动初始化+无创测试

本文档详细介绍了如何在AURIX TC3xx微控制器上启用MTU模块,进行内存初始化和无创测试(NDT)。通过设置Clock Control Register和Memory ECC Detection Register来控制MTU,执行SRAM初始化,以及利用{r, w*, r*, w}无创测试序列验证SRAM完整性。同时,文中也提到了错误跟踪寄存器的使用和函数调用顺序。" 117903555,11132217,Spark大数据处理实践:pyspark交互编程与独立应用,"['大数据', 'Spark框架', 'Python编程', '数据处理', '数据科学']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 概述

1)存储器测试单(MTU)控制和监控AURIX™TC3xx系列微控制器中各种内部存储器的测试、初始化和数据完整性检查功能。
2)无创测试(NDT)是由内存内置自测试(MBIST)执行的,以验证同一SRAM内存的内容。内存内置自测试(MBIST)是一个MTU特性,它能够验证内部sram的完整性。
3)为了测试错误的场景,此实例提供了在内存中注入一个比特错误的可能性。
注意:对MTU MBIST SSH的具体理论知识可查看以下博客:https://blog.csdn.net/qq_41164088/article/details/134373862?spm=1001.2014.3001.5501。

2 步骤1:MTU 模块使能

  当MTU模块未使能时,SSH警告将不会转发到SMU。如果在禁用期间产生了警告,那么当被使能后,之前触发的警告将会被转发到SMU。

2.1 控制MTU模块使能的寄存器 - Clock Control Register

  • CLC.DISR = 1:MTU模块被禁用。(未配置之前默认MTU模块禁用。
  • CLC.EDIS=1:Sleep模式下,不接受任何请求。(MTU模块禁用。)
    在这里插入图片描述

2.2 代码

void SM202_RamMtuMbist_MtuModuleEnableIinit(void)
{
   
    Ifx_SCU_WDTCPU *wdt      = &MODULE_SCU.WDTCPU[0];
	unsigned short  cpuWdtPw = Ifx_Ssw_getCpuWatchdogPassword(wdt);

    Ifx_Ssw_clearCpuEndinit(wdt, cpuWdtPw);

    /* Enable MTU Module. */
    MTU_CLC.U = 0x0U;

    Ifx_Ssw_setCpuEndinit(wdt, cpuWdtPw);
}

3 步骤二:获取当前警告状态

  SSH向MTU提供如下三种警告:

  • CE alarm(SRAM ECC Correction Error): ECCD.CERR表示CE警告状态。
  • UCE alarm(SSH Un-Correctable Error): ECCD.UCERR表示UCE警告状态。
  • ME alarm( SSH Miscellaneous Error):ECCD.MERR表示ME警告。
  • 注意:要关注错误溢出(Error Overflow)。

3.1 包含警告状态的寄存器 - Memory ECC Detection Register(MCi_ECCD (i=0-95))

  • ECCD.CERR=1:可纠正的错误警告产生。
  • ECCD.UCERR=1:不可纠正的错误警告产生。
  • ECCD.MERR=1:杂项错误警告产生。
  • ECCD.EOV:检测到的错误比错误跟踪寄存器还多;或者有多个内存块同时出现错误。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.2 代码

static uint32 SM202_RamMtuMbist_CheckEccdRegErrorAlarmStatusIinit(IfxMtu_MbistSel sramMbistSel)
{
   
    Ifx_MTU_MC *mc = (Ifx_MTU_MC *)(MTU_MC0_ECCD + 0x100 * sramMbistSel);

    return (uint32)(mc->ECCD.U & (IFXMTU_ERROR_FLAGS_MASK));
}

static void SM202_RamMtuMbist_ClearEccdAndFaultstsRegErrorAlarmStatusIinit(IfxMtu_MbistSel sramMbistSel)
{
   
    Ifx_MTU_MC *mc = &MODULE_MTU.MC[sramMbistSel];

    uint16 safetyWdtPassword = Ifx_Ssw_getSafetyWatchdogPassword();

    mc->ECCD.B.SERR  = 0;                                       /* Error Detected   */
    mc->ECCD.B.CERR  = 0;                                       /* CE alarm occured */
    mc->ECCD.B.UCERR = 0;                                       /* Uncorrectable Error Alarm Occured */
    mc->ECCD.B.MERR  = 0;                                       /* Miscellaneous Error Alarm Occured */
    mc->ECCD.B.TRC   = IFX_MTU_MC_ECCD_TRC_MSK;                 /* Tracking Clear */
    mc->ECCD.B.EOV   = 0;                                       /* Error Overflow */
    mc->FAULTSTS.B.OPERR &= MTU_CLEAR_FAULTSTS_OPERR0_MSK;      /* SSH Critical Operation Error Occured */

    Ifx_Ssw_clearSafetyEndinit(safetyWdtPassword);
    Ifx_Ssw_setSafetyEndinit(safetyWdtPassword);
}

4 步骤三:初始化SRAM

4.1 初始化步骤

在这里插入图片描述
1)使能SSH初始化完整的SRAM可能触发UCE警告,因此,警告反应需要被禁用。ALMSRCS.OPENE = 0:禁止检测并转发SSH/SRAM操作关键错误作为UCE警告。
2)FAULTSTS. MISCERR存储各种错误的状态,这些错误可能对SSH或SRAM操作不直接关键,但如果存在隐藏状态,则可能导致未来的严重故障。因此,该警告反应需要被禁用。ALMSRCS.MISCERR= 0:禁止检测并转发SSH/SRAM操作关键错误作为ME警告。
3)使能SSH - MEMTESTi.MEMxEN(i=0-2,x=0-31) = 1;
4)检测内存自动初始化运行状态 - 轮询MEMSTATi.MEMxAIU(i=0-2,x=0-31)。MEMSTATi寄存器显示每个SSH实例当前是否正在执行一个自动初始化序列,1表示正在执行自动初始化序列。
5)使能清除SRAM - MCi_MCONTROL.SRAM_CLR=1,1表示清除SRAM,用0和正确的ECC填充。
6)启动内存测试 - MCi_MCONTROL.START=1,1表示启动内存测试功能。实测发现:内存测试启动后,需要先清除START,再去轮询DONE位。注意:内存测试结束后, MSTATUS.DONE会被置1。可以轮询该位确认测试是否结束。
7)检测内存测试状态 - 轮询MCi_MSTATUS.DONE。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值