简介
24C02是一个2K Bit的串行EEPROM存储器(掉电不丢失),内部含有256个字节。在24C02里面有一个8字节的页写缓冲器。
来看引脚:
A0,A1,A2:硬件地址引脚
WP:写保护引脚,接高电平只读,接地允许读和写
SCL和SDA:IIC总线
可以看到对于4K及以上,硬件地址管脚不一定存在,若不存在就写0,所以一条总线上可挂的该类芯片也减少了。
附上开发板上芯片的连接方式
向AT24C02中写数据
写一个字节
操作时序:
启动总线-----发送设备地址+写-----等待应答-----发送数据的储存地址(0x00-0xFF,256个字节)-----等待应答-----发送数据-----等待应答-----停止总线
注意:
在写数据的过程中,每成功写入一个字节,E2PROM存储空间的地址就会自动加1,当加到0xFF后,再写一个字节,地址就会溢出又变成0x00。
写数据的时候需要注意,E2PROM是先写到缓冲区,然后再“搬运到”到掉电非易失区。所以这个过程需要一定的时间,AT24C02这个过程是不超过5ms!如果在这个时候去让它应答是没有响应的!
所以,当我们在写多个字节时,写入一个字节之后,再写入下一个字节之前,必须等待E2PROM再次相应才可以。
但是当我们单字节写数据时,不用考虑得不到应答的问题,直接停止总线即可。
代码:
//向24C02写入一个字节的数据
void Write_24C02(uchar add,uchar dat)
{
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
}
从AT24C02中读数据
1、读当前地址的数据
2、读随机地址的数据
3、连续读数据
若想要读某一地址的数据,也需要一定的操作时序:
启动总线-----发送设备地址+写-----等待应答-----发送数据存储地址-----等待应答-----发送设备地址+读-----等待应答-----读取数据-----主机发送是否应答……
代码:
//从24C02读出一个字节的数据
uchar Read_24C02(uchar add)
{
uchar temp;
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_Start();
IIC_SendByte(0xa1);
IIC_WaitAck();
temp=IIC_RecByte();
IIC_SendAck(0);
IIC_Stop();
return temp;
}
……我发现自己记混了,原来是时钟芯片的读取要延时,EEPROM的读取和写入不需要延时……so sad……
Reference:
https://blog.csdn.net/Xiaomo_haa/article/details/87918394
https://blog.csdn.net/ohy3686/article/details/86723598
datasheet