TC377 - MTU MBIST之单/双 bit数据错误注入

本文介绍了如何在MCU中进行内存测试,通过启用MBIST来手动注入单/双bit数据错误,以验证内存测试功能。内容包括理论概述,SSH的启用,单地址内存数据的读取和写入,以及不同类型的错误注入示例代码,旨在帮助用户理解和实施内存错误检测机制。
摘要由CSDN通过智能技术生成

1 理论概述(需要了解)

  启用内存测试后,为了验证功能的有效性,需要用户手动去注入错误,进而验证内存测试功能是否有效。在没有错误发生的情况下,手动注入错误是很有必要的。
  对于无损测试而言,可以通过ECCMAP在NDT之前用错误的ECC编码某一个word,从而注入一个数据错误。
  对于有损测试而言,可以通过RANGE.INJERR位注入数据错误。

  • 当RANGE.INJERR=1时,将RANGE.ADDR作为指向物理SRAM位置的指针,在测试期间不会对该位置进行写访问。
  • 然后,在测试之前,软件可以在该位置写入一个特定的值(即使用RDBFL寄存器使用单个SRAM写访问)。
  • 最后使用 RANGE.INJERR=1和RAEN =1 运行测试。测试针对的是整个内存空间,在RANGE.ADDR对应的地址不会进行写操作,导致测试过程中预期数据不匹配。

  注入错误后,可以测试所有正常的诊断和通知——也就是说,触发警报,在无损测试期间在ETRR/ERRINFO中跟踪错误。FAIL被设置,当FAILDUMP=1时,FDA被设置,及可以获取故障位映射。故障位映射:预期数据模式XOR实际数据模式。
  在测试过程中,通过设置SFLE=1即可触发地址错误。注意:这将触发每个地址的地址错误,在无损测试期间,会导致ETRR 和 ERRINFO充满地址错误。
  目前只支持单/双bit错误检测,错误bit位超过2个,则检测只能检测到双Bit错误,没办法检测超出2的多bit错误检测。

2 测试步骤

2.1 使能SSH

  上一篇文章TC377 - MTU MBIST之内存自动初始化+无创测试”已经详细介绍了如何使能SSH,不清楚可以查询“https://blog.csdn.net/qq_41164088/article/details/134508634”。

2.2 读取单地址内存数据

  SSH可以读取单个地址的数据。RDBFL寄存器保存了一个完整的内存字的内容,因此可以读取所有的内存位,包括ECC或奇偶校验位。

2.2.1 具体步骤

在这里插入图片描述
1)关闭UCE警告反应。——该操作已经在使能SSH时就已经关闭。
2)编程序列为{r},对应的CONFIG0~1、RANGE寄存器配置如下:

  • CONFIG0:NUMACCS = 1,ACCSTYPE = 1(read)。
  • CONFIG1:AG_MOD=0( run the test with linear address generation)。
  • RANGE:RAEN = 0 (single address & address to be read),ADDR=期望修改数据的目标地址。

3)启动内存测试。寄存器配置如下:

  • MCONTROL:FAILDMP=0(Fail bitmap do not dump),DIR=1(UP: Address direction is lowest to highest),START=1(Start memory test,MSTATUS.DONE将会在此时被清除),MSTATUS.DONE被清除后在设置START=0。

4)等待MSTATUS.DONE被置起,即等待内存测试结束。
5)读RDBFL寄存器。
6)退出内存测试模式。
7)清除由于该操作置起的UCERR和 OPERR标志。

2.3 单地址内存数据写入

  SSH可以用来将RDBFL寄存器的内容写入单个内存位置。RDBFL保存了一个完整的内存字的内容,因此可以写入所有的内存位,包括ECC或奇偶校验位。

2.3.1 具体步骤

在这里插入图片描述
1)关闭UCE警告反应。——该操作已经在使能SSH时就已经关闭。
2)编程序列为{w},对应的CONFIG0~1、RANGE、RDBFL寄存器配置如下:

  • CONFIG0:NUMACCS = 1,ACCSTYPE = 0(read)。
  • CONFIG1:AG_MOD=0( run the test with linear address generation)。
  • RANGE:RAEN = 0 (single address & address to be read),ADDR=期望修改数据的目标地址。
  • RDBFL:WDATA=期望写入的数据。

3)启动内存测试。寄存器配置如下:

  • MCONTROL:FAILDMP=0(Fail bitmap do not dump),DIR=1(UP: Address direction is lowest to highest),先设置START=1(Start memory test,MSTATUS.DONE将会在此时被清除),MSTATUS.DONE被清除后在设置START=0。

4)等待MSTATUS.DONE被置起,即等待内存测试结束。
5)退出内存测试模式。
6)清除由于该操作置起的UCERR和 OPERR标志。

3 单/双bit数据错误注入示例代码

static uint8 SM202_RamMtuMbist_CorrectableDataBitErrorInject(ErrorInjectType errorType, IfxMtu_MbistSel sramMbistSel, uint16 sramAddr, uint8 rdbflCnt)
{
   
    Ifx_MTU_MC *mc = &MODULE_MTU.MC[sramMbistSel];
    uint16 safetyWdtPassword = Ifx_Ssw_getSafetyWatchdogPassword();
    Ifx_Ssw_clearSafetyEndinit(safetyWdtPassword);

    /* Disable MISCE &&  OPENE*/
    mc->ALMSRCS.B.MISCE = 0;
    mc->ALMSRCS.B.OPENE = 0;

    /* 1 Enable SSH */
    uint32 mask = 0;
    volatile uint32 *mtuMemtest = IFX_SSW_NULL_PTR;
    volatile uint32 *mtuMemstat = IFX_SSW_NULL_PTR;
    volatile uint32 *mtumemDone = IFX_SSW_NULL_PTR;
    if(sramMbistSel < 32)
    {
   
        mtuMemtest = &MTU_MEMTEST0;
        mtuMemstat = &MTU_MEMSTAT0;
        mtumemD
  • 21
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值