请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS570LS1224 主题中讨论的其他器件:HALCOGEN
您好!
我想创建内存损坏以进行测试。 您能否建议如何造成内存损坏?
/CLN
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.
您好!
我想创建内存损坏以进行测试。 您能否建议如何造成内存损坏?
/CLN
如果要检查 RAM ECC 的正确操作、并且使用 HALCoGen 创建启动代码、只需选中"Enable ESRAM ECC Check"框即可。
这会导致在 RAM 初始化后的启动中调用函数 checkRAMECC()。
/**@fn void checkRAMECC (void)
*@简要检查 TCRAM ECC 错误检测逻辑。
*
*此函数检查 TCRAM ECC 错误检测逻辑。
//
//* sourceId:selftest_sourceId_034 *//
//* DesignId:selftest_DesignId_019 *//
////*要求:hL_SR408 */
void checkRAMECC (void)
{
volatile uint64 ramread = 0U;
volatile UINT32 regread = 0U;
uint32 tcram1ErrStat、tcram2ErrStat = 0U;
uint64 tcrama1_bk = tcramA1bit;
uint64 tcramB1_bk = tcramB1bit;
uint64 tcrama2_bk = tcramA2bit;
uint64 tcramb2_bk = tcramB2bit;
/*在设置 RAMTHRESHOLD 寄存器之前清除 RAMOCUUR */
tcram1REG->RAMOCCUR = 0U;
tcram2REG->RAMOCCUR = 0U;
/*将单位错误阈值计数设置为1 */
tcram1REG->RAMTHRESHOLD = 1U;
tcram2REG->RAMTHRESHOLD = 1U;
/*启用单个位错误生成*/
tcram1REG->RAMINTCTRL = 1U;
tcram2REG->RAMINTCTRL = 1U;
/*启用对 ECC RAM 的写入、启用 ECC 错误响应*/
tcram1REG->RAMCTRL = 0x0005010AU;
tcram2REG->RAMCTRL = 0x0005010AU;
/*在两个组中强制出现单个位错误*/
_coreDisableRamEcc_();
tcramA1bitError ^= 1U;
tcramB1bitError ^= 1U;
_coreEnableRamEcc_();
/*读取损坏的数据以生成单个位错误*/
ramread = tcramA1bit;
ramread = tcramb1bit;
//检查错误状态*/
tcram1ErrStat = tcram1REG->RAMERRSTATUS & 0x1U;
tcram2ErrStat = tcram2REG->RAMERRSTATUS & 0x1U;
/*SAFETYMCUSW 139 S MR:13.7 "LDRA 工具问题"*/
/* SAFETYMCUSW 139 S MR:13.7 "LDRA 工具问题"*/
if ((tcram1ErrStat =0U)||(tcram2ErrStat ==0U))
{
/* TCRAM 模块不反映 CPU 报告的1位错误*/
自测故障通知(CHECKRAMECC_FAIL1);
}
其他
{
if ((esmREG->SR1[0U]& 0x14000000U)!= 0x14000000U)
{
/* ESM 中未标记 TCRAM 1位错误*/
自测故障通知(CHECKRAMECC_FAIL2);
}
其他
{
/*清除 TCRAM 模块中的单个位错误标志*/
tcram1REG->RAMERRSTATUS = 0x1U;
tcram2REG->RAMERRSTATUS = 0x1U;
/*清除 ESM 状态*/
esmREG->SR1[0U]= 0x14000000U;
}
}
/*在两个组中强制出现双位错误*/
_coreDisableRamEcc_();
tcramA2bitError ^= 3U;
tcramB2bitError ^= 3U;
_coreEnableRamEcc_();
/*读取损坏的数据以生成双位错误*/
ramread = tcramA2bit;
ramread = tcramB2bit;
regread = tcram1REG->RAMUERRADDR;
regread = tcram2REG->RAMUERRADDR;
/*禁用对 ECC RAM 的写入*/
tcram1REG->RAMCTRL = 0x0005000AU;
tcram2REG->RAMCTRL = 0x0005000AU;
/*计算正确 ECC */
tcramA1bit = tcramA1_bk;
tcramB1bit = tcramB1_bk;
tcramA2bit = tcramA2_bk;
tcramB2bit = tcramB2_bk;
}