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.

TMS570LS3137: 请问对于TMS570LS3137芯片的ECC功能有相关例程吗?

Part Number: TMS570LS3137
Other Parts Discussed in Thread: UNIFLASH, HALCOGEN

首先我想使用芯片的ECC功能,包括FLASH ECC,RAM ECC,我想知道如何对FLASH或者RAM使能ECC功能,并且想知道如何通过代码验证该ECC功能的测试(换句话说,是否有方法能模拟ECC单错来验证ECC的单错纠正功能,是否有方法模拟ECC双错来验证ECC的双错检测功能)

  • 感谢您对TI产品的关注!为更加有效地解决您的问题,我需要多一些时间查看这款芯片,稍后会为您解答。

  • 所有到片载闪存和 SRAM 的访问由专用的单位纠错双位错误检测(SECDED)逻辑保护。 每64位数据有一个8位 ECC。 闪存存储器内容的 ECC 需要由 CCS、Uniflash 或引导加载程序等外部工具计算、后者使用闪存 API 对应用程序映像进行编程。

    Cortex-R4F CPU 内的 SECDED 逻辑缺省情况下不启用并且必须由应用启用。 通过 HALCoGen 生成的驱动程序包含用于启用 ECC 的 API:

    /* Disable RAM ECC before doing PBIST for Main RAM */
    _coreDisableRamEcc_();

    /* Enable ECC checking for TCRAM accesses.
    * This function enables the CPU's ECC logic for accesses to B0TCM and B1TCM.
    */
    _coreEnableRamEcc_();

    /* Enable CPU ECC checking for ATCM (flash accesses) */
    _coreEnableFlashEcc_();

    当 CPU 在从闪存或 SRAM 存储器读取时检测到 ECC 单位或双位错误时,它会在专用的“事件”总线上发出此信号,并将 ECC 错误报告给 ESM。 默认情况下、该事件总线信号也不启用、必须由应用启用:

    /* Enable CPU Event Export */
    /* This allows the CPU to signal any single-bit or double-bit errors detected
    * by its ECC logic for accesses to program flash or data RAM.
    */
    _coreEnableEventBusExport_();

  • 要测试 RAM 访问的 CPU ECC 机制、请参阅安全诊断库中的 SRAM 自检功能:

    boolean SL_SelfTest_SRAM(SL_SelfTestType testType, boolean bMode, SL_SelfTest_Result* sram_stResult)

    该函数会破坏 ECC 中的1或2位、从而导致 TCRAM 访问中故意的单位和双位错误。 当 ECC 中出现2位错误时、从 TCRAM 位置读取会导致数据中止异常。

    /* Run 1Bit ECC test on TCM RAM */
    retVal = SL_SelfTest_SRAM(SRAM_ECC_ERROR_FORCING_1BIT, TRUE, &failInfoTCMRAM);

    /* Run 2Bit ECC test on TCM RAM */
    retVal = SL_SelfTest_SRAM(SRAM_ECC_ERROR_FORCING_2BIT, TRUE, &failInfoTCMRAM);

     

     

  • 非常感谢Ben Qin的回复与解答!

    1.针对_coreEnableEventBusExport_();

    我想再次问一下enable了这个事件总线后,如果发生了ECC单错或者双错,它会进入哪个中断函数吗或者是某个错误事件函数?

    2.我按照你的方法尝试了启用FLASH ECC校验功能,并且故意制造了单错和双错,但是我一运行FLASH读取操作,程序便跑飞了,跳转到底层的汇编代码里:

    flashErrorReal 这里,请问这是为什么,如何解决这个问题让程序继续跑下去

    flashErrorReal
            b       flashErrorReal      ;branch here forever as continuing operation is not recommended
    
    esmsr3          .word   0xFFFFF520
    ramctrl         .word   0xFFFFF800
    ram2ctrl        .word   0xFFFFF900
    ram1errstat     .word   0xFFFFF810
    ram2errstat     .word   0xFFFFF910
    flashbase       .word   0xFFF87000
    
        .endasmfunc

    再次感谢Ben Qin!

  • 你好,

    1.针对_coreEnableEventBusExport_();

    如果启用了事件总线导出、ECC 错误也将报告给 ESM 模块。 如果 ESM 通道的中断被启用,对,它将进入 ESM 中断例程。 默认的中断处理程序是低优先级 ESM 中断,它在默认情况下被禁用。

    ESM 组2通道的中断一直被启用、并且高优先级 ESM 中断处理程序(ESM FIQ)被使用:

  • 2.我按照你的方法尝试了启用FLASH ECC校验功能,并且故意制造了单错和双错,但是我一运行FLASH读取操作,程序便跑飞了,跳转到底层的汇编代码里:

    这是在预期内的。 双闪存 ECC 错误将生成数据中止。 因此、调用数据中止中断处理程序。 如果 ECC 由闪存或 SRAM ECC 自检生成、则错误标志将被清除、然后代码执行跳回到自检函数。

    如果自检未生成 ECC 错误、则会调用 flashErrorReal。 数据中止是一个严重错误、您必须停止代码执行才能调试代码。