主题中讨论的其他器件: ASH、 HALCOGEN
RM46L852在启动时支持哪些检查来确保闪存中的数据有效? 如果我们需要实施它、您能给我举一个例子吗?
谢谢你。
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.
您好!
当闪存 ECC 被启用时、到程序闪存存储器的所有存取受到嵌入在 CPU 内的 SECDED 逻辑的保护。 从 f;ash 读取的数据 始终与写入该数据的数据相同、即使实际存储的位之一翻转到错误状态也是如此。
ECC 评估由 CPU 内的 ECC 控制逻辑完成。 检测到不可纠正的错误会导致处理器中止或总线错误、具体取决于请求的主器件。 根据是否启用了校正功能、可以校正或不校正检测到的可纠正错误。 包含 ECC 错误的存储器地址记录在 CPU 中。
1:针对闪存的 ECC 逻辑电路在复位时被禁用并且必须在 CPU 和闪存包装程序内进行配置。
/*为 ATCM (闪存访问)启用 CPU ECC 检查*/
_coreEnableFlashEcc_();
2.将错误检测事件从 CPU 导出到闪存包装程序、然后从闪存包装程序导出到 ESM。
/*启用 CPU 事件导出*/
/*这允许 CPU 发出检测到的任何单位或双位错误的信号
*通过其 ECC 逻辑访问程序闪存或数据 RAM。
*
_coreEnableEventBusExport_();
/*为闪存访问启用 CPU 指示的 ECC 错误响应*/
flashWREG->FEDACCTRL1 = 0x000A060AU;
3.执行诊断测试以确保 ECC 逻辑正常工作。
/*测试闪存访问的 CPU ECC 机制。
* checkFlashECC 函数使用闪存接口模块的诊断模式7
*在 CPU 对闪存的访问中创建单位和双位错误。 一个双位
读取闪存时出错会导致数据中止异常。
*编写数据中止处理程序是为了查找故意引起的异常和
*将代码执行返回到已中止的指令之后的指令。
*
*
checkFlashECC();
所有蓝色代码均通过 HALCoGen (sys_startup.c)生成