欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

AT24C02 E2PROM芯片详解

程序员文章站 2022-03-03 20:47:37
24C02是一个2K Bit的串行EEPROM存储器(掉电不丢失),内部含有256个字节。在24C02里面有一个8字节的页写缓冲器。A0,A1,A2:硬件地址引脚WP:写保护引脚,接高电平只读,接地允许读和写SCL和SDA:IIC总线可以看出对于不同大小的24Cxx,具有不同的从器件地址。由于24C02为2k容量,也就是说只需要参考图中第一行的内容:芯片的寻址:AT24C设备地址......

24C02是一个2K Bit的串行EEPROM存储器(掉电不丢失),内部含有256个字节。在24C02里面有一个8字节的页写缓冲器。
AT24C02 E2PROM芯片详解

  • A0,A1,A2硬件地址引脚
  • WP:写保护引脚,接高电平只读,接地允许读和写
  • SCL和SDA:IIC总线
  • VCC和GND: 电源线和地线

下图为芯片从地址:

以看出对于不同大小的24Cxx,具有不同的从器件地址。由于24C02为2k容量,也就是说只需要参考图中第一行的内容:
AT24C02 E2PROM芯片详解
芯片的寻址:
AT24C设备地址为如下,前四位固定为1010,A2~A0为由管脚电平。AT24CXX EEPROM Board模块中默认为接地。A2~A0为000,最后一位表示读写操作。所以AT24Cxx的读地址为0xA1,写地址为0xA0。

也就是说如果是
写24C02的时候从器件地址为10100000(0xA0);
读24C02的时候,从器件地址为10100001(0xA1)。

片内地址寻址:

芯片寻址可对内部256B中的任一个进行读/写操作,其寻址范围为00~FF,共256个寻址单位。

对应的修改 A2A1A0 三位数据即可
AT24C02 E2PROM芯片详解

IIC 主设备/从设备:

通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。

  • IIC主设备功能:主要产生时钟,产生起始信号和停止信号

  • IIC从设备功能:可编程的IIC地址检测,停止位检测

IIC的协议层

I2C 总线在传送数据过程*有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

  • 开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
  • 结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
  • 应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

IIC 总线时序图:

AT24C02 E2PROM芯片详解
起始条件:在SCL高电平期间,SDA由高到低的一个下降沿;
停止条件:在SCL高电平期间,SDA由低到高的一个上升沿;

IIC的数据有效性:AT24C02 E2PROM芯片详解

在SCL的高电平期间,SDA是不允许变化的;而只有在时钟线SCL的低电平期间,SDA才能够出现变化;

应答信号

每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据,

应答信号:主机SCL拉高,读取从机SDA的电平,为低电平表示产生应答

AT24C02 E2PROM芯片详解

在了解了IIC的基础知识之后。我们就对AT24C02进行操作讲解:

向AT24C02中写数据
AT24C02 E2PROM芯片详解
操作时序:

  1. MCU先发送一个开始信号(START)启动总线
  2. 接着跟上首字节,发送器件写操作地址(DEVICE ADDRESS)+写数据(0xA0)
  3. 等待应答信号(ACK)
  4. 发送数据的存储地址。24C02一共有256个字节的存储空间,地址从0x00~0xFF,想把数据存储>在哪个位置,此刻写的就是哪个地址。
  5. 发送要存储的数据第一字节、第二字节、…注意在写数据的过程中,E2PROM每个字节都会>回应一个“应答位0”,老告诉我们写E2PROM数据成功,如果没有回应答位,说明写入不成功。
  6. 发送结束信号(STOP)停止总线

注意:
在写数据的过程中,每成功写入一个字节,E2PROM存储空间的地址就会自动加1,当加到0xFF后,再写一个字节,地址就会溢出又变成0x00。

写数据的时候需要注意,E2PROM是先写到缓冲区,然后再“搬运到”到掉电非易失区。所以这个过程需要一定的时间,AT24C02这个过程是不超过5ms!
所以,当我们在写多个字节时,写入一个字节之后,再写入下一个字节之前,必须延时5ms才可以




从AT24C02中读数据

读当前地址的数据
AT24C02 E2PROM芯片详解
2、读随机地址的数据
AT24C02 E2PROM芯片详解

  1. MCU先发送一个开始信号(START)启动总线
  2. 接着跟上首字节,发送器件写操作地址(DEVICE ADDRESS)+写数据(0xA0)
    注意:这里写操作是为了要把所要读的数据的存储地址先写进去,告诉E2PROM要读取哪个地址的数据。
  3. 发送要读取内存的地址(WORD ADDRESS),通知E2PROM读取要哪个地址的信息。
  4. 重新发送开始信号(START)
  5. 发送设备读操作地址(DEVICE ADDRESS)对E2PROM进行读操作 (0xA1)
  6. E2PROM会自动向主机发送数据,主机读取从器件发回的数据,在读一个字节后,MCU会回应一个应答信号(ACK)后,E2PROM会继续传输下一个地址的数据,MCU不断回应应答信号可以不断读取内存的数据
  7. 如果不想读了,告诉E2PROM不想要数据了,就发送一个“非应答位NAK(1)”。发送结束信号(STOP)停止总线

3、连续读数据
AT24C02 E2PROM芯片详解
E2PROM支持连续写操作,操作和单个字节类似,先发送设备写操作地址(DEVICE ADDRESS),然后发送内存起始地址(WORD ADDRESS),MCU会回应一个应答信号(ACK)后,E2PROM会继续传输下一个地址的数据,MCU不断回应应答信号可以不断读取内存的数据。E2PROM的地址指针会自动递增,数据会依次保存在内存中。不应答发送结束信号后终止传输。

代码:


//IIC发送数据
//address 要写入的地址
//date 要写入的数据
void write_add(uchar address,uchar date)
{
        IIC_Start();
        IIC_Send_Byte(0xA0);
       	delay(2);
        IIC_Send_Byte(address);
        delay(2);
        IIC_Send_Byte(date);
       delay(2);
        IIC_Stop();
}
//IIC读取数据
// address 要读取数据的地址
uchar read_add(uchar address)  //指定地址读一个字节数据
{
	uchar add;
	IIC_Start();
	IIC_Send_Byte(0xA0);
	delay(2);
	IIC_Send_Byte(address);
	delay(2);
	IIC_Start();
	IIC_Send_Byte(0xA1);
	delay(2);
	dd=IIC_Read_Byte();
	 IIC_Stop();
	return add;
}

剩下的IIC以及芯片操作例程已经单独整理成文章,对初学者有很大帮助,如需学习请直接参看:

如果需要IIC的详细原理详解,请参看:

IIC原理超详细讲解—值得一看

如果需要读取AT24C02例程及代码,请参看:

【STM32】HAL库 STM32CubeMX教程十二—IIC(读取AT24C02 )

AT24C02 E2PROM芯片详解

本文地址:https://blog.csdn.net/as480133937/article/details/105472659