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.

[参考译文] AM2434:当应用程序在 DDR 下运行时、ECC 注入错误失败

Guru**** 2900950 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1645402/am2434-ecc-injection-error-failed-when-the-app-was-running-in-ddr

器件型号: AM2434
主题: SysConfig 中讨论的其他器件

ENV:

CCS:18.1

SDK:mcu_plus_sdk_am243x_11_00_00_15

请参阅:

C:\ti\mcu_plus_sdk_am243x_11_00_00_15\examples\drivers\ddr\DDR_ECC_TEST_MAIN_esm\am243x-evm

 

运行 ECC 例程可以正常注入错误并检测它们。

在我们的应用程序中,注射将被错误直接中断。

 

我们的应用代码在 DDR 模式下运行。

在引导加载程序中初始化 DDR 并启用 ECC、使用起始地址避开应用程序代码区域

在应用程序中执行注塑测试 发现一旦注入、就会被错误地中断

 

引导 SysConfig:

 引导映射的 DDR 部分的最大地址:

 应用映射的 DDR 部分的最大地址:

 传入的注入地址:

 问题是:在 DDR 中运行该应用程序是否会阻止注入测试? 配置的 ECC 区域是否避开了应用程序区域?

谢谢!

 

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

    是的、测试的注入旨在从 DDR 以外的存储器运行。  检查 MCU+ SDK 中的原始代码、我认为示例测试从内部存储器运行。

    此致、

    James

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

    尊敬的 JJJD:

    对于    代码   在 DDR 中运行的情况、  当前 配置的         DDR 空间不会与代码的 DDR 空间重叠。  但是、 为什么  切换  DDR ECC 功能 会影响  代码 执行?
    启用 ECC 后、DDR 所有物理地址和逻辑地址之间的映射关系(包括未启用 ECC  的区域)会导致代码撕裂?

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

    根据 TRM 中的描述、它符合我上面的猜测。  



    此外、我通过测试进行了验证:通过使用 ddr_ecc_test 示例、未受保护区域 (0x80000000~0x80000FFF) 的地址映射在切换 ECC 前后发生了变化。



    因此、是否有任何其他方法可以触发 ECC 错误、例如修改寄存器?

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

    正确、启用 ECC 后、对整个存储器物理寻址进行重组、如下所示:

    要触发 ECC 错误、您应该能够遵循示例代码中的顺序。  我还没有详细研究、但它应该禁用 ECC 以在特定物理地址注入错误、然后重新启用并执行。

    此致、

    James

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

    是的、该示例的方法是禁用 ECC、修改数据、重新启用 ECC、然后读取数据以触发 ECC 错误。

    但在示例中、代码以 MRAM 模式运行、因此当启用或禁用 ECC 时、DDR 逻辑地址的重映射不会影响代码执行。 我们的代码以 DDR 模式运行、在启用或禁用 ECC 时发生的地址重映射会导致代码撕裂和崩溃。

    我找到了一个解决方案:确保将用于启用/禁用 ECC 和注入错误的代码放置在 DDR 的前 256 个字节中、并在此过程中禁用中断。 这样、在禁用和启用 ECC 的过程中、CPU 执行的代码既不会出现撕裂、也不会重新映射 、测试表明这种方法有效。

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

    好的、感谢发布该解决方案。  是的、我认为启用/禁用之间的重映射不起作用、除非在地址空间的开头进行重映射、在这里、无论 ECC 的启用/禁用如何、重映射和物理地址都将相同。

    谢谢

    James