TI中文支持网
TI专业的中文技术问题搜集分享网站

关于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  pointerFCTL3 = FWKEY;// Clear Lock bitFCTL1 = FWKEY + ERASE;// Set Erase bit*FlashPtr = 0;// Dummy write to erase Flash seg//_DINT();*FlashPtr = Data; // Save Data//_EINT();FCTL1 = FWKEY;// Clear WRT bitFCTL3 = 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

Susan Yang:

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

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

e2echina.ti.com/…/30948

深山夕照:

回复 Susan Yang:

我在程序中,比如按键按下,我把状态字累加后写入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中,参数出现改变就会触发,但是并没有变化

深山夕照:

回复 Susan Yang:

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

赞(0)
未经允许不得转载:TI中文支持网 » 关于MSP430G2452操作flash读写的问题
分享到: 更多 (0)