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.

[参考译文] MSP430FR5994:如何在 MSP430FR5994上的 FRAM 中存储和操作大量数据

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1407470/msp430fr5994-how-to-store-and-operate-a-lot-data-in-fram-on-msp430fr5994

器件型号:MSP430FR5994

工具与软件:

大家好!

我目前正在使用 MSP430FR5994开发板、我计划在其上实现一个小文件系统。 我想将文件系统的一些元数据存储在 MSP430FR5994的 FRAM 中。 具体来说、考虑到 FRAM 有256KB、我想使用连续100KB 的段来存储该元数据。 数据需要能够进行读取和修改、断电后应保持完好无损。

然而、我在操作 FRAM 时面临着一些重大挑战。 我已经浏览过一份 TI 官方文档: https://www.ti.com/lit/an/slaa628b/slaa628b.pdf?ts = 1725178347028、第6页有一个示例似乎符合我的需求(请参见随附的图像)。

遗憾的是、这个示例并不完整、我仍然不确定如何实施、我也无法验证它是否真正符合我的要求。

此外、根据该示例、#pragma DATA_SECTION(a, ".Image")每次声明变量时都需要使用、这对于存储大型数据(如100KB)而言似乎很不方便。 我想知道是否有更好的方法来管理如此大量的元数据?

如果您能分享任何建议或经验、我将不胜感激。 提前感谢您的帮助!

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

    1) 1)有一些约束条件(a) MPU 仅提供3个具有1K 对齐的区域(b)以及(c)您希望对中断矢量和您的代码进行写保护  

    2) 2)对于大量数据、您可能希望使用高 FRAM (区域 FRAM2)。

    3) 3)如果您的代码恰好适合低 FRAM (区域 FRAM)、则您的生活将会更简单。

    4)使用自己的 DATA_SECTION 也会简化事情。 此外,我建议你把它打包成尽可能少的变量,理想的一个包含一切的结构。 这将防止事情发生变化。

    您可能需要使用链接器.cmd 文件和 MPU 编辑器。 我记得、文档涵盖了这些主题。

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

    您好!

    我认为 Bruce 给出了有关 FRAM 操作的良好说明。

    至于编译器方面,我建议您查看用户指南,下面我认为可以帮助组织更大的元数据:

    您可以维护一个单独的文件来组织元数据、并将此文件中的所有.text 设置到您的特定段中。

    用户指南链接: MSP430汇编语言工具 v21.6.0.LTS 

    B.R.

    SAL

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

    关于您的第一点:
    我不完全理解这款器件。 您能更详细地解释一下吗?

    关于您的第二至第四点:
    很抱歉前面没有提到这一点、但我将使用外部存储、可能是 NAND 闪存或 NOR 闪存、其中存储了文件系统的大部分数据。 但是、用于管理文件系统的元数据将存储在 FRAM 中。 因此、我强调 FRAM 需要进行读写操作、确保即使在下电上电后数据也保持不变。 如您所述、我可能需要将 FRAM 分为两部分:一部分用于低 FRAM (区域 FRAM)、另一部分用于高 FRAM (区域 FRAM2)。 RAM 和低 FRAM (区域 FRAM)将用于程序执行、而高 FRAM (区域 FRAM2)将保留用于存储元数据。

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

    链接器.cmd 文件已经提供 FRAM 和 FRAM2区域、但旨在将它们分散在这两个区域之间。 首先应删除对 FRAM2的所有引用、然后为 data_section 添加 the.section 赋值、作为">FRAM2"的唯一内容。

    您还需要将"Project -> Properties -> Debug->MSP flash -> Erase options"设置为"Erase Only required sections"。 [大概--我这里没有我的设备来检查。]

    上面我的第(1)点只是对硬件的观察。 第(2)和(3)点是后果。 实际上、3个 MPU 区域不是很多。

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

    在我看来、您应该遵循:

    1.separately 管理 FRAM 的代码区域和数据区域。

    2.为代码区域启用 MPU、为防止错误操作篡改代码区-> MPU 将具有最小对齐、请务必注意。

    B.R.

    SAL