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.

[参考译文] TMS570LC4357:闪存 ECC 故障检测

Guru**** 2448780 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/1239600/tms570lc4357-flash-ecc-fault-detection

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

重新出现闪存 ECC 问题。

我们刚刚发现、通过链接器选项--ecc:ecc_error 在闪存 ECC (不是闪存本身、而是在 ECC 数据中)中注入故障时出现了一种奇怪的行为。

我的期望是 ESM 会通知您是否检测到并校正了1个错误或者检测到2个(或更多)错误。 但该行为完全取决于错误屏蔽。

我们尝试了这些掩码(十六进制值)、并获得了以下结果:

01 ->无标志(假设已校正、没有方法检测)
02 ->无标志(假设已校正、没有方法检测它)
03 ->已标记
07 ->已标记
0A ->已标记
0f ->已标记
1A ->无标志
2A ->无标志
30 ->中止
aa ->中止
AF ->已标记
EA ->异常中断
F1 ->无标志
FA ->中止
FF ->已标记

"已标记"表示 ESM 组 2、通道3标志变为"1"。

我可以假设 ESM 组2、通道3仅在多个位错误时才会被标记。 但我不明白 DABORT 何时被试探、更不用说为什么"03"掩膜和"30"掩膜会产生不同的行为、当两者都引入2个错误的位时。

有没有人知道答案、或者能够为我们指出正确的文档来解释 ECC 模块的工作原理? 我已经在手册中看到"Cortex R5F CPU 可能生成到闪存存储器空间内任一位置的推测取数据。到一个带有无效 ECC 的位置的推测取数据、随后不被使用、不会产生一个中止、 但将为可纠正或不可纠正的错误设置 ESM 标志"、但我们始终在相同的位置注入错误、并执行错误、因此听起来并不像合理的解释。

提前感谢您。

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

    尊敬的 Txema:

    我想验证您的代码。

    您甚至可以通过压缩您的整个项目来向我发送私人消息、以便我可以轻松调试您的问题?

    --

    谢谢。此致、
    Jagadish。  

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

    你好、Jagadish。

    很显然、我无法向您发送我的完整代码。 您能告诉我您想要检查的具体内容吗?

    故障注入通过 Code Composer 链接器选项来完成。

    然后代码只查找 ESM 寄存器的状态来标记任何出现的情况、以便可以通过遥测报告。

    错误的 ECC 注入是在名为"Bsp_1Hz"的函数中完成的、因此每秒都会检测一次故障。

    您是否知道为什么不同的掩模会产生如此不同的结果? 为什么翻转位0和1 (屏蔽0x03)在 ESM 模块中被标记为组2通道3故障(闪存 ECC)、但是翻转位4和5 (屏蔽0x30)会产生 DABORT? 这种行为与我的代码完全无关。

    谢谢你。

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

    尊敬的 Txema:

    很抱歉耽误了时间、

    根据您提到的问题、我需要一些时间来创建项目、在我创建项目后、我将对您进行调试和更新。

    --

    谢谢。此致、
    Jagadish。

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

    你好、Jagadish。

    听起来很不错、谢谢。

    如果它有用、我会重现它:

    1) 1)编写一些每次频繁调用函数的代码(例如1秒)

    2) 2)在.map 文件中检查该函数的地址

    3) 3)配置链接器、以使用不同的掩码(如我的消息中所述)在该地址注入 ECC 错误

    4)在 dabort()函数中设置一个断点,这样你就知道它是否被调用了。

    5) 5)在1s 函数中设置一个断点、以便可以触发故障步进执行

    6) 6)通过调试器读取 ESM 模块的状态

    谢谢你。

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

    尊敬的 Txema:

    请参阅 器件 TRM 第344页的综合征表。

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

    您好、Wang。

    是的,我看到了那个表,但我不知道如何解释它:

    1."出错的位可以是64个数据位中的一个位、也可以是8个 ECC 校验位中的一个位"->这64位数据是什么? 8个 ECC 校验位在表中的什么位置?

    2.表7-3将8位故障分解为4个动作:E0x、Dxx、D 和 M。前两个可校正,而 D 和 M 不可校正。

    3、我不知道故障注入中使用的"掩模"和这个表的关系

    4.我也不知道为什么 ECC 有时会标记错误,有时不会,有时会调用 DABORT

    您能帮助我理解这些问题吗、以便我能够关闭因果关系循环吗?

    非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1."出错的位可以是64个数据位中的一位,也可以是8个 ECC 检查位中的一位"->这64位数据是什么? 表中的哪里是8个 ECC 校验位?

    如果 ECC[0]发生翻转,则故障表格的 cell[0,1]的值=E00 -->单位 ECC 错误。 读取这些寄存器时、系统会检测并纠正

    如果 ECC 翻转位为0x1A、则故障表的 ECC[1]、a 的值= D22 -->单位数据错误、读取时将校正

    2. 表7-3将8位故障与4个操作相关:E0x、Dxx、D 和 M。前两个可校正、而 D 和 M 不是[/引号]

    TRM 中的表7-3不正确(对于小端字节序)。 请使用 TMS570LS3137 TRM 中的表。 正确:D 不可纠正,但可检测。 M 表示不可检测且不可纠正。

    3. 我不知道故障注入中使用的"掩码"与此表的关系[/引号]

    屏蔽值是正确的 ECC 值和损坏的 ECC 值的 XOR 结果。 您可以使用该值来查找综合征表中的电池值。

    例如、如果 MASK = XY (十六进制值)、则综合征表中 cell (row y、colx)的值指示错误是否可纠正。

    4. 我也不知道为什么 ECC 有时会标记错误,有时会标记错误,有时会调用 DABORT
    [/quote]

    请使用闪存模块寄存器(FMC_ECC)在诊断模式7中注入 ECC/数据故障。 我尚未尝试使用链接器注入 ECC 错误。

    [/quote][/quote]