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:快速问题;已禁用 FreeRTOS +闪存验证

Guru**** 2350610 points
Other Parts Discussed in Thread: TMS570LC4357, RM57L843
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/610813/tms570lc4357-quick-question-freertos-flash-verification-disabled

器件型号:TMS570LC4357
主题中讨论的其他器件: RM57L843

大家好、

我刚刚注册了 E2E。 TI、因为我正在尝试使用 FreeRTOS 刷写软件、我对此有一些疑问。 我已经学习了以下教程:

这里显示您必须禁用闪存验证。 为什么是这样? 不应该打开? 实际上、如果我不这么做、我就无法正常闪烁。

此外、"Auto ECC generation"选项的作用是什么? 它是否会链接您的软件并在链接时决定 ECC 地址?

提前感谢您、此致、

Javier Guzman

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

    您好 Javier、

    对于 TMS570LC4357和 RM57L843器件、始终启用闪存和 SRAM 存储器的 ECC 保护。 这与 TMS570LS 和 RM4系列中的 Hercules 器件不同、其中 ECC 在复位后被禁用、并在软件启用前保持禁用状态。 当闪存被擦除(0xFFFFFFFF)时、ECC 区域也被擦除(0xFFFFFFFF)、因此被擦除的闪存中充满 ECC 错误。 如果擦除整个 闪存、则将代码编程到闪存中(ECC 也编程到相应的区域)、 但未使用 的闪存仍将包含 ECC 错误。

    避免此 ECC 相关错误的最简单方法是使用链接器来生成 ECC 数据、而不是使用加载程序。

    链接器命令文件、就像您为项目所做的那样。

    2. Flash 加载程序设置:

    • 取消选中自动 ECC 生成:CCS 加载程序不会生成 ECC。CCS 加载 程序能够根据您的输出文件计算 ECC、并将 ECC 数据编程到 ECC 区域。  
    • 禁用闪存验证:因为数据区域和 ECC 区域是按单独的步骤编程的。 CCS 加载程序仅将数据加载到闪存中、链接器将为闪存中的代码生成 ECC。

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

    非常感谢您的详细解释。 您的回应确实帮助我们更好地了解了该平台。

    我唯一不能完全理解的部分是闪存验证;我是说、在这种情况下、我希望链接器为正常闪存存储器和 ECC 闪存存储器部分生成数据。 然后加载程序将所有内容放入存储器中。 为什么您说它们是按单独的步骤进行编程的、并且链接器将为闪存中的代码生成 ECC? 调用链接器时、是否会在构建步骤中生成它?

    此外、我认为闪存验证只会验证写入存储器的内容是读取的内容。 因此、即使存在 ECC 错误、只要您读取写入的内容、也无关紧要。 这有道理吗?

    请您能告诉我们您遗漏了什么、再次感谢您的回复。

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

    闪存组宽度为144位宽、包括128个数据位和16个 ECC 位。 在标准读取模式或流水线读取模式下、一次读取128位数据和16位 ECC。

    如果启用了"自动 ECC 生成"、CCS 加载程序将为每128位数据生成16位 ECC、并将这些144位数据一次编程到闪存中。

    如果使用链接器生成 ECC、则在链接阶段使用 obj 文件生成 ECC 数据、并将 ECC 数据放入 out 文件中。 加载数据时、加载器将首先对整个数据段进行编程、然后对 ECC 段进行编程。 如果启用了数据验证、则写入的数据(加上16位 ECC)将每128位写操作回读一次以进行验证、但此时 ECC 数据尚未编程。 因此将生成 ECC 错误、并且错误引脚也将被置位。

    如果存在闪存 ECC 错误、则将设置 ESM2.3、并输入代码 while (1) sook in sys_startup.c
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、王先生、

    再次感谢您的详细回答。 好的、我知道、如果 ECC 数据是由链接器生成的、加载程序将以不同的步骤刷写数据和 ECC 数据、因此会触发 ECC 错误、最终进入无限循环。 所有这些都是有道理的,我认为到目前为止我没有更多的问题:)

    非常感谢您的帮助和亲切问候、
    Javier Guzman