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.

[参考译文] TMS570LS3137:读取 ECC 存储器

Guru**** 2524460 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1564104/tms570ls3137-reading-out-ecc-memory

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

工具/软件:

您好:

我正在使用 TI CGT 工具链接器为此器件生成闪存 ECC 数据。 此器件工作正常。 然后、我尝试从程序本身(在 0xf0430000 范围内)内的 ECC 地址中读出数据 — 但返回的数据与刷写到芯片中的文件不匹配。

十六进制文件中的数据上传到芯片中:

程序执行时 CCS 存储器浏览器中显示的数据 — 与程序读取返回的数据相同。  请注意、两个最低有效字节是这里每个四字节字中最高有效两个字节的副本。

如果我将程序暂停在调试器中,内存浏览器中的数据会发生变化 — 现在它与刷写期间加载到芯片中的数据相匹配! 但这对在运行时访问数据没有帮助。

我主要使用默认的 halcogen 设置 — MPU 配置是默认的、包括以下设置:

此外、闪存 ECC(强制)被禁用。 RAM ECC 已启用、但我已在 启动后尝试调用_coreDisableRamEcc_()、以查看在读取另一个 e2e 线程后这是否有任何区别 — 但没有。 如有任何建议、将不胜感激。

祝您一切顺利、

Alan

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

    您好  Alan、

    我不确定如何计算可执行文件(*。out 文件)的 ECC。 通常我使用 CCS 或链接器 cmd 来生成 ECC。

    链接器 ECC:

    7.1.由链接器生成的 ECC—Hercules 安全 MCU 文档

    用于生成 ECC 的链接器 cmd 文件示例:

    e2e.ti.com/.../1007.sys_5F00_link.cmd

    您需要更改使用链接器 cmd 文件生成 ECC 的链接器选项:

    用于加载 OUT 文件的调试设置:

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

    可以使用 _coreEnableRamEcc_() 和  _coreDisableRamEcc_() 来启用和禁用 RAM ECC。

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

    尊敬的 QJ:

    感谢您的跟进。 我让链接器使用您提到的选项生成 ECC 输出。 该输出就是第一个屏幕截图中所示的内容。

    问题在于链接器输出的 ECC 存储器区域中的数据与调试器“Memory Browser“窗口中显示的同一地址处的数据不匹配,但仅在某些情况下 — 请参阅上文。 程序停止时、数据确实匹配。 实际程序本身的读取不匹配。 我正试图弄清楚为什么会出现这种情况。 我还有其他理由相信数据正在正确编程(例如,如果闪存 ECC 实际启用、则芯片不会产生 ECC 错误)

    祝您一切顺利、

    Alan

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

    您好  Alan、

    如果启用了闪存 ECC、并且在 CPU 读取内容或从闪存获取指令时没有 ECC 错误、我确保使用正确的闪存内容和 ECC 值正确对闪存进行编程。  

    程序执行时 CCS 存储器浏览器中显示的数据 — 与程序读取返回的数据相同。  请注意、两个最低有效字节是这里每个四字节字中最高有效两个字节的副本。

    在代码执行期间、CCS 存储器浏览器窗口中的存储器内容不会动态更新。 代码执行完成或暂停后、请检查 CCS 存储器浏览器窗口中的值。  

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

    您好:

    我能够通过遵循用户手册中的要求来解决此问题:

    显然、将 ECC 存储器位置读取为字(就像 memcpy 那样)会导致读取错误的值。

    以字节读取的示例读取例程:

    uint8_t read_ptr_b (uint8_t *pu8Data);

    祝您一切顺利、

    Alan