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 设置和测试闪存读取之间不会发生非测试闪存访问、是否可以保证上述操作正常工作?