查看: 3300|回复: 5

[已解决] flash 模拟e2,重复写数据出错(已解决)

[复制链接]

该用户从未签到

16

主题

61

帖子

0

注册会员

Rank: 2

积分
137
最后登录
1970-1-1
发表于 2014-6-19 16:28:39 | 显示全部楼层 |阅读模式
在用s08sc4的8位片子,参照网上查找的用flash模拟eeprom的方法,用s08sc4的flash模拟eeprom。仿真运行的时候,读、写flash都是成功的,但是只有第一次写flash是正确的,读回来的和写入的是数据一致。
当在同一地址上再写其他不同的数据时,发现读回来的数据和写入的数据不一致,可以肯定的时候读没有问题,所以写的数据出错。
为什么只有第一次写是ok的,第二次,第三次写就不正常呢?
求高手指点???
代码如下:
/***********************************************************************
#define  FlashData       FlashMem[6]                         // ,
#define  FlashAddr       (*((word *)(&FlashMem[8])) )          // ,
#define  FlashCmd       FlashMem[11]                        // ,   
#define  RunFlashCmd    ((void (*)(void))((word)FlashMem))     // 
byte FlashMem[32] =
{
    0xA6,0x10,0xC7,0x18,0x25,0xA6,
    0x00,0xC7,0xFD,0x00,0xA6,0x20,0xC7,0x18,0x26,0xA6,
    0xC0,0xC7,0x18,0x25,0x9D,0x9D,0x9D,0x9D,0xC6,0x18,0x25,0xA5,0x40,0x27,0xF9,0x81
};
void flash_byte_write(word add,byte sdata)
{
   byte data=sdata;
   __RESET_WATCHDOG();
   DisableInterrupts;
   FlashData = data; // 更新数据
   FlashAddr = add;  // 更新地址
   FlashCmd = 0x20;  // 字节编程命令: 0x20
   RunFlashCmd();    // 32字节程序入口
   EnableInterrupts;
}
void flash_Sector_erase(word add)
{
  __RESET_WATCHDOG();
  DisableInterrupts;
  FlashAddr = add;       // Flash地址 
  FlashCmd = mPageErase; // 扇区删除命令: 0x40
  RunFlashCmd();         // 32字节程序入口
  EnableInterrupts;
}
byte flash_byte_read(word add)
{
  byte tempbyte;
 asm{
       LDHX add
       LDA  ,X       //读取地址到数据变量
       STA  tempbyte
     }
  __RESET_WATCHDOG();
 return tempbyte;
}

void E2_read_data(word add,byte len)
{
 byte i;
 word addr;
  addr=add;
 __RESET_WATCHDOG();
 for(i=0;i
我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-6-19 16:33:57 | 显示全部楼层

RE:flash 模拟e2,重复写数据出错

楼主,你重写之前有没有先清除下,要先清掉才可以再重写的。
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

61

帖子

0

注册会员

Rank: 2

积分
137
最后登录
1970-1-1
 楼主| 发表于 2014-6-19 17:52:57 | 显示全部楼层

RE:flash 模拟e2,重复写数据出错

我有试过,在写之前,进行擦除操作,然后写数据。
其结果还是出错
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-6-23 09:25:39 | 显示全部楼层

回复:flash 模拟e2,重复写数据出错

回复第 3 楼 于2014-06-19 17:52:57发表:
我有试过,在写之前,进行擦除操作,然后写数据。
其结果还是出错 

楼主不好意思,回复迟了。
那你清楚之后,有没有读看看你要写的地方已经都是0XFF呢?
还有,你说第二次写与读出来的数据不一样,是怎样的差别呢?
另外,你关掉看门狗操作试试。
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

61

帖子

0

注册会员

Rank: 2

积分
137
最后登录
1970-1-1
 楼主| 发表于 2014-6-23 15:54:02 | 显示全部楼层

RE:flash 模拟e2,重复写数据出错

谢谢版主
问题已解决,原因是擦除的延时时间不够,导致写入错误
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-6-23 16:16:35 | 显示全部楼层

RE:flash 模拟e2,重复写数据出错

不客气,也感谢你分享你的解决方案,擦除的确是需要一些时间的。
楼主以后如果问题解决了,还请帮我们结贴,在您问题标题的结尾加上(已解决),这样方便我们查看未结帖。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 08:38 , Processed in 0.096333 second(s), 26 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表