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.

MSP430FR6972: FRAM读写丢失

Part Number: MSP430FR6972

我用官方的例程读写FRAM后,仿真器重新加载后内容全变为0,芯片不掉电仿真器重新加载后被写区域也变0

  • 你好,请问你是完全参考例程的吗?有对例程做过哪些修改?

  • #define WRITE_SIZE 128

    #pragma PERSISTENT(FRAM_write)
    unsigned char FRAM_write[WRITE_SIZE] = {0};

    void FRAMWrite(unsigned char *buff,unsigned char len)
    {
    unsigned int i=0;

    for ( i= 0; i < len; i++)
    {
    FRAM_write[i] = buff[i];
    }

    }


    void FRAMRead(unsigned char *buff,unsigned char len)
    {
    unsigned int i=0;

    for ( i= 0; i < len; i++)
    {
    buff[i]= FRAM_write[i] ;
    }

    }

  • 用仿真器保存不了,但是不用仿真器直接烧写到单片机掉电会保存,是不是仿真器需要再那设置

  • 说实话,一般都是在flash模式下使用flashAPI工程,没测试过ram模式下,所以我也不确定ram下使用例程是否有效。

  • 啥意思,用仿真器是在ram模式吗?不能设置吗

  • 应该是仿真器加载程序的时候把内部存储全部擦掉了,能不能设置一下

  • 是的,仿真器是ram模式。而且ram运行的话重新上下电或者复位芯片都会把ram全部擦除,因为ram本身就是掉电丢失内容,这个没办法设置。

  • 对,ram肯定会擦除掉,我保存数据是保存在fram,ram肯定不行啊,仿真器不能设置fram某些区域不擦除?而且ti给的例程没有指定写fram的的地址,怎么才能读写指定地址的fram,或者用ti的例程可以把仿真器设置为不擦除那块fram

  • 重新加载代码时会重新初始化 PERSISTENT 数据。 (复位时不会重新初始化。)为避免这种情况,可以使用 NOINIT [参考CC User Guide (SLAU132U) Sec 5.12.22]。 使用 NOINIT 需要注意:

    1) 需要修改CCS download设置“Project->Properties->Debug->MSP430 Flash Settings”更改为“Replacewritten”或“..necessary segment”。(或者使用Information Memory。)

    2) 代码必须指定何时初始化该区域,因为它的内容是不确定的。

  • 好的,多谢