51单片机入门:AT24C02

AT24C02简介

AT24C02是一个2K bit的EEPROM存储器,使用I2C通信方式(其中02对应2K bit,类似的,AT24C04/08对应4K bit/8K bit的存储器)。

其原理图如下:

对应的引脚及其功能:

引脚名称功能
A0/A1/A2器件地址选择
SDA串行数据线
SCL串行时钟线
WP写保护
VCC1.8~6V工作电压
GND

内部存储结构

AT24C02由32页组成,每一个页有8Byte(共256Byte,即2K Bit)。可以看出,有两种访问方式:一种按页访问,先锁定页,再对页进行操作;另一种直接通过字节访问(一个字节就一个地址,共256个地址)。

不同型号AT24Cxx之间的对比:


AT24C02通讯地址

通讯地址由不可编程部分、可编程部分、数据传输方向组成。其中,不可编程部分:1010,是固定死的;可编程部分:由硬件管脚A0/A1/A2决定;数据传输方向:读数据“1”或写数据“0”。

具体如下表格所示:

不可编程部分可编程部分R/W
10100001/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”,从机会继续向主机发送数据,可实现顺序读模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值