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 问题 — 无法访问闪存

Guru**** 2770985 points

Other Parts Discussed in Thread: LAUNCHXL2-570LC43, TMS570LC4357, UNIFLASH, TMDX570LC43HDK

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1574177/tms570lc4357-ecc-issue---unable-to-access-flash-memory

器件型号: TMS570LC4357
主题中讨论的其他器件: UNIFLASHTMDX570LC43HDK、LAUNCHXL2-570LC43

工具/软件:

我在 TMS570LC4357 微控制器方面遇到了与错误校正码 (ECC) 相关的问题。 启用 ECC、更新命令文件中的 ECC 位置、并将代码加载到控制器后、我不再能够:

1.加载任何代码(带或不带 ECC)
2.擦除闪存
3.对闪存执行任何操作

但是、我能够:

1.连接到电路板
2.使用 Code Composer Studio 成功测试连接

3.读取寄存器

4.进入调试模式,逐行执行预先存在的代码

  • 通过工程属性启用 ECC ->构建-> Arm 链接器->高级选项->链接器输出->控制 ECC 生成是打开还是关闭->设置为打开
  • 在 CMD 文件中更新了 ECC 位置:

          例如:

                 FLASH_LOCATION      : origin = 0x00020000, length = 0x7BE0  

                闪存 ECC  :origin = 0xF0401000 length = 0xF7C ECC ={INPUT_RANGE = Flash_location}

  • 在调试配置中禁用自动 ECC 生成。

是否有人遇到过类似的问题? 如果有、将非常感谢任何指导或解决办法。

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

    尊敬的 Jishnu:

    1. TMS570LC4357 上的 ECC 行为:
    • TMS570LC4357 上默认会启用 SECDED(一位错误校正和双位错误检测)模块、并且无法禁用
    • 这是该器件的永久配置、这意味着 ECC 始终处于启用模式
    1. 了解问题:闪存编程问题的根本原因似乎与 ECC 在此器件上的工作方式有关。 当闪存被擦除时:
    • 闪存内容变为 0xFFFFFFFF
    • 相应的 ECC 空间也被擦除为 0xFFFFFFFF
    • 这会为闪存内容创建无效的 ECC 值
    • 由于默认启用了 SECDED、ECC 逻辑会尝试纠正 1 位错误、因此某些位在擦除后显示不正确
    1. 解决方法:要解决您的问题、请考虑以下事项:

    a) 对于闪存编程:

    • 确保使用的是正确的 ECC 生成方法
    • 尝试使用 Fapi_AutoEccGeneration 模式(如果可用)
    • 确保为闪存内容正确计算和写入 ECC 值

    b) 对于您的特定 CMD 文件配置:

    • 验证 ECC 位置是否正确映射到其相应的闪存区域
    • 确保正确计算闪存和 ECC 区域的长度参数
    1. 重要注意事项:
    • ECC 使能寄存器不控制 ECC 编程;它只控制对从闪存读取的 ECC 错误数据的评估
    • 稍后将有效数据写入存储器时、将计算正确的 ECC 值并自动写入 ECC 区域

    建议:

    1. 在命令文件中仔细检查 ECC 区域映射
    2. 确保您使用适当的了解 ECC 要求的闪存编程工具
    3. 如果需要、可以考虑使用引导加载程序方法、因为器件将始终从闪存执行代码
    4. 确保任何闪存编程操作都包含正确的 ECC 值生成

    您是否可以分享:

    1. 您正在使用哪个闪存编程工具?
    2. 是否需要完整的命令文件配置?
    3. 您在闪存操作期间收到任何错误消息?

    这些附加信息将有助于为您的情况提供更具体的指导。

    --
    此致、
    Jagadish。

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

    尊敬的 Jagadish:

    感谢 TMS570LC4357 上 ECC 行为的详细说明。  但是、使用遇到 ECC 错误的控制器时、我仍会遇到重大问题。 遗憾的是、发生 ECC 错误后、受影响的控制器将无法访问、从而无法进行正常的刷写或擦除过程。

    编程工具和版本

    • Code Composer Studio:版本 10.1.1.00004

    • 编译器:TI-CGT-ARM_20.2.4.LTS

    • Uniflash:9.2.0.5300(云版本尚未尝试)

    涉及的电路板

    • 我们在 4 个电路板上始终看到这个问题、具体来说就是 2 个 LAUNCHXL2-570LC43 套件和 2 个 TMDX570LC43HDK Hercules TMS570LC43x 开发套件。

    • 这个问题出现在 TI 开发板上、未经定制硬件测试。

    观察到的行为

    • 尝试使用 CCS 进行刷写时、调试会话在闪存擦除开始之前失败;CCS 崩溃并在没有警告的情况下关闭、从而阻止加载新代码。

    • Uniflash 也无法擦除或访问这些受影响电路板上的闪存(未测试的云版本)。

    • 控制器在发生 ECC 错误后基本上无法使用、使得当前工具集无法进行传统恢复。

    错误消息

    • 在 CCS 中观察到的主要错误是:

      文本
      CortexR5: File Loader: Memory write failed: Flash algorithm returned an error during Flash programming. Note: Auto ECC generation is on, please make sure that the data sections are 64-bit memory aligned in your linker file; alternately, turn off Auto ECC generation in the On-Chip Flash settings CortexR5: GEL: File: Z:/.../../../BUILD/Debug/CODE.out.tek: Load failed.

      此错误仅出现一次、任何后续加载代码尝试都会导致 CCS IDE 突然关闭、而不会输出进一步的错误。

    • 过去、 遇到了引用 DAP EROR 的不同错误、但在电路板进入该锁定状态后该错误也不再出现。

    其他恢复尝试

    • 在其他地方找到的建议如果出现“Device Locked“提示时、建议使用“强制批量擦除“选项、但 CCS 和 Uniflash 都不能提供此功能。 如果有这种选择、欢迎就如何利用这种选择提供指导。

    请求进一步指导
    是否有任何已知的步骤来恢复受永久性 ECC 错误影响的主板、或者这种情况是否需要更换设备? 非常希望在器件解锁、批量擦除功能或其他故障排除步骤方面做出任何澄清。

    此致、
    Jishnu

     

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

    尊敬的 Jishnu:

    对延迟的回复表示歉意!

    [引述 userid=“673138" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1574177/tms570lc4357-ecc-issue---unable-to-access-flash-memory/6095138

    在 CCS 中观察到的主要错误是:

    文本
    CortexR5: File Loader: Memory write failed: Flash algorithm returned an error during Flash programming. Note: Auto ECC generation is on, please make sure that the data sections are 64-bit memory aligned in your linker file; alternately, turn off Auto ECC generation in the On-Chip Flash settings CortexR5: GEL: File: Z:/.../../../BUILD/Debug/CODE.out.tek: Load failed.
    [/报价]

    我在这里发现了非常类似的问题:

    (+) CCS/TMS570LS0432:闪存算法返回错误;数据部分非 64 位对齐 — ECC 问题 — 基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛

    此问题的根本原因是利用了更高的.bss 段存储器。

    因此、我们来确认是针对一个特定代码还是针对每个代码出现了此问题。 以一个小示例为例、如果效果良好、可以尝试使用一次、然后我们可以在代码中进一步验证出了什么问题。

    另一个原因可能是:

    对齐问题、要立即对设备进行编程、您可以暂时禁用自动 ECC 生成并验证一次。

    --
    此致、
    Jagadish。