This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RM48L940:闪存 ECC 测试

Guru**** 657930 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/804974/rm48l940-flash-ecc-test

器件型号:RM48L940

我的1位 ECC 闪存测试似乎通过了、但使用 sl_SelfTest_Flash (flash_ecc_test_mode_2BIT、0、failInfoFlash)失败了2Bit ECC 测试。 在下面的代码段中、条件(位(ESM_G3ERR_FMC_Uncorr)==(sl_esmREG->SR1[2]和位(ESM_G3ERR_FMC_Uncorr))评估为 false、并且我确认 ESM SR1[2]未设置。

当行 flashread =*(volatile UINT32 *) flashBadECC2;被执行时、ESR SR3的位7被置位。 一旦我执行 flashread =*(volatile UINT32 *) flashBadECC2、ESM SR3[7]就会被置位;

为什么要检查 ESM SR1[2]而不是 ESM SR3[7]? 我认为 SR1用于组1错误、但2Bit 错误将触发组3错误。 是否有人能解释正在进行什么以及我需要检查什么才能通过测试?

sl_flashWREG->FDIAGCTRL |= F021F_FDIAGCTRL_DIAG_TRIG;

/*SAFETYMCUSW 58 S MR:14.3. 注释_16*/
flashread =*(volatile UINT32 *) flashBadECC2;

#if defined (_TMS570LS31x_)|| Defined (_TMS570LS12x_)|| Defined (_TMS570LS07x_)|| Defined (_TMS570LS09x_)|| Defined (_RM48x_)| Defined (_RM44x_)||
if (((flash_ecc_test_mode_2BIT_FAULT_Inject!= testType)&&(flash_address_ecc_fault_inject!= testType))
#endif
definef #if defined (_TMS570LC43x_)|| defined (_RM57Lx_)
if (flash_ecc_test_mode_2BIT =testType)
#endif
{
#if defined (_TMS570LS31x_)|| Defined (_TMS570LS12x_)|| Defined (_TMS570LS07x_)|| Defined (_TMS570LS09x_)|| Defined (_RM48x_)|| Defined (_RM46x_)|| Defined (_RM44x_)|| Defined (_RM42x_)| TMS570LS04x_(_RM42x_)|
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
/*SAFETYMCUSW 408 S MR:12.4. 注释_12*/
/*SAFETYMCUSW 96 S MR:6.2、10.1、10.2、12.1、12.6 备注_25*/
if (((F021F_FEDACSTATUS_B1_UNC_ERR =(uint32)(sl_flashWREG->FEDACSTATUS & F021FEDACSTATUS_B1_UNC_ERR)))
&&(sl_flashWREG->FUNCHERRADD =>(uint32) 0x8u)
&&(位(ESM_G3ERR_FMC_Uncorr)==(sl_esmREG->SR1[2]和位(ESM_G3ERR_FMC_Uncorr)))) 
               SL_flashWREG->FEDACSTATUS = F021F_FEDACSTATUS_B1_UNC_ERR;
               sl_esmREG->SR1[2]=位(ESM_G3ERR_FMC_Uncorr);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    组状态寄存器的 ESM 寄存器位于地址偏移量0x18、0x1C 和0x20处。 这些被执行为头文件 sl_regs_esm.h 中定义为"UINT32 SR1[3U];"的三个32位寄存器的数组

    因此、SR1[2]是针对 TRM 中描述的组3错误状态标志的 ESMSR3寄存器。

    此致、
    Sunil
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Sunil。 现在这是有道理的。 我将 SR1解释为状态寄存器1。