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.

[参考译文] MSP430FR2433:配置数据存储在闪存或 EEPROM 中

Guru**** 2487425 points
Other Parts Discussed in Thread: MSP430FR2433

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1219589/msp430fr2433-configuration-data-store-in-flash-or-eeprom

器件型号:MSP430FR2433

大家好

我正在使用 MSP430FR2433器件开发一种小尺寸应用、该应用能够通过 IR 遥控来控制排针风扇。 我必须将某个值存储到 MCU 的 EEPROM 或闪存中、以便与这些值进行比较并执行操作。 基本上、在 IR 远程模式中有1、2、3、4小时休眠模式开关、因此我必须将这个小时的值存储到内存中、因此如果 MCU 重新启动或关闭电源、我可以检索这些值并开始处理。  

您能建议我如何将此信息存储到闪存中或适用于此情况的任何更好选项吗?  

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

    您可以使用 EEPROM 来存储数据。 当 MCU 开始时、会在执行任何操作之前调用这些数据

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

    您好!  

    谢谢你的答复。

    板载 EEPROM 选项不可用、如何将数据存储到 MCU EEPROM 中

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

    您可以使用外部 EEPROM

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

    您好!

    我们可以将数据写入 FRAM 吗?

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

    是的、但请记住时钟频率、可变长度和一些要设置的位。 我建议您浏览示例代码

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

    大家好。

    您能否共享示例代码? 到目前为止、我找不到任何地方可以做到这一点。

    如何选择存储器地址?

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

    请参阅特定于器件的数据表

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

    如果配置数据可以容纳在512个字节中、则最好使用信息("数据") FRAM、因为它与程序(其他所有内容) FRAM 分开保护。 链接器.cmd 文件定义了一个放置在这里的".infoA"段、因此请尝试类似的方法:

    #pragma DATA_SECTION(config_data, ".infoA") // .infoA >INFOA from .cmd file
    unsigned config_data[512/2];
    

    要对此区域执行写入操作、您需要关闭(然后重新开启)写保护、类似于:

        SYSCFG0 = FRWPPW | PFWP;    // DFWP=0 to write to Information (Data) FRAM
        config_data[0] = 0x8877;
        SYSCFG0 = FRWPPW | PFWP | DFWP; // DFWP=1

    您可能需要检查您的擦除设置("Properties->Debug->MSP430 Flash Settings->Erase Options")是否设置为"MAIN MEMORY ONLY "。 这是默认设置、但值得确保。

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

    您好!

    感谢您的答复。

    关于 FRAM、这是非常有用的信息。  

    我明白了、我已经将下面的代码添加到了 main.c 中用于缓冲区、并将段加载到.cmd 文件中、但有些点不清楚。

    #pragma DATA_SECTION(config_data, ".infoA") // .infoA >INFOA from .cmd file
    unsigned config_data[512/2];

    @存储器起始地址如何?或者它将存储来自 μ C CONFIG_DATA 的序列。 即 CONFIG_DATA[0]、CONFIG_DATA[1]等

    如何 从 FRAM 检索这些信息。

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

    在您的项目的 lnk_msp430fr2433.cmd 中、您可以看到".infoA"段被放置在内存区域"INFOA"中。

    > .infoA (NoLoad):{}> INFOA /* MSP430 info FRAM Memory Segments */

    该文件定义为从地址0x1800开始、

    > INFOA:origin = 0x1800、length = 0x0200

    这是信息 FRAM 所在的位置[请参阅数据表(SLASE59D)表6-23]。  

    ----------------

    在信息 FRAM 中写入变量需要禁用写保护、但您可以像读取任何其他变量一样、例如

    > unsigned first_config_word = config_data[0];

    当然,我刚刚发明了 config_data[]数组。 它不必是数组、甚至不必是512字节长。 我建议(作为设计)您使用单个结构或数组来映射所有配置数据、这样数据项就不会随着程序的增长而移动。

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

    您好!

    好的,我明白,它也在工作。 感谢您对此设计的支持和建议。

    FRAM 具有任何特殊限制、或者在写入或读取时需要小心、但  FRAM 需要禁用写保护选项。 ?

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

    我想不出除写保护(这实际上更具特性而不是限制)之外的任何特定 FRAM 限制。 我敢肯定、您的用例正是信息存储器发明的初衷。

    我将在这里提到(由于上面的"(NoLoad)")信息 FRAM 不会通过下载新代码进行更改(在大多数情况下也是一项功能)、因此在您的程序首次执行时将处于未知状态(可能为0xFF-s、但不能保证)。 这是由你来检测这种情况,但我要指出,这只是一个特殊的情况(意外)配置数据损坏。 可以使用合适的校验和/CRC 进行检测。

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

    大家好。

    感谢您的建议。 本链接有助于了解有关 FRAM 的更多信息。

    我将该主题标记为已解决。