(十一)IIC总线-AT24C02-EEPROM

文章目录

  • IIC总线篇
  • AT24C02-EEPROM篇
    • 主要特性
    • 引脚说明
    • AT24Cxx用几位数据地址随机寻址的(存储器组织)
    • AT24C02设备操作
    • AT24CXX设备寻址
    • EEPROM写操作的种类
    • EEPROM读操作的种类
    • 实现单字节写
    • 实现任意读
    • 读写应用


IIC总线篇

前面介绍过了,请参考
(十)IIC总线-PCF8591-ADC/DAC

AT24C02-EEPROM篇

内容依然是来自芯片数据手册以及自己总结理解

主要特性

(十一)IIC总线-AT24C02-EEPROM_第1张图片
说人话:
1.有双线串行接口(IIC总线通讯)
2.保存时间周期最多需要5ms,因此连续写最好加个5ms延时
3.高可靠性:读写次数:1,000,000 次 – 数据保存:100 年

引脚说明

(十一)IIC总线-AT24C02-EEPROM_第2张图片

(十一)IIC总线-AT24C02-EEPROM_第3张图片

这里原理图大家注意一下A3A2应该是标错了

最主要就是:
SDA数据线
SCL时钟线
A2,A1,A0地址线,其中:

24C01和24C02 使用A2,A1,A0作为硬件连接的器件地址输入引脚
24C04仅使用 A2、A1 作为硬件连接的器件地址输入引脚
24C08 仅使用 A2 作为硬件连接的器件地址输入引脚
24C16 未使用作为硬件连接的器件地址输入引脚,

WP写保护位:1-禁止读写,0-允许读写(如图默认允许所以WP接GND

AT24Cxx用几位数据地址随机寻址的(存储器组织)

数据要放到哪个地址里面(数据存放的地址)

(十一)IIC总线-AT24C02-EEPROM_第4张图片
说人话:AT24C02里面那么多内存地址,需要一个8位的数据字地址来进行随机字寻址
AT24C02是一个2k的设备—用8位的数据字地址随机寻址(0x00-0xff)
AT24C04是一个4k的设备—用9位的数据字地址随机寻址
AT24C08是一个8k的设备—用10位的数据字地址随机寻址
AT24C16A是一个16k的设备–用11位的数据字地址随机寻址

AT24C02设备操作

(十一)IIC总线-AT24C02-EEPROM_第5张图片
说人话:就是一些起始信号,终止信号,应答信号,复位信号等
起始信号:必须先于任何一个指令
应答信号:在第九个时钟脉冲发送,0-应答 1-非应答

AT24CXX设备寻址

AT24CXX设备的地址(器件/设备的地址)
(十一)IIC总线-AT24C02-EEPROM_第6张图片
(十一)IIC总线-AT24C02-EEPROM_第7张图片
结合上面原理图
地址指令:0xA1
地址指令:0xA0

说明():
1k/2k的EEPROM(AT24C02) 使用 A2,A1,A0作为设备地址
4k的EEPROM(AT24C02) 使用 A2,A1作为设备地址
8k的EEPROM(AT24C02) 使用 A2作为设备地址
16k的EEPROM(AT24C02) 不使用设备地址

EEPROM写操作的种类

比赛用单字节就行,多字节采取分割的形式储存
(十一)IIC总线-AT24C02-EEPROM_第8张图片
俩种:一个是单字节写入,一个是页写入
这里不关心,比赛就用单字节写入,即使连续写,也可以多次单字节写入

EEPROM读操作的种类

比赛用任意地址读取(因为一般比赛都不指定地址储存数据),另外random read 处理简单

(十一)IIC总线-AT24C02-EEPROM_第9张图片

三种:
1.当前地址读:最后一次读或写操作期间访问的最后一个地址(不指定地址),增加1,然后一直读
2.任意地址读 :指定地址,读取
3.顺序读:由当前地址或任意地址读取来启动,然后只要EEPROM收到确认,它将继续增加数据字地址,并连续钟出顺序数据字。

实现单字节写

(十一)IIC总线-AT24C02-EEPROM_第10张图片

void WriteEeprom(u8 add, u8 dat)
{
	I2CStart();
	I2CSendByte(0xA0);
	I2CWaitAck();
	I2CSendByte(add);
	I2CWaitAck();
	I2CSendByte(dat);
	I2CWaitAck();
	I2CStop();
	Delay5ms();//延迟5ms		
}

实现任意读

(十一)IIC总线-AT24C02-EEPROM_第11张图片

u8 ReadEeprom(u8 add)
{
	u8 tmp;
	
	I2CStart();
	I2CSendByte(0xA0);
	I2CWaitAck();
	I2CSendByte(add);
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0xA1);
	I2CWaitAck();
	tmp = I2CReceiveByte();
	I2CSendAck(1);
	I2CStop();
	
	return tmp;		
}

读写应用

功能:用eeprom记录开机次数,S7短按键清除开机次数
小方法:这里用到了 一个标记法,解决了第一次开机检测问题

void EepromTask()
{
	if(ReadEeprom(0x7f)!= 213){
		WriteEeprom(0x7f,213);
		WriteEeprom(0x03,1);
		open_num = 1;
	}else{	
		open_num = ReadEeprom(0x03);
		WriteEeprom(0x03,++open_num);		
	}
}


----- 如有错误欢迎大家批评指正!!!

你可能感兴趣的:(蓝桥杯电子类,蓝桥杯,单片机,嵌入式,c语言)