项目里有些信息需要实现掉电不丢数据,所以我把一些数据放入了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技术支持