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();