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.

[参考译文] TMS570LC4357:在闪存 ECC 上使用 Fapi_doBlankCheckByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByBy

Guru**** 2484615 points
Other Parts Discussed in Thread: TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/729966/tms570lc4357-using-fapi_doblankcheckbybyte-on-flash-ecc-appears-to-return-incorrect-status

器件型号:TMS570LC4357

我们尝试使用 Fapi_AutoEccGeneration 参数对闪存进行编程、但不使用链接器生成的 ECC 代码。 然后、我们希望将未使用的部分编程为0xFFFFFFFF、就好像它们是空白的一样、因此我们不会在任何可能的缓存等上出现 ECC 错误 我们需要执行此操作(而不是生成链接器)、因为我们要将程序作为临时处理放置在闪存区域中(并在重新启动后将其复制到适当区域)、因此链接器生成的 ECC 代码将在临时区域中失败。

为此,我们尝试在 ECC 闪存区域上使用 Fapi_doBlankCheckByByByByByByByByByByByByByByByByByByByByByByByByByByByBy 如果状态返回 Fapi_Status_Success 、我们将相应的闪存区域编程为0xFFFFFFFF。 这一切似乎都可以正常工作、我可以使用调试器查看存储器、不会出现任何 ECC 错误、但是...

我注意到这里有一个字节、但它不正确。  当 ECC 闪存数据为0xFF 时,从 Fapi_doBlankCheckByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByBy 此例程如何确定 ECC 闪存是否为空白? 我是否还需要检查相应的闪存区域是否为空白? 当我这么做时,当我在 未编程的闪存上调用 Fapi_doBlankCheck()时,我似乎会遇到 ECC 错误?

感谢您提供任何信息/建议。

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

    默认情况下、TMS570LC4357上的 ECC 处于启用状态、无法禁用。 正如数据表所述、在启用 SECDED 之前、所有程序存储器空间(闪存组0至组6)的 ECC 值必须被编程到闪存中。 这可以通过您提到的链接器 cmd 文件来完成。

    Cortex-R5 CPU 可以生成推测取指令到存储器空间内的任何位置。 对具有无效 ECC 的位置的推测取指令(随后未使用)不会创建中止、但会为可纠正或不可纠正的错误设置 ESM 标志。 不可纠正的错误将无条件地导致 nERROR 引脚切换为低电平。 因此、必须注意为整个 ATCM 空间生成正确的 ECC、包括段与任何未使用或空白闪存区域之间的空洞。

    Fapi_doBlankCheck 函数不仅仅是读取一个位置并检查0xFFFFFFFF。 它实际上会将闪存置于"读取裕量1"模式。 这不仅可确保闪存被擦除、还可使用一些额外的裕量擦除。 是的、在检查 ECC 值是否也为空时、需要执行字节空白检查。