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.

[参考译文] MSP430FR5972:信息内存段

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/600201/msp430fr5972-info-memory-segment

器件型号:MSP430FR5972
主题中讨论的其他器件: MSP430F5232

各位专家:

我将 MSP430FR5972控制器用于我的项目、我希望将数据记录到信息存储器中、因此我需要有关如何将数据写入信息存储器的信息、或者我们可以直接访问信息存储器。

是否有任何代码片段可用于显示如何将数据写入信息存储器。

我想知道 信息存储器的 A 段是如何与所有其他段分开锁定的。(与控制器 MSP430F5232中的段类似)。

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

    您好、Himanshu、

    感谢您发帖。 您可以使用定义一个数组并将其设置为放置在信息存储器中、例如:

    #pragma DATA_SECTION (loggingData、".infoD")
    unsigned char loggingData[128]; 

    然后、您可以像访问 RAM 中的任何阵列一样访问 logingData (例如、logingData[x]= 42;//将42写入到索引 x 中的 logingData) -由于这是一个 FRAM 器件而不是闪存、因此您不必像处理 MSP430F5232上的闪存控制器那样进行特殊处理。 但是、在这种情况下、您还需要修改 MPU (存储器保护单元)设置、以便信息存储器具有读取+写入访问权限(MPU 工具中的默认设置是信息存储器的只读访问权限)。 如果您愿意、我可以为您提供有关如何执行该操作的更多详细信息、 但首先、我想确保使用信息存储器是适合您的用例的解决方案、并确保我为您尝试执行的操作提供正确的建议。

    我想进一步了解您的数据记录-您需要多少数据记录空间? 我问您需要多少空间是因为信息内存的每个部分只有0x80字节。 但是、由于这是一个 FRAM 器件、因此您可以根据需要轻松使用更大的 FRAM 进行数据记录。 使用 FRAM、您不必在闪存器件上执行任何特殊处理: 在闪存器件中、信息存储器尤为重要、因为您必须先擦除闪存、然后才能写入闪存-使用信息存储器、您可以擦除该区域而不会有擦除代码的风险。 而在 FRAM 器件上、您可以不必担心地使用主 FRAM、因为写入前无需擦除、并且我们提供了 MPU (存储器保护单元)来防止您意外覆盖应用代码。  MPU 允许您将主 FRAM 分区为最多3个段、并为 每个段设置访问权限(读取、写入、执行)。 我们通过在 CCS 中提供自动存储器分区和 MPU 设置方法来简化这一过程。 只需使用#pragma PERSISTENT 将任何要读取+写入可访问的数组等(例如、记录数据)放置到.persistent 区域中。

    #pragma PERSISTENT (logingData)
    unsigned char logingData[2000]={0}; 

    在这种情况下、您可以将 MPU 工具中的所有内容保留为默认值、该工具位于 MPU 选项卡上的 Project > Properties > General 中(将其保留为"enable MPU"和"let compiler handle memory partitioning...")。 记录数据将在电源循环期间保留、您不必再进行任何进一步的特殊处理、只需将其视为 RAM 中的正常阵列即可。 这使您可以在需要时在日志数据中拥有更多数据、并且无需进行任何修改即可为项目正确设置 MPU。

    此致、

    Katie

     

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

    您好 Katie Pier、

    感谢你的答复。 现在、我的要求只是记录20字节的数据、所以您可以共享需要更改的 MPU 设置来访问 信息 D、以便我可以在信息 D 中读取+写入

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

    您好、Himanshu、

    感谢您提供更多信息。 您可以在 CCS 中包含的 MPU 工具中非常简单地进行更改。 转至 Project > Properties > General。 选择"MPU"选项卡。

    选择启用存储器保护单元(MPU)、然后选择"手动指定存储器段边界和访问权限"。 如果您的所有主 FRAM 区域仅用于常量和代码、则我们可以通过将边界设置为0x4400 (FRAM 的开头) 并将权限设置为读取+执行来为所有主存储器设置一个段。 然后、对于信息存储器、选择"读取+写入权限"、以便您可以将信息存储器用于变量。 请参阅显示这些设置的屏幕截图:

    这应该是您必须做的所有事情。 现在、您可以将日志记录数据放入信息 D 段中、正如我在上一篇文章中所示。

    此致、

    Katie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您分享此信息。
    它真的很有帮助。
    最后一个问题是、如果我想将数据记录到所有信息存储器中、例如信息存储器 D、C、B、A、那么这是正确的方法:

    #pragma DATA_SECTION (loggingData、".infoD")
    unsigned char loggingData[128];

    #pragma DATA_SECTION (数据、".infoC")
    unsigned char Data[128];

    #pragma DATA_SECTION (MEMORY_DATA、".infoB")
    unsigned char memory_data[128];
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Himanshu、

    很高兴我能提供帮助! 是的、在其他信息部分记录其他数据时、这看起来是正确的。

    此致、

    Katie