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.

关于MSP430G2452操作flash读写的问题

项目里有些信息需要实现掉电不丢数据,所以我把一些数据放入了flash中,但是发现重新上电后数据并没有存入,我的读写flash的代码如下,读写的起始地址是0x1040

#define SegmentStart 0x1040 //0x01080 //Segment = 0x01000~0x010FF

void FlashWriteChar(unsigned int addr, char Data);
char FlashReadChar(unsigned int Addr);

void FlashWriteChar(unsigned int addr, char Data)
{
    char *FlashPtr = (char *)addr; // Segment  pointer
    FCTL3 = FWKEY;              // Clear Lock bit
    FCTL1 = FWKEY + ERASE;      // Set Erase bit
    *FlashPtr = 0;             // Dummy write to erase Flash seg
    //_DINT();
    *FlashPtr = Data; // Save Data
    //_EINT();
    FCTL1 = FWKEY;        // Clear WRT bit
    FCTL3 = FWKEY + LOCK; // Set LOCK bit
}

char FlashReadChar(unsigned int Addr)
{
    char Data;
    char *FlashPtr = (char *)Addr;
    Data = *FlashPtr;
    return (Data);
}

mian函数中部分初始化代码如下:

void main( void )
{
   WDTCTL = WDTPW + WDTHOLD;
   FCTL2 = FWKEY + FSSEL0 + FN1; // MCLK/3 for Flash Timing Generator

  • 您是写在了MSP430的 information memory?MSP430内部有几十个字节information memory 可以当EEPROM来用, 用于保存需要掉电保存的数据.

    之前论坛上有一个专门的帖子,您可以参考一下

    e2echina.ti.com/.../30948
  • 我在程序中,比如按键按下,我把状态字累加后写入flash,然后我再从flash中读出来,是正确的,但是我掉电后,用其它按键触发,把值读出来,就为0
  • 写入后,重新读出正确,按说flash读写部分的程序没有问题。

    换其他按键触发,这部分控制逻辑和之前的按键一样吗?

    建议提供下完整代码

  • 按键触发都是一样的,按键扫描状态机来的,触发都是正常触发。

    验证是否写入成功必须入下面的代码,写入后再读出来执行,效果是对的

    if(get_DIR_index != key_count_DIR)
    		  {
    			  get_DIR_index = key_count_DIR;
    			  if(get_DIR_index > 4)
    			  {
    				  get_DIR_index = 1 ;
    				  key_count_DIR = 1 ;
    			  }
    			  //Setting_Directions(get_DIR_index);
    			  FlashWriteChar(SegmentStart + DirectioneTep, get_DIR_index);//写入参数
    			  Setting_Directions(FlashReadChar(SegmentStart + DirectioneTep));//设置的参数由flash中读取
    		  }

    掉电后重新上电,我用另一个按键来读取flash中的值,但是并没有效果,读取到参数后,

    				  if(get_CorTep_index != key_count_CorTep)
    				  {
    					  get_CorTep_index = key_count_CorTep;
    					  if(get_CorTep_index > 2)
    					  {
    						  get_CorTep_index = 1 ;
    						  key_count_CorTep = 1 ;
    					  }
    					  //Setting_Color_temperature(get_CorTep_index);
    					  FlashWriteChar(SegmentStart + ColorTep, get_CorTep_index);
    					  Setting_Color_temperature(FlashReadChar(SegmentStart + ColorTep));
    					  get_CorTep_index = FlashReadChar(SegmentStart + ColorTep);
    					  get_DIR_index = FlashReadChar(SegmentStart + DirectioneTep);
    					  get_KEYSTONE_index = FlashReadChar(SegmentStart + KeyStone_Tep);
    					  get_SIZE_index = FlashReadChar(SegmentStart + DisplaySize_Tep);
    				  }

    读取到参数后,在loop中,参数出现改变就会触发,但是并没有变化

  • 有MSP430芯片的FAE的联系方式么?这边项目比较急,需要FAE技术支持