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:无法导出闪存

Guru**** 2595805 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1010824/tms570ls3137-unable-to-export-flash

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

我尝试导出以下存储器范围、但每次尝试时都会出现错误。

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

    Uniflash 将闪存内容导出到文件没有问题。 这是我的测试。  

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

    刚刚注意到、Uniflash 无法从0xAD640处的闪存读取数据。  

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

    我本应该更具体一些。 我不确定为什么它一直无法读取0xAD640

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

    存储器浏览器中是否显示0xAD640处的内容? 内容是否为有效数据?

    擦除闪存后、该地址中的内容是什么?

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

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

    这是在使用 UNIFLASH 擦除之后:

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

    将程序映像定位到闪存后、程序开始执行。 如果闪存 ECC 被启用、读取一个具有无效 ECC 值的位置将生成一个错误或者数据中止。  

    从屏幕截图中可以看出、代码大小为0xAD640。 在该地址之外、闪存内容为0xFFFFFFFF、ECC 值也为0xFFFFFFFF、这不是闪存数据的有效 ECC 值。 因此、当您尝试从未使用的闪存中导出数据时、您会失败。  

    如果您的代码中未启用闪存 ECC、则不会看到此问题。 您可以通过注释 sys_startup.c 中的以下指令来禁用闪存 ECC:

    //  _coreEnableFlashEcc_();

    您可以使用链接器 cmd 文件计算和编程整个闪存的 ECC、因此您可以读取未使用的闪存位置、并且不会获得 ECC 错误。

    请参阅此链接、了解如何使用链接器 CMD 文件生成 ECC:

    http://software-dl.ti.com/hercules/hercules_docs/latest/hercules/How_to_Guides/HowToGuides.html

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

    在我们的软件中,我们使用 Fapi_issueODE19 CommandWithAddress 函数来擦除某些扇区。 通过这种方式擦除扇区后、我们如何读取这些存储器位置、因为没有加载新的 ECC。 我认为使用 Uniflash 擦除也会加载新的 ECC。

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

    擦除闪存后、Uniflash 和 CCS 不会对 ECC 进行编程。 ECC 空间也被擦除。 当您从被擦除的扇区读取数据时、您将获得 ECC 错误。

    闪存 API  Fapi_issueAppedCommandAppiAddress (sector_erase、..) 擦除闪存扇区及其对应的 ECC 空间。 您可以使用链接器 cmd 文件将 ECC 编程到整个闪存。

    http://software-dl.ti.com/hercules/hercules_docs/latest/hercules/How_to_Guides/HowToGuides.html#launchxl2-570lc43-rm57l-linkereccrecommendation