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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1225202/tms570lc4357-unable-to-test-ecc-on-flash

器件型号:TMS570LC4357

尊敬的诸位:

我们在代码中实现了一个函数、用于检测和记录闪存 ECC 故障。 它基于轮询 ESM 标志的状态并且相应地更新一个状态寄存器、此状态寄存器通过遥测发送。

为了测试正确的行为、我们通过链接器选项 --ecc:ecc_error:[Address]、[Mask]注入了 ECC 错误。

但我们看到的是对 dabort ()的调用或寄存器 R13中的损坏,当函数试图返回(LDM R13 !,{PC})时,会导致电路板复位。

这是预期行为吗? 如果一个错误的闪存 ECC 产生一个复位、那么具有一个用于捕捉这些事件的 ESM 模块有什么好处?

谢谢你。

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

    尊敬的 Txema:

    我没有尝试通过链接器 cmd 注入 ECC 错误。 我建议使用安全 诊断库 (SDL)进行内存 ECC 自检。  SDL 提供了器件安全机制的接口。 该库集合了多种功能、便于访问各种安全机制的安全功能和响应处理程序。

    https://www.ti.com/tool/SAFETI_DIAG_LIB

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

    尊敬的 Wang、感谢您的答复。

    SDL 非常方便、但它留下了无效代码。 由于目的是测试我们的代码是否识别并标记错误、因此我们不需要将测试作为位序列的一部分运行、这不是目的。 因此、您只需注入一次故障并测试我们的代码行为、这正是我们真正想要的。

    不管怎样,我工作了一点更多的这个问题,并发现显然 dabort 是由某种副作用的原因。 我重复了该测试、在做了一些更改后、代码现在可以正常运行。

    有趣的是,对于任何其他感兴趣的读者来说,寄存器 Esm1.STAT2 (组2状态寄存器)中的标志被"有人"清除,我无法识别。 似乎调用了 ISR、但在那里放置一个断点并没有停止、所以我真的不知道为什么以及如何清除寄存器。 幸运的是、STAT2有一个影子寄存器、因此我能够使用该寄存器并正确检测闪存 ECC 错误、从而轮询 ESM 模块。

    好的。