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.
大家好、
首先、我想使用芯片的 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 链接:
您好!
感谢您的帮助!
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)被使用:
这是预期的。 双闪存 ECC 错误将生成数据中止。 因此、调用数据中止中断处理程序。 如果 ECC 由闪存或 SRAM ECC 自检生成、则错误标志将被清除、然后代码执行跳回到自检函数。
如果自检未生成 ECC 错误、则会调用 flashErrorReal。 数据中止是一个严重错误、您必须停止代码执行才能调试代码。