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.

MSP430F4794的Flash读写问题

有两组数据,需要分别存放在Segment D和Segment C中。擦除和写入函数如下:

//FLASH段擦除
void flash_erase(unsigned char *flash_ptr)
{
FCTL3 = FWKEY ; //清除LOCK标志,解锁
while(FCTL3 & BUSY); //如果处于忙状态,则等待
FCTL1 = FWKEY + ERASE ; //允许段擦除
*flash_ptr = 0; //擦除
FCTL3 = FWKEY + LOCK; //加锁
while(FCTL3 & BUSY);
}

void write_flash(unsigned char *f_ptr,unsigned char *data_array, unsigned char amount)
{
unsigned char i;
while(FCTL3 & BUSY); //如果处于忙状态,则等待
FCTL3 = FWKEY; //清除LOCK标志
FCTL1 = FWKEY + WRT ; //写操作,块编程,+ BLKWRT;
if(amount<=64)
{
for(i=0;i<amount;i++)
{
*f_ptr = *data_array;
data_array++; //发送缓冲区地址加 1
f_ptr++; //写flash时,地址加 1
while(!(FCTL3 & WAIT)); //如果处于忙状态,则等待 ,若用软件仿真,去掉这语句
}
}
FCTL1 = FWKEY; //写操作完成,清除编程允许位 WRT,BLKWRT
while(FCTL3 & BUSY);
FCTL3 = FWKEY + LOCK;
}

void write_to_seg_d()

{

flash_erase(0x1000);

write_flash(0x1000,data,10);

}

void write_to_seg_c()

{

flash_erase(0x1040);

write_flash(0x1000,data,10);

}

在主程序中,分别向C段和D段写入数据:

write_to_seg_c();

write_to_seg_d();

结果发现C段和D段的数据不能同时存储,只能保存其中一段的数据。这是为何?