首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

对EEPROM连续擦写时出现问题!

对EEPROM连续擦写时出现问题!

工程文件如下:

ht2fgGni.rar (356.21 KB)


单独擦写一个EEPROM地址是没有问题的。

但是假如连续擦写两个地址,如下

EEPROM_write_operate(0xFC,EEPROM_ADDR_BASE,Dump,ee_word_erase);
EEPROM_write_operate(0xFC,EEPROM_ADDR_BASE,0x1234,ee_word_program);

EEPROM_write_operate(0xFC,(EEPROM_ADDR_BASE+1),Dump,ee_word_erase);
EEPROM_write_operate(0xFC,(EEPROM_ADDR_BASE+1),0x5678,ee_word_program);

则对应EEPROM地址的数据如下


AIIhsPz9.jpg

也就是说第一个地址没有被写入数据,而第二个地址又正确的写入了。


接下来,我测试了连续擦写256个地址,如下

for(i=0;i<256;i++)
{


EEPROM_write_operate(0xFC,(EEPROM_ADDR_BASE+i),Dump,ee_word_erase);
EEPROM_write_operate(0xFC,(EEPROM_ADDR_BASE+i),i,ee_word_program);

}
得到如下的结果:


PY1MD5DI.jpg

结果发现,中间每隔一个地址,就有一个数据没有写入,而且第48个地址之后的数据都没有被写入!

PS:图片如果看不清楚,可点击放大!

[此贴子已经被作者于2008-11-3 9:35:17编辑过]

是否擦写操作的延时不够?
海纳百川  有容乃大
应该不是吧。对EEPROM的擦/写操作,都是判断了命令完成标志ESTAT_CCIF的,不需要加延时吧?
写入单位是字还是双字?
海纳百川  有容乃大

是单个字!

我上传了源程序,还请版主帮我看看啊

但是EEPROM的擦除单位是双字,即四个字节。
海纳百川  有容乃大

版主说的很对,檫除是一次两个字,而你写入一次是一个字!这样就会导致你说的问题了,所以你应该檫除一次,写两次!

我只有DG128的板子,程序段如下

for(i=0;i<1024;)
{

EEPROM_write_operate(EEPROM_ADDR_BASE+i,Dump,ee_word_erase);
EEPROM_write_operate(EEPROM_ADDR_BASE+i,0xef00,ee_word_program); //在EEPROM_ADDR_BASE地址写入数据
i=i+1;
EEPROM_write_operate(EEPROM_ADDR_BASE+i,0xabcd,ee_word_program);
i=i+1;

}

返回列表