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.

[参考译文] MSP430FR6989:定义大于信息段的 FRAM 区域

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1013912/msp430fr6989-defining-fram-region-larger-than-info-segments

器件型号:MSP430FR6989

你好

我将一些代码重新写入 MSP430FR6989、我需要比区域信息 A-D 的0x200字节更大的存储器部分 因为我正在重写现有的 EEPROM 例程、我不想使这些例程与现在完全不同。 我可以使需要的每个变量保持不变、但我认为通过定义完整的 FRAM 部分并将其视为 EEPROM 仿真、使其更容易。 然后、我可以在该区域使用常规读/写函数。 有人能说如何界定这种区域吗?

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

    您好、Adam、

    如果您想在 FRAM 上执行 EEPROM 仿真、请参阅以下资源。 我们提供了有关此主题的应用手册和 TI 设计、可解决您的问题。  

    应用手册: www.ti.com/lit/slaa769 

    TI 参考设计: https://www.ti.com/tool/TIDM-FRAM-EEPROM 

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

    您好 Jace、

    这不是我需要的、我已经看到了这些 PDF。 现在让我们完全忘记 EEPROM、我只想为编译器/链接器标记 FRAM 中的某个区域、使其不存在代码/数据、然后我可以轻松地将数据读取并写入该 FRAM。 现在、我可以使用0x1800-0x2000的信息区域、但它有点太小了。 我可以假设编译器不应意外使用这些区域。 我可以使用一些引导加载程序器件、因为它就在它旁边。 或者、只要在我想要的任何位置编写代码就足够了、如果我不使用引导加载程序、并且我猜信息 A-D 未被使用、这是可以的? 但是、如果需要更多的 FRAM 用于数据、那么了解如何保留 FRAM 的任何部分是很好的。 我使用默认的 TI 编译器

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

    当然、您可以编辑链接器脚本以留出 FRAM 区域并在其中放置一个特殊段。 但有一种更简单的方法。 内存从下而上分配、因此除非代码增长很大、否则永远不会使用最高地址。 因此、只需使用一个块。

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

    我找到了一些解决方案、首先定义如下:

    pragma PERSISTENT (A)
    uint16_t a[1000]={0};

    事实证明、MSP430FR6989会自动将数据放在0x4400地址上、并且空间很大、因此一个问题就解决了。 其次、在工程属性中设置 MPU 选项是一个选项、或者更改链接器脚本、但它不起作用。  我尝试更改 FRAM 的 cmd 文件中的默认区域和长度、但它不会编译、说它是重叠的、但不会。 奇怪

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

    一些可能会指导您的观察结果:

    1)每次重新加载代码时、持久性数据都会被覆盖(它在.elf 文件中显示为.text-ish 段)。 如果这不是你想要的(几乎不是我想要的),请使用 NOINIT()。

    2) 2)信息段的优点是:(a)它们已经出现在.cmd 文件中、(b)它们始终保持在它们所在的位置。 当您重新编译/重新加载代码时、persistent 和 NOINIT 数据可以移动。 处理此问题的唯一方法(我知道)是使用 DATA_SECTION ()来定义私有段,并在.cmd 中添加一个内存和一个 SECTIONS 行,以强制它在您想要的位置运行(如 David 所说, FRAM 的顶部通常是一个不错的选择)。

    3) 3)默认情况下、代码下载程序将擦除所有 FRAM。 您可以使用"Project->Properties->Debug->MSP430 Flash Settings->Erase Options"来避免这种情况。 选择"替换已写入"或"需要擦除"(有区别、我模糊地回忆起其中第一个更好的工作)。

    4) 4) CCS 中的 MPU 编辑器存在的一个危险是(观察到的行为)使用"manually specify"框不会为您提供默认的 MPU 映射。 您应该仔细检查所有设置、并确保所有代码都具有读取和执行权限。

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

    信息段的缺点是链接器脚本中的支持不平衡。 对 gcc 脚本的快速检查表明、虽然信息内存段被定义、但是不会通过"Provide (提供)"导出符号。 使用 section 属性似乎不受支持、因为手册中说 section 属性将添加 lower、upper 或作为前缀。 没有什么可以替代的。

    当然、我可以编辑链接器脚本。 每次 mspgcc 链接器脚本提供这些符号。

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

    感谢您提供有用的信息! 我认为删除 FRAM 不会是一个问题。