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:L2FMC ECC 数据校正诊断模式7 -避免不必要的闪存访问

Guru**** 2482105 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/708790/tms570lc4357-l2fmc-ecc-data-correction-diagnostic-mode-7---avoiding-unwanted-access-to-flash

器件型号:TMS570LC4357

SPNU563 "7.8.2.2 ECC 数据校正诊断模式7:DIAGMODE = 7"记录了以下测试程序:

1.分支到非闪存区域以执行该序列。

(笑声)

4.在 FDIAGCTRL 寄存器中将 DIAG_TRIG 设置为1。

5.使用的 DIAG_BUF_SEL 字段选择需要翻转的相应端口
FDIAGCTRL 寄存器。 对于端口 A、只有合法值为0、对于端口 B、只有合法值为4

6.对所需地址执行端口 A 或 B 读取。 L2FMC 将对数据和 ECC 执行异或操作
在将该读取传送到 CPU 之前、分别为该读取操作提供了 FEMU_DxSW 和 FEMU_ECC。 不再需要
读取受此诊断影响。

"转移到非闪存区域"听起来很简单、但在 TMS570上测试 DED 时实际上非常麻烦:

-在该自检中创建一个有意的 DED 错误将触发 ESM2错误(不可屏蔽!) + FIQ。

- FIQ 触发将访问地址0x0处的矢量表,该地址通常为闪存地址空间。

使用 MEMW 将矢量表重新映射到 RAM 是一个选项、但非常麻烦。 是否有其他方法可以避免访问 FIQ 上的闪存?

或者可以通过另一种方式来查看此问题。 我们是否确实需要避免杂项问题? 在整个测试期间还是在某些关键步骤期间进行闪存访问? 例如、考虑以下代码(假设在 RAM 外执行):

while (测试多种 DED 组合....) {

 DSB;//确保对闪存的所有访问(例如、从矢量表读取)都完成

 将 DIAG_TRIG 设置为1...

 选择适当的端口 ...

  将端口 A 或 B 读取到所需的地址...

 //读取时将触发 FIQ! 矢量表是从闪存读取的、但没关系?

 验证 DED 检测/相应的错误状态...

由于在 DIAG_TRIG 设置和测试闪存读取之间不会发生非测试闪存访问、是否可以保证上述操作正常工作?

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

    您无需在 SRAM 中执行所有代码。 只需要在 SRAM 中执行模式7相关代码。 请参阅诊断库中的 sl_selftest.c。

    #pragma CODE_SECTION (sl_SelfTest_Flash、".sl_stflash_SRAM")
    布尔 SL_SelfTest_Flash (SL_SelfTestType testType、布尔 BMODE、SL_SelfTest_Result * FLASH_stResult)

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

    感谢您的回复。 您能否提供有关测试期间何时禁止访问闪存的更多详细信息? 例如,使用 sl_SelfTest_Flash(),如果我在读取 flashBadECC2之前向闪存中的例程添加函数调用(基本上是跳转+从闪存返回),我发现该测试不能正常工作。 显然、在测试的某些部分、而不是在其他部分、允许访问闪存。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了澄清另一个问题、如果您询问"为什么不使用 SL_SelfTest_Flash ()未修改"、我们决定通过验证所有2556 (72选择2) DED 组合来提高测试覆盖率。 由于闪存访问似乎主要是不可避免的(因为读取 flashBadECC2将从闪存读取矢量表)、我们尝试更好地了解约束条件、以使例程尽可能高效。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我知道。 我的理解是、至少应该在 SRAM 中运行步骤4/5/6和清除 DIAG_EN。
    最好遵循 TRM 中的建议。