EEPROM - AT24C02

引言

单片机运行时的数据都存在于RAM (随机存储器)中,在掉电后RAM中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPROM或FLASHROM等存储器来实现。

ROM最初不能编程,出厂什么内容就永远什么内容,不灵活。后来出现了PROM ,可以自己写入一次,要是写错了,只能换一片。随着不断改进,终于出现了可多次擦除写入的EPROM ,每次擦除要把芯片拿到紫外线上照一下,想- -下你往单片机上下了一个程序之后发现有个地方需要加一句话,为此你要把单片机放紫外灯下照半小时,然后才能再下一次,这么折腾一天也改不了几次。历史的车轮不断前进,伟大的EEPROM出现了,拯救了一大批程序员,终于可以随意的修改ROM中的内容了。

一、EEPROM简介

EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。一般用在即插即用。

狭义的EEPROM:
这种rom的特点是可以随机访问和修改任何一个字节,可以往每个bit中写入0或者1。这是最传统的一种EEPROM,掉电后数据不丢失,可以保存100年,可以擦写100w次。具有较高的可靠性,但是电路复杂/成本也高。因此目前的EEPROM都是几十千字节到几百千字节的,绝少有超过512K的。

广义的EEPROM-Flash:
Flash属于广义的EEPROM,因为它也是电擦除的ROM。但是为了区别于一般的按字节为单位的擦写的EEPROM,我们都叫它Flash。

既然两者差不多,为什么单片机中还要既有Flash又有EEPROM呢?
通常,单片机里的Flash都用于存放运行代码,在运行过程中不能改;EEPROM是用来保存用户数据,运行过程中可以改变,比如一个时钟的闹铃时间初始化设定为12:00,后来在运行中改为6:00,这是保存在EEPROM里,不怕掉电,就算重新上电也不需要重新调整到6:00。

二、EEPROM - AT24C02引脚

在这里插入图片描述

引脚名称功能功能描述
VCC、GND电源、地为芯片提供3.3V电源
A0、A1、A2地址选择用A0,A1,A2设置地址以示区别,最多可挂8个设备,A0,A1,A2悬空为0
WP写保护此引脚接GND允许写操作,接VCC开启写保护
SCL时钟线串行时钟输入
SDA数据线双向串 行数据输入/输出
  • AT24C02内存管理
    AT24C02内存大小为 2K ,即256个字节。 由32页组成,一页8byte

下图是AT24C02 连接 STM32f103的电路图。
在这里插入图片描述

三、AT24C02的地址组成

对于AT24Cxx系列芯片来说,从机地址共有7位,在7位地址中高4位固定为(0b1010),接下来的3位由“A2”、“A1”和“A0”引脚上的电平状态决定。R/W表示读写位,0表示写,1表示读。
在这里插入图片描述

四、AT24C02写入操作

AT24Cxx系列芯片的写操作分为两种模式,第一种模式称为“字节写入模式”,第二种模式称为“页写入模式”。

4.1 字节写入模式

每次写入一个数据都要遵循“起始、寻址、指定地址、写入一字节数据、停止”的过程。
在这里插入图片描述

  • START
    主机给的起始信号。
    在这里插入图片描述
voidI2C_START(void)
{
	I2C_SDA_DDR(1);	//配置SDA引脚为推挽输出模式
	SDA_OUT=1;		//SDA引脚置为高电平
	SCL=1;			//SCL引脚置为高电平
	delay(1);		//延时等待
	SDA_OUT=0;		//将SDA置低产生下降沿(产生起始信号)
	delay(1);		//延时等待
	SCL=0;			//将SCL置低产生下降沿(允许SDA数据传送)
	delay(1);		//延时等待
}

  • MSB、LSB
    MSB表示高位,LSB表示低位。由时序图,高位在前,低位在后。
  • DEVICE ADDRESS
    设备器件地址。前4位固定为1010,后三位是A2,A1,A0
  • R/W
    写入/读写位。0表示写入。
  • ACK
    从机的应答。
  • WORD ADDRESS
    字节地址。写入到rom的地址
  • DATA
    数据。写入到rom地址的数据
  • STOP
    停止位。
    在这里插入图片描述
voidI2C_STOP(void)
{
	I2C_SDA_DDR(1);		//配置 SDA引脚为推挽输出模式
	SDA_OUT=0;			//SDA引脚置为低电平
	SCL=0;				//SCL引脚置为低电平
	delay(1);			//延时等待
	SCL=1;				//将SCL引脚置高产生上升沿
	delay(1);			//延时等待
	SDA_OUT=1;			//将SDA引脚置高产生上升沿(产生终止信号)
	delay(1);			//延时等待
}

4.2 页写入模式(高效写入模式)

数据遵循“起始、寻址、指定页写首地址、连续写入一页数据、停止”的过程。
在这里插入图片描述

  • 怎么页写入EEPROM(参考上述时序图)
    页写入模式的 起始、寻址的步骤 与字节写入模式的一样。
    只是在EEPROM回复ACK后,主机不主动发送停止信号,接着去发送数据。

  • EEPROM怎么做到连续存数据呢?
    主机每发送一个字节数据之后,AT24C02芯片都会产生一个从机应答并将字节地址低位自动加1,高位保持不变。

  • 页缓冲器”有多大呢?
    AT24C01/02芯片的页缓冲器一次可以写入8个字节, 用页方式写入AT24C01/02芯片可一次写入8个字节数据

  • 要是我写的内容不足一页怎么处理?
    在传输完最后一个数据,直接生成停止位就行。

  • 要是我写的内容比一页还多又怎么办?
    如果在终止信号之前,主机发送的数据超过了8个字节,则地址计数器将自动翻转,先前写入的数据会被覆盖。。所以必须分割数据再依次按页传输,否则会造成数据从头覆盖。

4.3 写周期

  • 注意:页写入是先将页数据存放到一个页缓冲区。数据存放完毕后再写入非易失区域。
    接收到终止信号后,AT24Cxx系列芯片会启动内部写周期将数据写到非易失区域。

AT24Cxx系列芯片把数据成功写入非易失区域所花费的时间称为“写周期时间”,也就是“tWR”时间,“写周期时间”是指从一个写时序的有效终止信号到芯片内部编程/擦除周期结束的这一段时间,在写周期时间内,总线接口电路禁止,SDA引脚保持为高电平,器件不响应外部操作。这个时间周期的具体取值需要读看朋友们查阅具体芯片的数据手册,以AT24C02这款芯片为例,该时间参数是低于10ms的。

五、AT24C02读出操作

AT24Cxx系列芯片支持三种不同的读操作方式: “立即地址读方式”、“选择读方式”和“连续读方式"。

5.1 立即地址读方式

立即地址读方式是指从当前的地址开始读取数据。其通信时序如下图图所示。
在这里插入图片描述
AT24Cxx系列芯片内部的地址计数器内容为最后操作字节的地址加1,也就是说,如果上次读/写的操作地址为“N”,则“立即读方式”的地址实际上是从“N+1”开始的。
如果“N”等于上限地址(对于AT24C02芯片来说上限地址等于255),则AT24Cxx系列芯片的内部地址计数器将翻转到“0”地址并且继续输出数据。

5.2 选择读方式

该方式允许主机对AT24Cxx系列芯片内部任意地址的数据进行读操作。就是先写好选择的地址,然后再读取地址的内容。其通信时序如下图图所示。
在这里插入图片描述
在通信开始时,主机首先发送起始信号、“从机地址+R/W位0”和欲读取的数据地址。
这里执行1个DUMMY WRITE 伪写操作过程。(什么叫“伪写”呢?意思是说,我们的实际操作是“写操作”,但是我们想实现的功能却是“读操作”)

5.3 连续读方式

连续读方式就是主机接收到一个数据后,回复ACK信号,直到不想接收了,就回复NO ACK 信号。前面的单次读取,主机都是读取一个数据后就回复NO ACK信号。
在这里插入图片描述
在AT24Cxx系列芯片发送完一个8位字节数据之后,主机不是产生“主机非应答”信号,而是产生一个“主机应答”信号来响应从机,意思是“告知”AT24Cxx系列芯片继续送出数据,读者朋友们要特别注意了,“主机应答”信号的意思是主机需要更多的数据,要求从机继续把数据进行送出。每当主机发出“主机应答”信号之后,从机都会产生“从机应答”。如果主机“不想”再读取数据了,就会发送一个“主机非应答”信号以表示读取操作的结束。

六、编程易错点

注意在写入数据时,要留一个写入到非易失区的时间。

void AT24Cxx_WriteNByte(u8*BUF,u8ADDR,u8LEN)
{
	.....(此处省略具体程序语句)
	I2C_STOP();//产生I2C通信终止信号
	delay(100);//延时等待AT24C02渡过“写周期时间”,至少有10ms
}

七、电平的持续时间表

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值