20.IIC通信:AT24C02:EEPROM存储芯片

IIC通信

IIC总线是双向、二线制、同步串行总线,是一种多向控制总线,即多个芯片可以连接到同一个总线结构下,每个芯片都可以作为实时数据传输的控制源。

AT24C02:EEPROM存储芯片,是一个2K位串行CMOS EEPROM,内部含有256个8位字节。EEPROM是指带电可擦可编程读写存储器,掉电不丢失数据。

AT24C02芯片原理图:
在这里插入图片描述
通过芯片手册的比对,AT24C02芯片的延时时间较PCF8591要小很多,几乎可以忽略不计。(但仍可以使用相同的IIC驱动程序)
由于PCF8591和AT24C02芯片都是接在IIC总线上,故其开启、停止、等待、发送、接收等底层IIC驱动程序均保持一致。
如何确定使用的是IIC总线系统的AT24C02芯片——发送AT24C02的有效地址到器件(发送的第一个字节)由下图可知,写有效地址为0XA0,读有效地址为0XA1。
在这里插入图片描述

IIC_SendByte(0xA0);		//写IIC_SendByte(0xA1);		//读

紧接着发送控制字,也即读写的EEPROM地址。
EEPROM读:

uchar EEPROM_Read(uchar add)
{
	uchar temp;
	//IIC写
	IIC_Start();
	IIC_SendByte(0XA0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_Stop();
	//IIC读
	IIC_Start();
	IIC_SendByte(0XA1);
	IIC_WaitAck();
	temp=IIC_RecByte();
	IIC_Stop();
	//返回temp值
	return temp;
}

EEPROM写:

void EEPROM_Write(uchar add,uchar dat)
{
	IIC_Start();
	IIC_SendByte(0XA0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop();
}

比较PCD8591读写程序,我们可以发现,其基本过程是一致的。
1.开启IIC;2.发送AT24C02的写有效地址;3.发送控制字即读出或写入数据的地址;4.如果需要写入数据,则继续发送数据;如果需要读出数据,则关闭并重新开启IIC,发送AT24C02的读有效地址,然后通过IIC获取数据。5.关闭IIC,如果是读取数据则需返回值。

注:每一次通过IIC发送数据后都需要等待一次响应信号。

猜你喜欢

转载自blog.csdn.net/qq_44628230/article/details/104502804