利用AT24C02进行数据存储

简介

24C02是一个2K Bit的串行EEPROM存储器(掉电不丢失),内部含有256个字节。在24C02里面有一个8字节的页写缓冲器。
利用AT24C02进行数据存储_第1张图片
来看引脚:
A0,A1,A2:硬件地址引脚
WP:写保护引脚,接高电平只读,接地允许读和写
SCL和SDA:IIC总线
利用AT24C02进行数据存储_第2张图片
可以看到对于4K及以上,硬件地址管脚不一定存在,若不存在就写0,所以一条总线上可挂的该类芯片也减少了。
附上开发板上芯片的连接方式
利用AT24C02进行数据存储_第3张图片

向AT24C02中写数据

写一个字节
利用AT24C02进行数据存储_第4张图片
操作时序:
启动总线-----发送设备地址+写-----等待应答-----发送数据的储存地址(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、读当前地址的数据
利用AT24C02进行数据存储_第5张图片
2、读随机地址的数据
利用AT24C02进行数据存储_第6张图片
3、连续读数据
利用AT24C02进行数据存储_第7张图片
若想要读某一地址的数据,也需要一定的操作时序:
启动总线-----发送设备地址+写-----等待应答-----发送数据存储地址-----等待应答-----发送设备地址+读-----等待应答-----读取数据-----主机发送是否应答……
代码:

//从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

你可能感兴趣的:(#,蓝桥杯——单片机)