独闷闷网

 找回密码
 立即注册
搜索
查看: 363|回复: 0
收起左侧

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

[复制链接]
发表于 2016-5-2 15:25:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

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


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

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

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


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

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

  6. u8Addr=u16EepromAddr;

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

  10. EEPROM_CS_L;

  11. if(u16EepromAddr&0x0100)
  12. {
  13.    EepromSendByte(0x0A);         //发送写数据指令
  14. }
  15. else
  16. {
  17.    EepromSendByte(0x02);         //发送写数据指令
  18. }

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

  22. u8DelayCnt=0;
  23. while(1)
  24. {
  25. if(u8DelayCnt<5)
  26. {
  27.        SysTickDelayMs (1);
  28. }
  29. else
  30. {
  31.    break;
  32. }
  33. u8DelayCnt++;

  34.   EEPROM_CS_L;
  35. EepromSendByte(0x05);    //获取存储器的状态
  36. u8ReadStatusData=EepromGetByte();
  37. if(0==(u8ReadStatusData&0x01))         //如果读出的最低位为1则表示存储器还在存储,此时单片机等待,知道存储完毕
  38. break;
  39.   EEPROM_CS_H;
  40. }
  41. EEPROM_CS_H;
  42. }
复制代码




读字节函数:
  1. u8 EepromReadByte(u16 u16EepromAddr)
  2. {
  3. u8 u8ReadData=0;
  4. u8 u8Addr;

  5. u8Addr=u16EepromAddr;

  6. EEPROM_CS_L;
  7. if(u16EepromAddr&0x0100)
  8. {
  9.    EepromSendByte(0x0B);         //首先向存储器发送读数据指令
  10. }
  11. else
  12. {
  13.    EepromSendByte(0x03);         //首先向存储器发送读数据指令
  14. }
  15. EepromSendByte(u8Addr);            //向存储器写入要读取的数据地址
  16. u8ReadData=EepromGetByte();            //读出数据
  17. EEPROM_CS_H;
  18. return u8ReadData;
  19. }
复制代码



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


乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2018-4-21 15:29 , Processed in 0.097077 second(s), 18 queries .

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