请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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; }