本帖最后由 yl20084784 于 2016-12-25 02:10 编辑
写了个小程序msp430F1611,用串口发送指令让430擦出几十KB,然后写指定的个数的0。就这么个程序,擦出一小段的时候正常,到后面就擦出不了了。
举例:
第一步:设置擦出从0x5a00开始到0xfefe,然后写40KB个0
第二步:设置擦出从0x5a00开始到0xfefe,然后写4个0。
结果就出错了。结果如下图。
按正常逻辑,擦出完毕后,0x5a03以后就应该全部是0xffff,但是到0x5c00以后就全部是0了,之前写的没擦出成功。而到了0xf640的时候值又变成0xffff了。
附上相关flash设置代码:
DCO约900KHZ
FCTL2 = FWKEY + FSSEL_2 + FN1; // SMCLK/3 for Flash Timing Generator
FCTL1 = FWKEY + ERASE; // Set Erase bit
FCTL3 = FWKEY; // Clear Lock bit
__disable_interrupt();
for(i=0;i<94;i++)
{
*(char *)(0x5a00+i*0x200) = 0; // Dummy write to erase Flash segment 一个块是512B
__delay_cycles(1000);
}
FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
__delay_cycles(1000);
i=atoi(R_data);//ASCii转换到十进制
FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
FCTL3 = FWKEY; // Clear WRT bit
for(P=(char *)0x5a00;P<(char *)0x5a00+i;P++)
{
*P=MarK;
}
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK; // Set LOCK bit
此帖出自
小平头技术问答
一周热门 更多>