主题中讨论的其他器件:TMS570LS1224
我目前正在实施 SafeTI 的运行时检查(在启动过程中也会进行相同的测试)。
所有收费测试均正常(包括故障注入)、因此我转到 SRAM 测试并立即收到错误。 SRAM_PAR_ADDR_CTRL_self_test 测试导致问题。
SL_SelfTest_SRAM()在 SL_SelfTest_Resum结果* SRAM_stResult 中返回 ST_FAIL
失败的原因是此检查(RAM 写入部分)
if (((TCRAM_RAMERRSTAT_WADDRPAR_FAIL =(uint32)(sl_tcram1REG->RAMERRSTATUS & TCRAM_RAMERRSTAT_WADDRPAR_FAIL)))&& // B1上的*写入奇偶校验错误
(TCRAM_RAMERRSTAT_WADDRPAR_FAIL =>(uint32)(sl_tcram2REG->RAMERRSTATUS & TCRAM_RAMERRSTAT_WADDRPAR_FAIL))&& // B2上的写入奇偶校验错误*/
(0!=(sl_esmREG->SSR2和((uint32) 1U <<ESM_G2ERR_B0TCM_ADPAR)))&& /* B1奇偶校验错误*/
(0!=(sl_esmREG->SSR2和((uint32) 1U <<ESM_G2ERR_B1TCM_ADPAR)))){ /* B2奇偶校验错误*/
* SRAM_stResult = ST_PASS;
}否则{
*SRAM_STResult = ST_FAIL;
}
这里是 sl_tcram2REG 检查、我的状态值为0x100、预计值为0x200。
开始
sramEccTestBuff[0]= 0xAAAAAAAABBBBBBBBUL;//在 B1和 B2上生成写入奇偶校验错误*/
代码跳转至 ESM 中断处理程序(sl_ESM_HIGH_intr_handler ()))、当到达此行(CPU 寄存器压入堆栈(位于 RAM 中)时、0x100已处于 tcram2状态。
esmOffH =(uint8) sl_esmREG->IOFFHR;
因此、很可能在启用 FIQ 中断的情况下不会运行此测试、因此无法在软件运行时运行此测试。
我在检查寄存器内容之前插入了寄存器打印、对结果进行了双重测试(根据之前的行中的注释、在这里应该是安全的)
/*恢复奇偶校验、以便我们可以使用堆栈*/
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
sl_tcram1REG->RAMCTRL =(sl_tcram1REG->RAMCTRL & 0xF0FFFFFFU);
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
sl_tcram2REG->RAMCTRL =(sl_tcram2REG->RAMCTRL & 0xF0FFFFFFU);
DBG_PRINT ("TCRAM1_STAT:0x%x、TCRAM2_STAT:0x%x\r\n"、SL_tram1REG->RAMERRSTATUS、SL_tcram2REG->RAMERRSTATUS);
if (((TCRAM_RAMERRSTAT_WADDRPAR_FAIL =(uint32)(sl_tcram1REG->RAMERRSTATUS & TCRAM_RAMERRSTAT_WADDRPAR_FAIL)))&& // B1上的*写入奇偶校验错误
(TCRAM_RAMERRSTAT_WADDRPAR_FAIL =>(uint32)(sl_tcram2REG->RAMERRSTATUS & TCRAM_RAMERRSTAT_WADDRPAR_FAIL))&& // B2上的写入奇偶校验错误*/
(0!=(sl_esmREG->SSR2和((uint32) 1U <<ESM_G2ERR_B0TCM_ADPAR)))&& /* B1奇偶校验错误*/
(0!=(sl_esmREG->SSR2和((uint32) 1U <<ESM_G2ERR_B1TCM_ADPAR)))){ /* B2奇偶校验错误*/
* SRAM_stResult = ST_PASS;
}否则{
*SRAM_STResult = ST_FAIL;
}
结果与通过调试器检查相同...
TCRAM1_STAT:0x200、TCRAM2_STAT:0x100
已尝试在 if 语句后打印,结果相同...
在任何地方都没有提到启用 FIQ 中断时无法运行此测试(看不到启动阶段测试的任何其他有意义的区别、因为此测试会单独禁用中断、因此在执行测试时不应发生上下文切换)。
解释是否正确? 如果是、您能否列出运行时不应尝试运行的所有 SafeTI 测试、pbists 等都非常明显、但与此类测试不一样。