AT24Cxx的使用

一、组织结构

  

  

   1、可按字节写;

   2、页写:8字节页(24C02),16字节页(24C04/08/16),32字节页(24C32/64);

   3、可按字节随机和序列读;

   4、自动递增地址;比如我们往0x00地址开始写入数据,当我们写入的是2个字节数据时,EEPROM内部字地址会自动加1变为0x01,此时我们对0x01地址读取,则可以读到我么写入的第二个数据。

二、引脚说明

  

三、器件寻址 

    

     如下图:A0为高电平,A1、A2为低电平时,器件地址为:0xA2

         A0、A1、A2均为低电平时,器件地址为:0xA0

 

     注意:此时没有算读写位,我们在收发数据时是需要算上读写位的。如:写操作为0,如下后一个器件地址为:0xA0,读操作为1,器件地址则为0xA1;

    

四、读写操作

  1、字节写

   写操作要求在接收器件地址和ACK应答后,接收8位的字地址。接收到这个地址后EEPROM应答0,然后是一个8位数据,接收这8位数据后,应答0,接着主器件发送停止条件。

    

  2、页写

    24C02器件按8字节/页执行页写,页写初始化与字节写相同,只是器件不会在第一个数据后发送停止条件,而是在EEPROM收到每个数据后都应答0,最后由主器件发送停止条件。

    接收到每个数据后,字地址的低3位(因为24C02一页有8字节数据,低3位为0-7)或4位(24C04/8/16)或5位(24C32/64)内部自动加1,高位地址不变,维持在当前页内。当内部产生的字地址达到该页边界地址时,随后的数据将写入该页的页首。如果超过8个(24C02)或16个(24C04)数据传给了EEPROM,字地址将回转到该页的首字节,先前的字节将会被覆盖。

     

                                         

  实际运用:实际使用中应该是从0x00地址写入我们的整个结构体变量,读取时也是读取整个大小。避免一直重复写入数据,其寿命为100万次,放到死循环里也可以很快写坏,存变量时,可以判断是否相等,相等则不写。 

        如下,当我们实现了页写以后,可以传入整个结构体变量,强转一下,sizeof会自动计算整个结构体大小,通过下面的打印我们也可以看到,字节自动补齐了。可直接写入内存。

        

      如上代码实际写入内存数据如下,注意我们在使用逻辑分析仪时,需要选择时钟的上升沿或者下降沿来采集数据,否则会没有数据,另外两张逻辑分析仪截图是在数据线上选择边沿采集,不准确。我们可以看到时钟变化多,数据波形少。

      

  3、应答:只有内部写周期完成,EEPROM才应答0,之后可继续读/写操作。

  4、读操作(当前地址读)

    读操作与写操作初始化相同,只是器件地址中读写选择位为1.

    内部地址计数器保存着上次访问时最后一个地址加1的值,只要芯片有电,该地址就一直保存。当读到最后页的最后字节,地址会回转到0;当写到某页尾的最后一个字节,地址会回转到该页的首字节。

    接收器件地址(读/写选择位为1)、EEPROM应答ACK后,当前地址的数据就随时钟送出。主器件无需应答0,但需要发送停止条件。

    

  5、随机读

    随机读需先写一个目标地址,一旦EEPROM接收器件地址和字地址并应答了ACK,主器件就产生一个重复的起始条件。

    然后主器件发送器件地址(读/写选择位为1),EEPROM应答ACK,并随时钟送出数据。主器件无需应答0,当需发送停止条件。

     

  6、顺序读

    顺序读可以通过“当前地址读”或“随机读”启动。主器件收到一个数据后,应答ACK。只要EEPROM接收到ACK,将自动增加字地址并继续随时钟发送后面的数据。若达到存储器地址末尾,地址自动转回到0,仍可继续顺序读取数据。

    主器件不应答0,而发送停止条件,即可结束顺序读操作。

    

    

                                       如图为读上面写入的三个数据的时序图 

 

posted @ 2023-05-27 22:45  耿通宇  阅读(598)  评论(0编辑  收藏  举报