打印
[STM32]

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

[复制链接]
5001|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
action99|  楼主 | 2016-10-26 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//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,时间也太浪费在里面了吧,请大神指教!!!!!!!!!!在线等 。。。。





相关帖子

沙发
action99|  楼主 | 2016-10-26 17:08 | 只看该作者
希望有大哥指教,谢谢。在线等

使用特权

评论回复
板凳
airwill| | 2016-10-27 07:13 | 只看该作者
每写一个字节都需要延时一个4MS的时间?
这是 EEPROM 的特性, 写数据后需要一段时间才能完成.
这里这样处理只是为了保证写之前都有这个写时间.
不过如果楼主需要连续写数据, 又接受不了这么长的延迟时间, 你可以考虑采用页写方式. 连续写一页再加延迟时间. 详细时序参考手册吧

使用特权

评论回复
地板
stanlyx| | 2016-10-27 16:28 | 只看该作者
呵呵,都是编程高手

使用特权

评论回复
5
251912404| | 2016-11-3 22:32 | 只看该作者
建议你看看AT24CXX的手册上面有时序,A0是器件地址,然后是你要写的地址,不跨页的情况下是能连续写的,STOP后才需要等待

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

87

主题

189

帖子

2

粉丝