jianhong_wu 发表于 2016-5-2 15:25:12

EEPROM在连续写入多个字节数据时,每个字节要插入多长时间延时?读取时要延时吗?已解答.

问:
EEPROM在连续写入多个字节数据时,每个字节需要插入多长时间延时?读取时要延时吗?

★坚鸿-深圳:
EEPROM每写入一个字节后需要延时多长时间?我以前的时间概念比较模糊,刚刚我查了一下25AA040这个EEPROM芯片的资料,每写一个字节需要延时等待5ms就可以了。


★leefei-佛山:
我记得有份手册的EEPROM的写数据时要等待10ms。

★坚鸿-深圳:
可能每个芯片会有点差异。问一下,你以前从EEPROM读取数据时要不要加延时?

★leefei-佛山:
我以前是连续读取2个字节数据是不用延时的。当然,写入的时候还要这个延时时间的。


★坚鸿-深圳:
我刚刚自己亲自动手做了一个实验.
本次实验是用SPI方式的EEPROM芯片,型号是25AA040芯片。

(1)连续写入测试。先连续写入32个字节的数据,每写入一个字节就加忙标志判断和超时检测(最大5ms)方式确定是否内部已经写入一个字节。实验结果:可以正确写入。
(2)连续读取测试。直接连续读取32个字节的数据,在读取每个字节之间不加延时。实验结果:可以正确连续读取。
下面的两个写和读的程序仅供大家参考最后是否延时部分:
写字节函数:
void EepromWriteByte(u16 u16EepromAddr,u8 u8EepromData)
{
u8 u8ReadStatusData=0;
u8 u8DelayCnt=0;
u8 u8Addr;

u8Addr=u16EepromAddr;

EEPROM_CS_L;
EepromSendByte(0x06);          // 设置写使能锁存
EEPROM_CS_H;

EEPROM_CS_L;

if(u16EepromAddr&0x0100)
{
   EepromSendByte(0x0A);       //发送写数据指令
}
else
{
   EepromSendByte(0x02);       //发送写数据指令
}

EepromSendByte(u8Addr);       //首先写入存储数据的地址
EepromSendByte(u8EepromData);       //写入待存储的数据
EEPROM_CS_H;

u8DelayCnt=0;
while(1)
{
if(u8DelayCnt<5)
{
       SysTickDelayMs (1);
}
else
{
   break;
}
u8DelayCnt++;

EEPROM_CS_L;
EepromSendByte(0x05);    //获取存储器的状态
u8ReadStatusData=EepromGetByte();
if(0==(u8ReadStatusData&0x01))       //如果读出的最低位为1则表示存储器还在存储,此时单片机等待,知道存储完毕
break;
EEPROM_CS_H;
}
EEPROM_CS_H;
}



读字节函数:
u8 EepromReadByte(u16 u16EepromAddr)
{
u8 u8ReadData=0;
u8 u8Addr;

u8Addr=u16EepromAddr;

EEPROM_CS_L;
if(u16EepromAddr&0x0100)
{
   EepromSendByte(0x0B);       //首先向存储器发送读数据指令
}
else
{
   EepromSendByte(0x03);       //首先向存储器发送读数据指令
}
EepromSendByte(u8Addr);          //向存储器写入要读取的数据地址
u8ReadData=EepromGetByte();          //读出数据
EEPROM_CS_H;
return u8ReadData;
}


此实验仅供参考,可能不同的Eeprom芯片会有一些差异,具体项目要根据具体情况来实验调试。也许某些EEPROM芯片在读取数据时也要加延时。


页: [1]
查看完整版本: EEPROM在连续写入多个字节数据时,每个字节要插入多长时间延时?读取时要延时吗?已解答.