写EEPROM 24C16一个字节为什么要延时4MS以上的时间?

2019-07-20 15:41发布

本帖最后由 action99 于 2016-10-26 17:08 编辑

//AT24CXX指定地址写入一个数据//WriteAddr :写入数据的目的地址//DataToWrite:要写入的数据

voidAT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite){     u16ju;     IIC_Start();    if(EE_TYPE>AT24C16)        {               IIC_Send_Byte(0XA0);           //发送写命令               IIC_Wait_Ack();              IIC_Send_Byte(WriteAddr>>8);//发送高地址    }else        {                     ju=WriteAddr/256;          IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));  //发送器件地址0XA0,写数据    }
     IIC_Wait_Ack();        ju=WriteAddr%256;              IIC_Send_Byte(WriteAddr%256);        //发送低地址              IIC_Wait_Ack();     IIC_Send_Byte(DataToWrite);             //发送字节                                                        IIC_Wait_Ack();               IIC_Stop();                             //产生一个停止条件     delay_ms(4);   }

每写一个字节都需要延时一个4MS的时间,如果少于4MS数据就会出错,这是为什么?如果需要同时写入100个字节就需要400MS,时间也太浪费在里面了吧,请大神指教!!!!!!!!!!在线等 。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
action99
1楼-- · 2019-07-20 19:41
小温 发表于 2016-10-26 17:38
看看AT24Cxx的数据手册,上面有一个Twr的指标值

ddd.jpg
从规格书到看到是5MS,相当于每写一个字节就需要延时最多5MS时间后,再写下一个字节,对吧。这样就讲通
action99
2楼-- · 2019-07-20 20:27
希望有大哥指教,谢谢。在线等
小温
3楼-- · 2019-07-20 21:19
 精彩回答 2  元偷偷看……
xkwy
4楼-- · 2019-07-21 00:19
楼上正解,而且这只是最大值,你可以使用“Acknowledge Polling”方式会更快。
1.png
BigDiong
5楼-- · 2019-07-21 01:31
 精彩回答 2  元偷偷看……
BigDiong
6楼-- · 2019-07-21 05:19
 精彩回答 2  元偷偷看……

一周热门 更多>