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:同一存储器位置的多 TCRAM ECC 错误检测问题

Guru**** 2468460 points
Other Parts Discussed in Thread: TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/669545/tms570ls3137-problem-with-multiple-tcram-ecc-error-detection-for-same-memory-location

器件型号:TMS570LS3137

您好!

在 TMS570LS3137上、当使用 TCRAM ECC 功能时、似乎当检测到一个单一位错误并纠正一次时、如果同一存储器位置发生一个后续的1位错误、
状态标志未设置。 如果在同一存储器位置、即使是双位错误也不会被检测到(不会产生中断、并且状态标志也不会被置位)。
为了再次发生检测(1位或2位)、需要先在不同的存储器位置检测到它、然后才能在第一个位置检测到它。

这种行为是否正常,或者 我是否错误配置 了 DSP ?


   //首先配置,然后启用 ECC 检查
   //必须先将 RAMOCCUR 寄存器清零,然后再设置阈值
   regTcRam1.ramOccur.bit.s 勘误表= 0U;
   regTcRam2.ramOccur.bit.s 勘误表= 0U;
   regTcRam1.ramThreshold.bit.threshold = 1U;
   regTcRam2.ramThreshold.bit.threshold = 1U;

   //禁用单位错误中断。
   regTcRam1.ramIntctrl.bit.sErrEn = 0U;
   regTcRam2.ramIntctrl.bit.sErrEn = 0U;

   //启用 ECC 检测
   regTcRam1.ramCtrl.bit.eccDetEn = 0x1;
   regTcRam2.ramCtrl.bit.eccDetEn = 0x1;


此致、

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

    您对行为的描述是正确的。 这样做的原因是、我们不希望 CPU 因重复中止/ECC 错误报告而中断。 其工作方式是将校正后的数据存储在 CPU 内的缓冲区中。 对于对同一地址位置的重复访问、它将访问缓冲区中已校正的数据、因此不会生成错误。 我需要与同事进行讨论、以便我清楚地了解我的答案、那就是数据更正后会发生什么情况。 我知道、在某些时候、校正后的值最终会被写回相关的 RAM 位置、以便尽可能消除单一位错误(即、当它真正是瞬态错误而非永久性错误的结果时)。 因此、不会出现将导致最终不可纠正的故障/多位错误的概率增加的单个位错误。

    除了写回操作的详细信息、我还需要仔细检查多位错误以及如何处理缓冲区和写回操作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    很抱歉、您迟迟不能与您联系、但这需要进行一些挖掘才能找到行为的确切描述。 下面是 ARM TRM 的摘录、其中很好地描述了错误处理。

      

    您的问题中未清除的部分是针对双位故障观察到的行为。 上面的段落清楚地指出、CPU 中的 ECC 逻辑将为任何双位或多位错误生成中止。

    因此、我们可以更好地了解 可能发生的情况、是否有一些代码演示了这种行为、您可以在这里发布? 最好是 CCS 工程、但如果不是这样、应该是可以的。 我很好奇的一点是、当发生初始不可纠正的错误时、您的代码会执行什么操作? 在再次访问之前、是否清除错误标志和不可纠正的错误地址寄存器? 或者、您是否立即返回并尝试再次加载该值?