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 功能是否有例程?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1162946/tms570ls3137-is-there-a-routine-for-the-ecc-function-of-the-tms570ls3137-chip

器件型号:TMS570LS3137
主题中讨论的其他器件:UNIFLASHHALCOGEN

大家好、

首先、我想使用芯片的 ECC 功能、包括闪存 ECC、RAM ECC、我想知道如何在闪存或 RAM 上启用 ECC。 您还想知道如何使用代码测试 ECC 功能(换句话说、是否有方法仿真 ECC 单一错误以验证 ECC 单一错误校正、以及是否有方法仿真 ECC 双重错误以验证 ECC 双重错误检测)

请帮您检查此问题吗?谢谢。

此致、

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

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

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

    /*在为主 RAM 执行 PBIST 之前禁用 RAM ECC */
    _coreDisableRamEcc_();

    /*启用 TCRAM 访问的 ECC 检查。
    *此函数为 B0TCM 和 B1TCM 的访问启用 CPU 的 ECC 逻辑。
    *
    _coreEnableRamEcc_();

    /*为 ATCM (闪存访问)启用 CPU ECC 检查*/
    _coreEnableFlashEcc_();

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

    /*启用 CPU 事件导出*/
    /*这允许 CPU 发出检测到的任何单位或双位错误的信号
    *通过其 ECC 逻辑访问程序闪存或数据 RAM。
    *
    _coreEnableEventBusExport_();

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

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

    布尔 SL_SelfTest_SRAM (sl_SelfTestType testType、布尔 BMODE、SL_SelfTest_Result * SRAM_stResult)

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

    /*在 TCM RAM 上运行1位 ECC 测试*/
    RetVal = sl_SelfTest_SRAM (SRAM_ECC_ERROR_ENCED_1BIT、TRUE、failInfoTCMRAM);

    /*在 TCM RAM 上运行2bit ECC 测试*/
    RetVal = sl_SelfTest_SRAM (SRAM_ECC_ERROR_ENCED_2BIT、TRUE、failInfoTCMRAM);

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

    下载安全诊断库的链接:

    https://www.ti.com/tool/SAFETI_DIAG_LIB

    HALCOGen 链接:

    https://www.ti.com/tool/HALCOGEN?keyMatch=HALCOGEN

    Uniflash 链接:

    https://www.ti.com/tool/UNIFLASH?keyMatch=UNIFLASH

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

    您好!

    感谢您的帮助!

    1.for _coreEnableEventBusExport_();

    我想再次询问是否启用了此事件总线、如果发生 ECC 单错或双错、它会进入哪个中断函数或某个错误事件函数?

    我尝试以您的方式启用闪存 ECC 检查、我故意设置了单个和双个错误、但一旦我运行闪存读取、程序就会运行并跳转到更低级别的汇编代码:  

    在 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、

    [引用 userid="534511" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1162946/tms570ls3137-is-there-a-routine-for-the-ecc-function-of-the-tms570ls3137-chip/4375786 #4375786"]1.for _coreEnableEventBusExport_();[/quot]

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

       

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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="534511" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1162946/tms570ls3137-is-there-a-routine-for-the-ecc-function-of-the-tms570ls3137-chip/4375786 #4375786"]2.I 尝试按您的方式启用闪存 ECC 检查、我故意犯了一个和两个错误、但一旦我运行闪存读取、程序就会运行并跳转到较低级别的汇编代码: [/引用]

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

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