主题中讨论的其他器件: HALCOGEN
工具与软件:
您好!
我正在开发用于航空电子的安全项目、并且我正在使用 TMS570LS3137。 我的 IDE 是 CCS。 我在评估板上尝试了 ECC 功能、 我已经过测试、检查了 RAM ECC 功能。 它工作正常、我在调试模式下观察到。
现在、我想尝试闪存 ECC。 首先、我想说明我正在使用 HALCOGEN、而在 halcogen 上启用了闪存 ECC。 比我观察到的 sys_startup.c 被称为 checkFlashECC()函数。 这里没有问题。
但我无法理解如何更改闪存上的任何位。 我认为我需要更改闪存和 ECC 闪存校验器中的任何位、应该会检测到位正在更改并运行错误中断。 请更正此情形中的问题。
您可以查看下面的 checkFlashECC()函数。
void checkFlashECC (void)
{
/*检查 CPU 内部 ECC 逻辑的操作以便访问程序闪存的例程*/
Volatile UINT32 flashread = 0u;
/*用户代码 begin (40)*/
/*用户代码结束*/
/*启用闪存模块 ECC 响应*/
flashWREG->FEDACCTRL1 = 0x000A060AU;
_coreEnableFlashEcc_();
/*启用诊断模式并选择诊断模式7 */
flashWREG->FDIAGCTRL = 0x00050007U;
/*选择 ECC 诊断模式、将被损坏的单一位*/
flashWREG->FPAROVR = 0x00005A01U;
/*设置诊断模式的触发器*/
flashWREG->FDIAGCTRL |= 0x01000000U;
/*从镜像存储器映射中读取闪存位置*/
flashread = flashBadECC1;
/*禁用诊断模式*/
flashWREG->FDIAGCTRL = 0x000A0007U;
/*这将导致由 CPU 生成和更正一个 single-bit 错误*/
/*未在闪存模块中捕获 single-bit 错误*/
/* SAFETYMCUSW 139 S MR:13.7. "硬件状态位读取检查"*/
如果((flashWREG->FEDASTATUS & 0x2U)=0U)
{
selftestFailNotification (CHECKFLASHECC_FAIL1);
}
设计
{
/*清除单位错误标志*/
flashWREG->FEDACSTATUS = 0x2U; //通过向该寄存器提供值2、我们如何清除该位?
/*清除 ESM 标志*/
esmREG->SR1[0U]= 0x40U;
/*启用诊断模式并选择诊断模式7 */
flashWREG->FDIAGCTRL = 0x00050007U;
/*选择 ECC 诊断模式、将损坏两位 ECC */
flashWREG->FPAROVR = 0x00005A03U;
/*设置诊断模式的触发器*/
flashWREG->FDIAGCTRL |= 0x01000000U;
/*从闪存位置从镜像存储器映射中读取这将导致数据中止*/
flashread = flashBadECC2;
/*读取 FUNCHERRADD 寄存器*/
flashread = flashWREG->FUNCHERRADD;
/*禁用诊断模式*/
flashWREG->FDIAGCTRL = 0x000A0007U;
}
/*用户代码 begin (41)*/
/*用户代码结束*/
}
我是否需要用于检查闪存 ECC 的额外函数或代码? 此函数在 sys_starup.c 中运行、因此它在 main 之前运行、但我在无穷循环中调用了此函数。 但没有任何变化、所以不起作用。
此外、您可以为该 MCU (F021)建议使用 flashECC 测试代码吗?