AT24C02简介
AT24C02是一个2K bit的EEPROM存储器,使用I2C通信方式(其中02对应2K bit,类似的,AT24C04/08对应4K bit/8K bit的存储器)。
其原理图如下:
对应的引脚及其功能:
引脚名称 | 功能 |
A0/A1/A2 | 器件地址选择 |
SDA | 串行数据线 |
SCL | 串行时钟线 |
WP | 写保护 |
VCC | 1.8~6V工作电压 |
GND | 地 |
内部存储结构
AT24C02由32页组成,每一个页有8Byte(共256Byte,即2K Bit)。可以看出,有两种访问方式:一种按页访问,先锁定页,再对页进行操作;另一种直接通过字节访问(一个字节就一个地址,共256个地址)。
不同型号AT24Cxx之间的对比:
AT24C02通讯地址
其通讯地址由不可编程部分、可编程部分、数据传输方向组成。其中,不可编程部分:1010,是固定死的;可编程部分:由硬件管脚A0/A1/A2决定;数据传输方向:读数据“1”或写数据“0”。
具体如下表格所示:
不可编程部分 | 可编程部分 | R/W | |||||
1 | 0 | 1 | 0 | 0 | 0 | 0 | 1/0 |
其中前7位(不可编程与可编程部分)称为设备地址,其包含两个通信地址,一个是写操作地址:0xA0;一个是读操作地址:0xA1。
AT24C02读写时序
写操作
AT24C02支持字节写模式和页写模式。注意,EEPROM比较慢,通常要等待5ms后再写入下一个字节。对于读写操作,重点介绍字节写和随机读,其时序如下:
字节写模式:一个地址一个数据进行写入;
页写模式:就是连续写入数据。只需要一个地址,连续写入数据时地址会自增,但存在页的限制,超出一页时,超出的数据会覆盖原来先写入的数据。(但读操作会自动翻页)
字节写模式代码:
/**
*功能:AT24C02写入一个字节
*参数:要写入字节的地址,要写入的数据
*返回值:无
*/
void AT24C02_WriteByte(unsigned char WordAddress,Data){
I2C_Start();
I2C_SendByte(AT24C02_ADDRESS);
I2C_ReceiveAck();
I2C_SendByte(WordAddress);
I2C_ReceiveAck();
I2C_SendByte(Data);
I2C_ReceiveAck();
I2C_Stop();
}
读操作
AT24C02支持当前地址读模式、随机地址读模式、顺序读模式。
当前读模式:基于上一次读/写操作的最后位置继续读出数据。
随机地址读模式:指定地址,读出数据。
顺序读模式:连续地读出数据。
随机地址读模式代码:
/**
*功能:从AT24C02读取一个字节
*参数:要读出字节的地址
*返回值:读取的数据
*/
unsigned char AT24C02_ReadByte(unsigned char WordAddress){
unsigned char Data;
I2C_Start();
I2C_SendByte(AT24C02_ADDRESS); //向AT24C02发起通信
I2C_ReceiveAck();
I2C_SendByte(WordAddress); //将要读取的地址写入
I2C_ReceiveAck();
I2C_Start();
I2C_SendByte(AT24C02_ADDRESS|0x01);//读操作
I2C_ReceiveAck();
Data=I2C_ReceiveByte(); //用变量将数据保存
I2C_SendAck(1); //非应答
I2C_Stop();
return Data;
}
IIC发送非应答“1”后,结束通讯。若IIC发送应答“0”,从机会继续向主机发送数据,可实现顺序读模式。