I2C接口的EEPROM操作

虽然这个器件很老了,但是简单好用,也是I2C操作的一个经典例子。

首先确认地址。24C01/02/04/08/16/32等等器件,后缀的数字是比特数。比如08,是8K bit,1024个字节。所以容量不同,他们的寻址地址范围也是不一样的。

 参考上面的图。对芯片的操作,一般是先发送8位的器件的I2C地址,再发送8位的内部字节地址。8位的字节地址,智能寻找256个字节,那么容量超过256个字节怎么办呢?比如24WC08,他有1024个字节的存储空间,即10位字节寻址地址,那么其中两位就要分配到器件地址中,即A1和A0被忽略掉了。

如果字节寻址空间大于16K,即使占用了3位器件地址也没用了。那就只能发送两次字节的地址了,他也就不需要占用器件的A2/A1/A0了。

所以有下面的寻址代码

    if(EE_TYPE>AT24C16)
    {
        IIC_Send_Byte(0XA0);       //纯器件地址
        IIC_Wait_Ack();
        IIC_Send_Byte(ReadAddr>>8);//字节寻址的高位
    }
    else
    {
        IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //器件地址+字节寻址的高位,类似page寻址
    }        
         
    IIC_Wait_Ack(); 
    IIC_Send_Byte(ReadAddr%256);   //发送字节寻址的低位
    IIC_Wait_Ack();        

 

posted on 2018-01-06 16:59  nasduc  阅读(690)  评论(0编辑  收藏  举报

导航