2771|4

38

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

M430 FLASH seg-A seg-B 读写问题 [复制链接]

   MSP430F149 写字符到FLASH后,读取出来会有时出错,大部分时候正常,对FLASH不是非常了解,但是偶尔不正常会造成信息出错,很麻烦,请帮忙看看。代码如下:
              //*****将字符串写入FLASH,给定首地址
void Write_string_to_flash(char *value,unsigned int addr_flash)
{
  unsigned char *Flash_ptr,i;                          // Flash pointer
  _DINT();
  Flash_ptr = (unsigned char *) addr_flash;
  /*FCTL1 = FWKEY + ERASE;                    // Set Erase bit
  FCTL3 = FWKEY;                            // Clear Lock bit
  *Flash_ptr = 0;                           // Dummy write to erase Flash segment
  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation
  */
  if((addr_flash <  RECORD_FLASH_ADDR))//保存记录时不擦除
  {
    Flash_erase(addr_flash);
  }

while(FCTL3 & BUSY)                    //如果处于忙状态,则等待
{
   ;//MY_WATCH_DOG;       //看门狗计数器清零(WDTCTL=0x5A08)
}
FCTL3 = FWKEY ;                       //清出LOCK标志
FCTL1 = FWKEY  + WRT ;              //写操作,块编程,+ BLKWRT;
if(addr_flash <  0x1100)  //在information 区,写128个
{
   i=128;
   while(i--)
   {
     *Flash_ptr++ =*value++;
    while(!(FCTL3 & WAIT))  //如果处于忙状态,则等待 ,若用软件仿真,去掉                 //这语句
      {
          ;//MY_WATCH_DOG;       //看门狗计数器清零(WDTCTL=0x5A08)
      }
   }
}
else
{
  while(*value!=0)
  {
    *Flash_ptr++ =*value++;
    while(!(FCTL3 & WAIT))  //如果处于忙状态,则等待 ,若用软件仿真,去掉                 //这语句
      {
          ;//MY_WATCH_DOG;       //看门狗计数器清零(WDTCTL=0x5A08)
      }
  }
}

FCTL1 = FWKEY;           //写操作完成,清除编程允许位 WRT,BLKWRT
while(FCTL3 & BUSY)
    {
       ;//MY_WATCH_DOG;       //看门狗计数器清零(WDTCTL=0x5A08)
    }
FCTL3 = FWKEY + LOCK;
_EINT();
}

//***********从给定的FLASH首地值起读固定长度的数据
void Read_data_from_flash(char *goal,unsigned int addr_flash,int length)
{
  char i=0;
  unsigned char *Flash_ptr;                          // Flash pointer
  _DINT();
  Flash_ptr = (unsigned char *) addr_flash;
  for(i=0;i   {
    *(goal+i)=*(Flash_ptr+i);
  }
  _EINT();
}

//******************************************************************************
//FLASH段擦除
void Flash_erase(unsigned int addr_flash)
{
   unsigned char *pc_word;                          // Flash pointer
  pc_word = (unsigned char *) addr_flash;
   //_DINT();
while(FCTL3 & BUSY)                       //如果处于忙状态,则等待
{
   ;//MY_WATCH_DOG;       //看门狗计数器清零(WDTCTL=0x5A08)
}
FCTL3 = FWKEY ;                          //清出LOCK标志,解锁
FCTL1 = FWKEY + ERASE ;                 //允许段擦除
*pc_word = 0;                         //擦除..擦除..
while(FCTL3 & BUSY)
{
   ;//MY_WATCH_DOG;       //看门狗计数器清零(WDTCTL=0x5A08)
}
FCTL3 = FWKEY + LOCK ;             //加锁
  //_EINT();
}

最新回复

那就是擦除问题了,是我说的最后一个原因。 擦除后是FF,写数据进去应该是&操作,如果你不擦除,本身里面有数据,比如说是F0,而你写入0F,可能写入的数据就变成了00,但你擦除后再写就保持0F不变的。   详情 回复 发表于 2014-9-26 11:56
 
点赞 关注

回复
举报

114

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
我记得1系列单片机的FLASH写操作是有时钟设置的,对时钟有要求的,你查看下例程,安装例程去改试试。
我暂时没遇到过读写问题,也许不是你读出来的数据出错,而是你写的时候数据就是错的。
另外FLASH擦除后的初始数据是FF,而不是00,看看是不是有影响。

点评

写进去的数据我确认过没有错,读出来的数据会有问题。擦除的操作我都是掉同一个函数进行的,但是单独擦除后就再写进去读出来就没有问题了,很奇怪。 时钟问题,我看看是不是时钟,但是如果时钟有问题不可能是不稳定  详情 回复 发表于 2014-9-26 09:34
 
 

回复

1119

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
过来看看~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

4
 
zh2244ou 发表于 2014-9-25 16:01
我记得1系列单片机的FLASH写操作是有时钟设置的,对时钟有要求的,你查看下例程,安装例程去改试试。
我暂 ...

写进去的数据我确认过没有错,读出来的数据会有问题。擦除的操作我都是掉同一个函数进行的,但是单独擦除后就再写进去读出来就没有问题了,很奇怪。
时钟问题,我看看是不是时钟,但是如果时钟有问题不可能是不稳定的啊

点评

那就是擦除问题了,是我说的最后一个原因。 擦除后是FF,写数据进去应该是&操作,如果你不擦除,本身里面有数据,比如说是F0,而你写入0F,可能写入的数据就变成了00,但你擦除后再写就保持0F不变的。  详情 回复 发表于 2014-9-26 11:56
 
 
 

回复

114

帖子

0

TA的资源

一粒金砂(高级)

5
 
ivan1022 发表于 2014-9-26 09:34
写进去的数据我确认过没有错,读出来的数据会有问题。擦除的操作我都是掉同一个函数进行的,但是单独擦除 ...

那就是擦除问题了,是我说的最后一个原因。
擦除后是FF,写数据进去应该是&操作,如果你不擦除,本身里面有数据,比如说是F0,而你写入0F,可能写入的数据就变成了00,但你擦除后再写就保持0F不变的。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表