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]