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:生成 ESRAM ECC 所需的信息

Guru**** 2609995 points
Other Parts Discussed in Thread: TMS570LS3137, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/741963/tms570ls3137-information-required-for-esram-ecc-generation

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

大家好、

我们正在使用 Hercules TMS570LS3137控制器上的 CCS8.0版本执行 single-bit esram 测试。
可以看到 esmHighInterrupt 或 notification 在生成3次单一位 ECC 异常后被调用一次。

如果此问题已经有解决办法、您可以与我们分享吗? 如果没有、请分享代码示例、我们可以在其中生成单个位 ECC SRAM 异常、这是第一次发生。

此致、
M.Sreenivasan。

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

    请将 RAMTHRESHOLD 寄存器中的阈值计数编程为0x1。 这是在生成单位错误中断之前发生的单位错误校正(SEC)的阈值。 如果该阈值设置为1、则捕获所有单位错误地址。 要启用错误发生检测、必须将阈值设置为非零值。

    tcram1REG->RAMTHRESHOLD = 0x1U;
    tcram2REG->RAMTHRESHOLD = 0x1U;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、

    我们在阈值设置为0x1的情况下进行了测试、但仍会注意到该问题。
    请告诉我、您是否需要有关此内容的任何详细信息。 您是否能够针对 SRAM 上的每个单一位 ECC 事件执行通知?
    注意:我们正在评估板上进行测试。

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

    我之前做过测试、每次从具有1位 ECC 错误的位置读取时、我都会收到通知。
    ECC 错误由翻转1位 ECC 数据生成。

    您是如何测试的? 您是否尝试了 sys_selftest.c 中的函数?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、

    我尝试使用 selftest.c 文件中提供的 checkRAMECC 函数。 我可以看到、在该函数中、偶数和奇数内存组都损坏(ECC 区域中的单个位)、我们能够获得两次通知。 但是、如果我们仅腐败单个银行(比如银行)、那么只有在我们收到通知后、才会发现没有通知。

    您能否检查上述更改的测试用例并告知我们此行为的原因?

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

    我将进行测试、然后返回给您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、

    如果您有我的更新、请分享。

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

    您能否共享有关此内容的更新?

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

    我们一直在等待您对此提供意见。 您能否确定优先级并提供您对此的意见?

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

    要每次都设置错误状态、您需要在不同地址翻转 ECC 位、然后读取相应的 RAM 数据。 如果您在与上次相同的地址翻转 ECC 位、它将从缓存(一个入口缓存)读取校正的数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、

    您能否确认、为什么在同一地址执行 checkRAMECC 中的测试用例时、它始终是可重现的?

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

    此外、对于 Cortex R4F、我们没有缓存、而是有紧密耦合的 RAM。 那么、您能否将其添加到勘误表中并提及解决方法?

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

    对此进行了任何更新?

    此致、
    M.Sreenivasan。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这一条目高速缓存仅用于 RAM ECC。 这不是数据表中提到的32KB L1高速缓存。 如果您想得到错误、只需每次更改地址即可。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢王。 是的、如果地址不同、我们会得到例外情况。 但是、Halcogen 不提供启用高速缓存配置的选项、默认情况下、它是禁用的。 当我们只访问 TCRAM 区域时、它将如何缓存?

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

    让我解释一下我们的会议呼叫中提到的硬错误缓存。

    Cortex-R4处理器通过将校正后的数据写回 SRAM 并重试访问来尝试校正 SRAM 中的1位错误。 如果1位错误是由硬故障引起的、那么这样做不会改变从 SRAM 读取的数据、 当重新尝试访问时、将再次检测到相同的错误、处理器将锁定、永久检测错误并重试、而不会取得任何进展。

    硬错误高速缓存的目的是防止 CPU 读取具有永久性单位错误的 SRAM。 假设其中一个内存单元中存在缺陷。 如果您从它读取数据、CPU 将检测到它为一个单位 ECC 错误。 CPU 将尝试将校正后的数据保存到硬错误高速缓存中、并将校正后的数据写回 SRAM、然后重试。 下一次如果 CPU 从同一错误地址读取、那么它只是从缓存读取、而不是从 SRAM 读取、因为地址中存在匹配项。

    您可以使用 RAMTHRESHOLD 寄存器设置单个位阈值出现。 如果这个阈值被设定为3、当 CPU 校正的单位错误数量超过3时、将生成单位错误中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、

    是的、您答对了、这就是我们将在异常处理程序中执行存储器写入操作以纠正 SRAM 中的数据出现单个位 ECC 错误的原因。 如果在同一地址遇到单个位 ECC 错误、我们想知道如何获得异常?
    此外、上述说明可能并不适用于所有情况、因为某些线程可能会更新其他线程读取的内存。

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

    我测试了以下场景并找到其观察结果:
    执行了 checkB0RAMECC 方法、然后读回其 ECC 值在 checkB0RAMECC 函数中损坏的存储器位置。 我们始终会执行异常处理程序(单个位 ECC)。
    请注意、作为 checkB0RAMECC 函数的一部分、我们将在 checkB0RAMECC 结束时读取损坏的内存地址、然后我们再次读取相同的地址以生成异常。 您能否检查这方面的行为、以及为何需要2次访问损坏的存储器以生成单个位异常?

    如需参考、请查找 checkB0RAMECC 中使用的代码:

    void checkB0RAMECC (void)

    volatile uint64 ramread = 0U;
    易失性 UINT32 regread = 0U;
    uint32 tcram1ErrStat、tcram2ErrStat = 0U;

    uint64 tcrama1_bk = tcramA1bit;
    uint64 tcrama2_bk = tcramA2bit;
    易失性 uint32 i;
    /*用户代码开始(36)*/
    /*用户代码结束*/

    /*启用对 ECC RAM 的写入、启用 ECC 错误响应*/
    tcram1REG->RAMCTRL = 0x0005010AU;
    tcram2REG->RAMCTRL = 0x0005010AU;

    /*第一个1位错误将导致错误响应*/
    tcram1REG->RAMTHRESHOLD = 0x1U;
    tcram2REG->RAMTHRESHOLD = 0x1U;

    /*允许将 SERR 报告给 ESM */
    tcram1REG->RAMINTCTRL = 0x1U;
    tcram2REG->RAMINTCTRL = 0x1U;

    /*导致1位 ECC 错误*/
    _coreDisableRamEcc_();
    tcramA1bitError ^= 0x1U;
    _coreEnableRamEcc_();

    /*禁用对 ECC RAM 的写入*/
    tcram1REG->RAMCTRL = 0x0005000AU;
    tcram2REG->RAMCTRL = 0x0005000AU;

    /*从具有1位 ECC 错误的位置读取*/
    ramread = tcramA1bit;


    主要功能如下:

    while (1)


    checkB0RAMECC()
    ramread = tcramA1bit;


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

    您能否更新此案例?

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

    我在 LS3137 HDK 上进行了测试、第一次读取时会生成错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、

    当我们第一次读取损坏的地址时、它将首次生成。 但是、为了使同一地址生成异常、我们需要读取两次。

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

    如前所述、如果地址相同、CPU 将从缓存读取、而不是从 SRAM 读取。

    Cortex-R4处理器通过将校正后的数据写回 SRAM 并重试访问来尝试校正 SRAM 中的1位错误。 如果1位错误是由硬故障引起的、那么这样做不会改变从 SRAM 读取的数据、 当重新尝试访问时、将再次检测到相同的错误、处理器将锁定、永久检测错误并重试、而不会取得任何进展。

    硬错误高速缓存的目的是防止 CPU 读取具有永久性单位错误的 SRAM。 假设其中一个内存单元中存在缺陷。 如果您从它读取数据、CPU 将检测到它为一个单位 ECC 错误。 CPU 将尝试将校正后的数据保存到硬错误高速缓存中、并将校正后的数据写回 SRAM、然后重试。 下一次如果 CPU 从同一错误地址读取、那么它只是从缓存读取、而不是从 SRAM 读取、因为地址中存在匹配项。

    您可以执行以下操作:
    地址1:ECC 损坏、读取数据以获取 ESM 错误
    地址2:ECC 损坏、读取数据以获取 ESM 错误
    3、地址1:ECC 损坏、读取数据以获取 ESM 错误