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.

[参考译文] RM46L852:引导时的 NAND 闪存 ECC 检查

Guru**** 2393495 points
Other Parts Discussed in Thread: RM46L852, HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/876561/rm46l852-nand-flash-ecc-check-at-boot

器件型号:RM46L852
主题中讨论的其他器件: ASHHALCOGEN

 RM46L852在启动时支持哪些检查来确保闪存中的数据有效? 如果我们需要实施它、您能给我举一个例子吗?

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    当闪存 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)生成