您好!
我正在尝试使用 SafeTI 库2.4.0获取闪存 L2FMC 模块的自检、并自行实施(地址标签寄存器测试、模式5、在 TMS570LC4357的 SafeTI Lib 中未完成)。
对于使用 SafeTI Lib 函数 sl_SelfTest_Flash 执行的 ECC 1位测试:
以下条件始终失败:
如果(((( SL_epcREG1->EPCERRSTAT & EPC_ERR_CAM_FULL)== EPC_ERR_CAM_FULL)||
(((sl_epcREG1->EPCERRSTAT 和 EPC_ERR_CAM_OVRFLW)== EPC_ERR_CAM_OVRFLW)||
(sl_epcREG1->CAMAAVAILSTAT!= regBkupCamAvail))&&
(((((sl_esmREG->SR1[0])& bit (ESM_G1ERR_EPC_SERR))=(bit (ESM_G1ERR_EPC_SERR)))){
/*清除 ESM 状态寄存器*/
sl_esmREG->SR1[0]= BIT (ESM_G1ERR_EPC_SERR);
…
因为在 ESM 状态寄存器中、预期的位没有被置位。
奇怪的是:
如果我添加对 ESM 状态寄存器(sl_esmREG->SR1[0])的读取、就在下面的行触发 ECC 1位错误之前、它会起作用:
flashread =*(volatile UINT32 *) flashBadECC1;
然后、我还尝试执行地址标签寄存器测试、如微控制器参考手册中建议的那样:
它首先看起来工作正常、只检查错误标志 flashWREG->FEDAC_PASSUST、测试后预期的位被置位。
根据参考手册、错误也被路由至 ESM 并且根据数据表、一个 ESM 组3错误位13应该被设定、其中包括错误反应: 总线错误、ESM -> nERROR。
如果我在测试后检查 ESM 位、我看不到相应的位被置位。
然后、我测试了与上面一样的内容、在测试前读取 ESM 状态寄存器。 至少当单步执行代码时、我看到 ESM 状态寄存器中的位在测试后被置位、但没有其他反应。
尽管如此、对于系统复位后的这个测试、针对预期错误的 ESM 组3状态位被置位并且系统不会启动、这是因为在启动期间会检查此情况。
因此、有关此问题的问题:
我是否需要设置 ESM 位(至少在 来自安全库的 ECC 1位中、这是预期的)?
是否知道为什么读取状态寄存器不显示预期的位?
为什么它适用于附加读取?
还有什么其他想法会出错吗?
此致、
迪尔克