MSP430的FLASH编程奇葩问题,已解决

2019-03-24 08:44发布

本帖最后由 yl20084784 于 2016-12-25 02:10 编辑

写了个小程序msp430F1611,用串口发送指令让430擦出几十KB,然后写指定的个数的0。就这么个程序,擦出一小段的时候正常,到后面就擦出不了了。
举例:
第一步:设置擦出从0x5a00开始到0xfefe,然后写40KB个0
第二步:设置擦出从0x5a00开始到0xfefe,然后写4个0。
结果就出错了。结果如下图。
QQ图片20161224222853.png
按正常逻辑,擦出完毕后,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



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
yl20084784
1楼-- · 2019-03-24 16:32
 精彩回答 2  元偷偷看……
tlwlwzfw
2楼-- · 2019-03-24 17:32
< :TI_MSP430_内容页_SA7 -->

一周热门 更多>

相关问题

    相关文章