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.

[参考译文] MSP430FR5728:复位后如何检查 FRAM 中是否有数据可用

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1100268/msp430fr5728-how-to-check-if-data-available-in-fram-after-reset

器件型号:MSP430FR5728

大家好、

我正在为客户开发基于 MSP430FR5728的应用。

 应用中、计数器数据在 正常操作中存储在 FRAM 中。

复位后、在再次初始化所有外设之前、我需要知道 FRAM 上是否有任何保留的数据。

  1. 如何检查 FRAM 中是否有任何有效的计数器数据或前一周期中的保留数据?
  2. 执行此检查的步骤或程序是什么?  

谢谢

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

    尊敬的 Aswin:

    不确定我是否完全理解您在这里询问的内容、但如果问题是如何将数据存储在 FRAM 中(例如、来自计时器的计数器值)、则读取 FRAM 位置以查看后续重启时的值、请参阅此 E2E文章

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

    尊敬的 Dennis:  

    感谢您的快速回答。

    问题是,如何从 FRAM 读取存储的数据?  

    例如,如果应用程序将 数据存储在 启用 R/W 的主存储器的段1中,如何获取该数据?

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

    FRAM 的工作方式与 RAM 类似、因此您只需读取数据即可。  本质上、您声明位于 FRAM 中的变量(根据上面 E2E 帖子中的示例)、并像读取变量位于 RAM 中一样进行读取。

    使用上述示例之一、下面介绍了它的工作原理。  请注意、最好使用写保护设置来防止 FRAM 变量被覆盖、但在本示例中、假设写保护被禁用。  另请注意、无论写入保护设置如何、您都可以读取 FRAM 变量。

    /*
     * Example
     * Declare variable 'apple' in FRAM
     */
    #pragma PERSISTENT(apple)
    uint16_t apple = 0;
    
    // A variable in RAM
    uint16_t pie;
    
    /*
     * Note: it is always recommended to write protect your data in FRAM using the write-protection mechanism.
     * For simplicity, FRAM write protection is assumed to be already disabled in this example.
     */
    int main(void)
    {
    	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
    
    	apple = 0xAA55;                            // write a value the variable in FRAM
    	
    	pie = apple;                               // read the value from the variable in FRAM and place (copy) into RAM variable
    
    	while(1);
    
    }

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

    尊敬的 Dennis:


    感谢您的解释。


    我在 该文档中有关于 FRAM 和链接器命令文件的另一个查询:

    www.ti.com/.../slaa628b.pdf

    本文档中提到、默认情况下变量存储在 SRAM 中、要将变量从 SRAM 移到 FRAM、需要修改链接器命令文件。

    我的查询是,使用#pragma 指令在 FRAM 中分配变量是否足够,以及是否应该修改链接器
    命令文件?

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

    尊敬的 Aswin:

    除非要在 FRAM 中的特定位置创建自己的段、否则无需修改链接器命令文件。  已经为 FRAM 分配了.TI.persistent 存储器段、因此默认情况下链接器将看到#pragma PERSISTENT 将会相应地放置它

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

    尊敬的 Dennis:

    感谢您的回答。

    在我的应用程序中、除了"用户信息"段之外、我仅使用与用户指南(常量、变量和程序代码)中所述相同的三个段。


    但根据 我的需要、我必须将每个段的大小修改为:

    -段1 -[常量]        - C000h  - C3FFh - 1.023 KB
    -段2 -[变量]        - C400h  - CBFFh - 2.047 KB
    -段3 -[程序代码]   - CC00h  – FFFFh - 13.311 KB

    正如您在前面的注释中提到的、我是否还应该修改连接器命令文件、以便对 现有段进行上述修改?