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.

[参考译文] MSP430FR5969:如何将两个字写入 FRAM

Guru**** 2539500 points
Other Parts Discussed in Thread: MSP430FR2355

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/891115/msp430fr5969-how-to-write-two-words-to-fram

器件型号:MSP430FR5969
主题中讨论的其他器件:MSP430FR2355

晚上好…

我已经查看了用户指南和 TI 资源示例、但似乎不太了解如何在 FRAM 的数据部分写入一个字。  首先、让我证明、我是一名硬件人员、多年来一直编写小型 C 嵌入式应用。  我希望(如果可能)有一段代码将 ID #(int)写入 FRAM、以便在未来的日期根据需要读取。  当开发板到达时、我还会将此代码移植到 MSP430FR2355。  

我很困惑 bcz,我以为我只需要将解锁(0xA5)写入一个位置,然后发送数据,然后重新锁定...它看起来比这个更复杂。  此外、将2355示例代码剪切并粘贴到5969中也会出现一组错误。  有关长写入的5969示例似乎不会解锁任何寄存器。  有人可以提供帮助吗?

此致、

Steve

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

    您好!

    您可以尝试使用此 example.e2e.ti.com/.../msp430fr59xx_5F00_framwrite.cThe原因是在 MSP430FR2355中、它使用 SYSCFG0来启用或禁用 FRAM 写入。 在 FR5969中、它使用 MPU 外设来控制 FRAM 写入。  

    差异在于  

    #pragma PERSISTENT (FRAM_WRITE) 

    有关这个 cmd 的说明、请参考这个 MSP430编译器指南:http://www.ti.com/lit/ug/slau132v/slau132v.pdf 在108页

    伊斯天

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

    你好,伊斯天…

    我已经获取了5969示例代码、并将其缩减为以下代码、它起作用了!

    #pragma PERSISTENT (FRAM_WRITE)
    unsigned FRAM_WRITE[1]={0};
    
    int main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止 WDT
    FRAM_WRITE[0]= 0xFABA;
    } 

    但是,我实际上会将同一代码粘贴到应用程序中:

    #pragma PERSISTENT (FRAM_WRITE)
    unsigned FRAM_WRITE[1]={0};
    
    unsigned int CRC_RESULT、SW_RESULT、I、k、 PAYLOAD_SW = 0x0000;
    char * pyld、mssg[6]、rcv;
    
    int main (void)
    {
    WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
    FRAM_WRITE[0]= 0xFABA;
    

    我得到以下构建错误????

    "./rc.c"、第18行:错误#20:标识符"FRAM_WRITE"未定义

    请解释一下?

    谢谢

    Steve

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

    另外…

    如果我从器件中取出电池、然后更换电池、那么这种技术是否保证内存将保持不变、保持写入 FRAM 的值?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >unsigned FRAM_write[1] = {0};
    >    Fram_write[0] = 0xFABA;
    它们的名称不同。 选择一个或另一个。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我很抱歉!  呃… 是的,这很好,谢谢!!!  不过我有一个问题… 当我查看数据表时、它将 FRAM 地址显示为信息 A、B 等... 0x001800 -0x0019FF ...这是数据 FRAM 还是代码 FRAM?  我发现上面的行在0x004400上编写代码(我在项目的.map 文件中找到了)...您能解释一下为什么代码不在1800-19FF 段中,以及4400段的位置是在哪里?  其次、是否有方法可以指向特定数据区域并让它在那里写入 int?

    再次感谢所有支持

    Steve

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

    1) 1) CPU 不区分代码与数据 FRAM。 编程器通常希望保持这两个独立(数据可写、代码不可写)。 可以使用 MPU 来实现此目的。 ("Build Settings->CCS General->MPU")

    代码模型较大时、链接器(.cmd 文件)优先将代码置于"高电平" FRAM 中。

    2) 2)奕迅向您指出 CC 用户指南(SLAU132U)第5.12.22节、其中介绍了您所拥有的选项。 特别是、它有一个将 persistent 与位置相结合的示例。