一文看懂AT24C02(IIC)的原理及应用
创作时间:
作者:
@小白创作中心
一文看懂AT24C02(IIC)的原理及应用
引用
CSDN
1.
https://m.blog.csdn.net/m0_74219261/article/details/140733081
AT24C02是一款常用的I2C总线串行EEPROM芯片,广泛应用于各种嵌入式系统中。本文将详细介绍AT24C02的硬件特性、I2C通信协议以及具体的代码实现,帮助读者快速掌握其原理及应用。
AT24C02简介
AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节。CATALYST公司的先进CMOS技术显著降低了器件的功耗。AT24C02具有16字节页写缓冲器,通过I2C总线接口进行操作,并提供专门的写保护功能。
主要特点
- 存储容量:2 Kbit(256 字节),适合保存小块配置数据或用户设置。
- 接口类型:I2C,支持7位总线地址,允许多个EEPROM挂载在同一总线上。
- 电源电压:工作电压范围为1.8V至5.5V,适应不同电源要求。
- 操作温度范围:-40°C至+85°C,适用于各种环境。
- 数据保持时间:高达100年,确保数据长期可靠保存。
- 写入时间:典型写入时间约为5ms,适合需要快速更新的应用。
- 写保护:芯片具有写保护功能,防止意外数据修改。
芯片管脚图
图一
图二
各引脚功能说明:
- A0、A1、A2:器件地址选择
- SDA:数据线
- SCL:时钟线
- WP:写保护线(连接Vcc时写保护,连接Vss或悬空时可读写)
I2C通信协议
I2C是一种主从通信协议,支持一主多从模式。所有从机都挂载在时钟线和数据线上,每个从机都有对应的通信地址。
AT24C02的通信地址由芯片地址和控制字组成:
- 芯片地址:固定为1010(高四位)
- 控制字:由A2、A1、A0和R/W组成
- 形成八位二进制编码:1010A2A1A0R/W(R/W为0时为读,1为写)
通信流程
通讯开始时时钟线高电平期间数据线拉低
代码实现
起始信号
void I2CStart(void)
{
sda = 1;
scl = 1;
I2C_Delay(DELAY_TIME);
sda = 0;
I2C_Delay(DELAY_TIME);
scl = 0;
}
发送一个字节
void I2CSendByte(unsigned char byt)
{
unsigned char i;
for(i=0; i<8; i++){
scl = 0;
I2C_Delay(DELAY_TIME);
if(byt & 0x80){
sda = 1;
}
else{
sda = 0;
}
I2C_Delay(DELAY_TIME);
scl = 1;
byt <<= 1;
I2C_Delay(DELAY_TIME);
}
scl = 0;
}
接收一个字节
unsigned char I2CReceiveByte(void)
{
unsigned char da;
unsigned char i;
for(i=0;i<8;i++){
scl = 1;
I2C_Delay(DELAY_TIME);
da <<= 1;
if(sda)
da |= 0x01;
scl = 0;
I2C_Delay(DELAY_TIME);
}
return da;
}
等待应答
unsigned char I2CWaitAck(void)
{
unsigned char ackbit;
scl = 1;
I2C_Delay(DELAY_TIME);
ackbit = sda;
scl = 0;
I2C_Delay(DELAY_TIME);
return ackbit;
}
发送应答
void I2CSendAck(unsigned char ackbit)
{
scl = 0;
sda = ackbit;
I2C_Delay(DELAY_TIME);
scl = 1;
I2C_Delay(DELAY_TIME);
scl = 0;
sda = 1;
I2C_Delay(DELAY_TIME);
}
停止信号
void I2CStop(void)
{
sda = 0;
scl = 1;
I2C_Delay(DELAY_TIME);
sda = 1;
I2C_Delay(DELAY_TIME);
}
AT24C02写入
void write_at24c02(unsigned char addr,unsigned char date)
{
I2CStart();
I2CSendByte(0xA0);
I2CWaitAck();
I2CSendByte(addr);
I2CWaitAck();
I2CSendByte(date);
I2CWaitAck();
I2CStop();
Delay100ms(); //延时函数必须加
}
AT24C02读取
unsigned char read_at24c02(unsigned char addr)
{
unsigned char dat;
I2CStart();
I2CSendByte(0xA0);
I2CWaitAck();
I2CSendByte(addr);
I2CWaitAck();
I2CStart();
I2CSendByte(0xA1);
I2CWaitAck(); //发送数据后必须加等待函数
dat = I2CReceiveByte();
I2CSendAck(1); //接收之后必须加一个发送应答
I2CStop();
Delay100ms(); //延时函数必须加
return dat;
}
注意事项
信号在被拉低或置高后,需要加入一定时间的延时来稳定信号,一般为5us。延时代码如下:
#define DELAY_TIME 5
sbit sda = P1^6;
sbit scl = P1^7;
static void I2C_Delay(unsigned char n)
{
do
{
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
while(n--);
}
以上代码基于I2C通信地址0xA0编写,写保护为关闭状态。
热门推荐
隔夜肉类高风险,食品安全不容忽视
科学降血脂:7类药物与生活干预措施详解
植物神经紊乱患者需谨慎:这些食物百害而无一利!
植物神经功能紊乱敏感多疑,呼吸乱想怎么办?
认识植物神经功能紊乱
从导师到对手:马斯克与OpenAI CEO奥特曼的权力之争
嬴驷军事布局揭秘:兼并六国的秘密武器
红霉素眼膏不是“万能药”,这些使用误区要当心
莫滥用红霉素软膏:7种常见情况使用建议
中国股市时间是几点到几点结束?结束时间是什么时候
因为A股,第一次不想放假
蜀国并非一直最弱:三国时期的战略与实力分析
真实的刘禅:诸葛亮临终前才发现其城府之深
战胜感冒有妙招:7类食物+5大饮食原则助你恢复
流感高发季,羚羊感冒片使用指南:从用量到禁忌全解析
世界微笑日:揭秘傻笑与大脑化学物质的秘密
正在奥克兰找工作的人注意,确认了!相当严峻
广州首推电梯维修“保险+维保+物业”新模式
艺术何以动人?解码艺术作品的四大价值
瑞典艺术家Anna Halldin Maule:将古典绘画带入现代审美的创新者
从构图到用光:新手也能掌握的人像摄影全攻略
黑木耳减肥食谱:低卡排毒,让你越吃越瘦
黑木耳:心血管健康的守护神
什么油炒菜好吃又健康?多了解有好处!
情人节前夕,这些聊天话题让你们的感情升温!
用幽默感点亮你的爱情
社交达人教你如何趣味开聊
激光治疗黑斑效果差,医生:这4步决定治疗成败
抓住兴趣点,巧用废旧材:幼儿园美术教学新思路
专家解析:激光如何精准去除扁平疣