串行EEPROM24C02接口方法讲解.docx
《串行EEPROM24C02接口方法讲解.docx》由会员分享,可在线阅读,更多相关《串行EEPROM24C02接口方法讲解.docx(9页珍藏版)》请在冰豆网上搜索。
串行EEPROM24C02接口方法讲解
串行EEPROM(24C02)接口方法
在新一代单片机中,无论总线型还是非总线型单片机,为了简化系统结构,提高系统的可靠性,都推出了芯片间的串行数据传输技术,设置了芯片间的串行传输接口或串行总线。
串行总线扩展接线灵活,极易形成用户的模块化结构,同时将大大简化其系统结构。
串行器件不仅占用很少的资源和I/O线,而且体积大大缩小,同时还具有工作电压宽,抗干扰能力强,功耗低,数据不宜丢失和支持在线编程等特点。
目前,各式各样的串行接口器件层出不穷,如:
串行EEPROM,串行ADC/DAC,串行时钟芯片,串行数字电位器,串行微处理器监控芯片,串行温度传感器等等。
串行EEPROM是在各种串行器件应用中使用较频繁的器件,和并行EEPROM相比,串行EEPROM的数据传送的速度较低,但是其体积较小,容量小,所含的引脚也较少。
所以,它特别适合于需要存放非挥发数据,要求速度不高,引脚少的单片机的应用。
这里绍
串行EEPROM芯片,以及它们和单片机的接口技术。
1、串行EEPROM及其工作原理
串行EEPROM中,较为典型的有ATMEL公司的AT24CXX系列以及该公司生产的
AT93CXX系列,较为著名的半导体厂家,包括Microchip,国家半导体厂家等,都有AT93CXX系列EEPROM产品。
AT24CXX系列EEPROM
AT24CXX系列的串行电可改写及可编程只读存储器EEPROM有10种型号,其中典型
的型号有AT24C01A/02/04/08/16等5种,它们的存储容量分别是1024/2048/4096/8192/16384位,也就是128/256/512/1024/2048字节。
这个系列一般用于低电压,低功耗的工业和商业用途,并且可以组成优化的系统。
这个系统还有多种电压级别,包括5V(4.5~5.5V),2.7V(2.7~5.5V),2.5V(2.5~5.5V),1.8V(1.8~5.5V)等4种电压级别。
它们的封装有8引脚PDIP方式,8引脚和16引脚SOIC方式。
信息存取采用2线串行接口。
这里我们就24C02的结构特点,其他系列比较类似。
2、结构原理及引脚
AT24C02有地址线A0~A2,串行数据引脚SDA,串行时钟输入引脚SCL,写保护引
脚WP等引脚。
很明显,其引脚较少,对组成的应用系统可以减少布线,提高可靠性。
各引脚的功能和意义如下。
(8):
VCC引脚,电源+5V。
(4):
GND引脚,地线。
(6):
SCL引脚,串行时钟输入端。
在时钟的正跳沿即上升沿时把数据写入EEPROM;在时钟的负跳沿即下降沿时把数据从EEPROM中读出来。
(5):
SDA引脚,串行数据I/O端,用于输入和输出串行数据。
这个引脚是漏极开路的端
口,故可以组成“线或”结构。
(1)、
(2)、(3):
A0,A1,A2引脚,是芯片地址引脚。
在型号不同时意义有些不同,但都要接固定电平。
(7):
WP引脚,写保护端。
这个端提供了硬件数据保护。
当把WP接地时,允许芯片执行一般读写操作;当把WP接VCC时,则对芯片实施写保护。
3、存储器的组织及运行
存储器的组织:
对于不同的型号,存储器的组织不一样,其关键原因在于存储器容
量存在差异。
对于AT24CXX系列的EEPROM,其典型型号的存储器组织如下。
AT24C01A:
内部含有128个字节,故需要7位地址对其内部字节进行寻址
AT24C02:
内部含有256个字节,故需要8位地址对其内部字节进行读写。
4、运行方式:
对于时钟及数据传送,串行数据I/O端口SDA一般需要用外部上拉电阻将其电平拉高。
加到SDA的数据只有在串行时钟SCL对于低电平的时间周期内可以改变。
当串行时钟SCL处于高电平时,SDA的数据变化用于指明起始或停止状态。
在SCL为高电平期间,如果SDA从低电平上升到高电平,则表示起始状态;如果SDA从高电平下降到低电平,则表示停止状态。
起始状态:
当SCL为高电平时,SDA由高电平变到低电平则处于起始状态。
起始状态
应处于任何其他命令之前。
停止状态:
当SCL处于高电平时,SDA从低电平变到高电平则处于停止状态。
在执行
完读序列信号之后,停止命令将把EEPROM置于低功耗的备用方式(StandbyMode).
应答信号:
应答信号是由接受数据的器件发出的。
当EEPROM接受完一个写入数据之
后,会在SDA上发一个”0”应答信号。
反之,当单片机接受完来自EEPROM的数据后单片机也应向SDA发ACK信号。
ACK信号在第9个时钟周期时出现。
备用方式(StandbyMode):
AT24C01A/02/04/08/16都具有备用方式,以保证在没有读写操作时芯片处于低功耗状态。
在下面两种情况中,EEPROM都会进入备用方式:
第一,芯片通电的时候;
第二,在接到停止位和完成了任何内部操作之后。
AT24C02等5种典型的EEPROM在进入起始状态之后,需要一个8位的“器件地址字”去启动存储器进行读或写操作。
在写操作中,它们有“字节写”,“页面写”两种不同的写入方法。
在读操作中,有“现行地址读”,“随机读”和“顺序读”三种各具特点的读出方法。
下面分别介绍器件寻址,写操作和读操作。
①器件寻址:
所谓器件寻址(DeviceAddressing)就是用一个8位的器件地址字(DeviceAddressWord)去选择存储器芯片。
在逻辑电路中的AT24CXX系列的5种芯片种,即AT24C01A/02/04/08/16中,如果和器件地址字相比较结果一致,则读芯片被选中。
下面对器件寻址的过程和意义加以说明。
②芯片的操作地址
D7D6D5D4D3D2D1D0
1010A2A1A0R/W
图1:
命令字格式
用于存储器EEPROM芯片寻址的器件地址字如图1所示。
它有4种方式,分别对应于
1K/2K,4K,8K和16K位的EEPROM芯片。
从图中看出:
器件地址字含有3个部分。
第一部分是高4位,它们称为EEPROMAT24C01A/02/04/08/16的标识第二部分称为硬布线地址,它们是标识后的3位。
第三部分是最低位,它是读/写操作选择位。
第一部分:
器件标识,器件地址字的最高4位。
这4位的内容恒为”1010”,用于标识EEPROM器件AT24C01A/02/04/08/16。
第二部分:
硬布线地址,是与器件地址字的最高4位相接的低3位。
硬布线地址的3位有2种符号:
Ai(i=0~2),Pj(j=0~2)其中Ai表示外部硬布线地址位
对于AT24C10A/02这两种1K/2K位的EEPROM芯片,硬布线地址为”A2,A1,A0”.在应用
时,”A2,A1,A0”的内容必须和EEPROM芯片的A2,A1,A0的硬布线情况,即逻辑连接情况相比较,如果一样,则芯片被选中;否则,不选中。
AT24C01A/02:
真正地址=字地址
第三部分:
读/写选择位,器件地址字的最低位,并用R/W表示。
当R/W=1时,执行读操作;当R/W=0时,执行写操作。
当EEPROM芯片被选中时,则输出”0”;如果EEPROM芯片没有被选中,则它回到备用方式。
被选中的芯片。
其以后的输入,输出情况视写入和读出的内容而定。
③写操作:
AT24C01A/02/04/08/16这5种EEPROM芯片的写操作有2种:
一种是字节写,另一种是页面写。
字节写:
这种写方式只执行1个字节的写入。
其写入过程分外部写和内部写两部分,分别说明如下:
在起始状态中,首先写入8位的器件地址。
则EEPROM芯片会产生一个”0”信号ACK输出作为应答;接着,写入8位的字地址,在接受了字地址之后,EEPROM芯片又产生一个”0”应答信号ACK;随后,写入8位数据,在接受了数据之后,芯片又产生一个”0”信号ACK作为应答。
到此为止,完成了一个字节写过程,故应在SDA端产生一个停止状态,这是外部写过程。
在这个过程中,控制EEPROM的单片机应在EEPROM的SCL,SDA端送入恰当的信号。
当然在一个字节写过程结束时,单片机应以停止状态结束写过程。
在这时,EEPROM进入内部定时的写周期,以便把接受的数据写入到存储单元中。
在EEPROM的内部写周期中,其所有输入被屏蔽,同时不响应外部信号直到写周期完成。
这是内部写过程。
内部写过程大约需要10ms时间。
内部写过程处于停止状态与下一次起始状态之间。
页面写:
这种写入方式执行含若干字节的1个页面的写入。
对于AT24C01A/02,它们的1个页面含8个字节;页面写的开头部分和字节写一样。
在起始状态,首先写入8位器件地址;待EEPROM答当了”0”信号ACK之后,写入8位字地址;又待芯片应了”0”信号ACK之后,写入8位数据。
随后页面写的过程则和字节写有区别。
当芯片接受了第一个8位数据并产生应答信号ACK之后,单片机可以连续向EEPROM
芯片发送共为1页面的数据。
对于AT24C01A/02,可发送共1个页面的8个字节(连第一个8位数据在内)。
对于AT24C04/08/16,则共可发送1个页面共16个字节(连第一个8位数据在内)。
当然,每发一个字节都要等待芯片的应答信号ACK。
之所以可以连续向芯片发送1个页面数据,是因为字地址的低3~4位在EEPROM芯片内部可实现加1,字地址的高位不变,用于保持页面的行地址。
页面写和字节写两者一样可,都分为外部写和内部写过程。
应答查询:
应答查询是单片机对EEPROM各种状态的一种检测。
单片机查询到EEPROM
有应答”0”信号ACK输出,则说明其内部定时写的周期结束,可以写入新的内容。
单片机是通过发送起始状态及器件地址进行应答查询的。
由于器件地址可以选择芯片,则检测芯片送出到SDA的状态就可以知道其是否有应答了。
④读操作:
读操作的启动是和写操作类同的。
它一样需要图1所示的器件地址字。
和写操纵不同的就是信号下降沿时执行读操作。
读操纵有3种方式,即现行地址读,随机读和顺序读。
下面分别说明它们的工作过程。
现行地址读:
在上次读或写操纵完成之后。
芯片内部字地址计数器会加1,产生现行地址。
只要没有再执行读或写操作,这个现行地址就会在EEPROM芯片保持接电的期间一直保存。
一旦器件地址选中EEPROM芯片,并且有R/W=1,则在芯片的应答信号ACK之后把读出的现行地址的数据送出。
现行地址的数据输出时,就由单片机一位一位接受,接收后单片机不用向EEPROM发应答信号ACK”0”电平,但应保证发出停止状态的信号以结束现行地址读操作。
现行地址读会产生地址循环覆盖现象,但和写操纵的循环覆盖不同。
在写操纵中,地址的循环覆盖是现行页面的最后一个字节写入之后,再行写入则覆盖同一页面的第一个字节。
而在现行地址读操纵中,地址的循环覆盖是在最后页面的最后一个字节读出之后,再行读出才覆盖第一个页面的第一个字节。
随机读:
随机读和现行地址读的最大区别在于随机读会执行一个伪写入过程以把字地址装入EEPROM芯片中,然后执行读出,显然,随机读有2个步骤。
第一,执行伪写入——把字地址送入EEPROM,以选择需读的字节。
第二,执行读出——根据字地址读出对应内容。
当EEPROM芯片接收了器件地址及字地址时,在芯片产生应答信号ACK之后,单片机必须再产生一个起始状态,执行现行地址读,这时单片机再发出器件地址并且令R/W=1,则EEPROM应答器件地址并输出被读数据。
在数据读出时由单片机执行一位一位接收,接收完毕后,单片机不用发”0”应答信号ACK,但必须产生停止状态以结束随机读过程。
应该注意:
在随机读的第二个步骤是执行现行地址读的,由于第一个步骤时芯片接收了字地址,故现行地址就是所送入的字地址。
顺序读:
顺序读可以用现行地址读或随机读进行启动。
它和现行地址读、随机读的最大区别在于:
顺序读在读出一批数据之后才由单片机产生停止状态结束读操作;而现行地址读和随机读在读出一个数据之后就由单片机产生停止状态结束读操作。
执行顺序读时,首先执行现行读或随机读的有关过程,在读出第一个数据之后,单片机输出“0”应答信号ACK。
在芯片接收应答信号ACK后,就会对字地址进行计数加1,随后串行输出对应的字节。
当字地址计数达到存储器地址的极限时,则字地址会产生覆盖,顺序读将继续进行。
只有在单片机不再产生“0”应答信号ACK,而在接收数据之后马上产生停止状态,才会结束顺序读操作。
在对AT24CXX系列执行读写的2线串行总线工作中,其有关信号是由单片机的程序和EEPROM产生的。
有两点特别要记住:
串行时钟必须由单片机程序产生,而应答信号ACK则是由接收数据的器件产生,也就是写地址或数据时由EEPROM产生ACK,而读数据时由单片机产生。
串行EEPROM(24C02)参考程序
;=========================================
;写24C02EEPROM数据子程序
;R0:
RAM地址指针,R2:
8位移位计数器
;R3:
数据字节计数器
;R4:
24C02存储地址
;------------------------------------------
WR_EEROM:
NOP
W_LOOP:
ACALLSTART24
MOVA,#0A0H
ACALLWBYTE
MOVA,R4
ACALLWBYTE
MOVA,@R0
ACALLWBYTE
ACALLSTOP24
ACALLDLY10MS
INCR0
INCR4
DJNZR3,W_LOOP
RET
;===============================
;读24C02EEPROM数据子程序
;R0:
RAM地址指针,R2:
8位移位计数器
;R3:
数据字节计数器
;R4:
24C02存储地址
;----------------------------------------
RD_EEROM:
NOP
R_LOOP1:
ACALLSTART24
MOVA,#0A0H
ACALLWBYTE
MOVA,R4
ACALLWBYTE
ACALLSTART24
MOVA,#0A1H
ACALLWBYTE
ACALLRBYTE
MOV@R0,A
INCR0
INCR4
DJNZR3,R_LOOP1
ACALLSTOP24
RET
;-----------------------------------
RBYTE:
NOP
CLRSCL
MOVR2,#08H
SETBSDA
RBY0:
CLRSCL
NOP
SETBSCL
NOP
MOVC,SDA
RLCA
DJNZR2,RBY0
CLRSCL
NOP
CLRSCL
SETBSDA
NOP
SETBSCL
RET
;-------------------------------------
WBYTE:
NOP
MOVR2,#08H
WBY0:
CLRSCL
RLCA
MOVSDA,C
NOP
SETBSCL
DJNZR2,WBY0
CLRSCL
NOP
SETBSCL
NOP
JBSDA,$
CLRSCL
NOP
RET
;---------------------------------
START24:
CLRSCL
NOP
SETBSDA
NOP
SETBSCL
NOP
CLRSDA
NOP
CLRSCL
RET
;---------------------------------
STOP24:
CLRSCL
NOP
CLRSDA
NOP
SETBSCL
NOP
SETBSDA
NOP
CLRSCL
RET
;---------------------------------
DLY10MS:
MOVR6,#35
DLYR7:
MOVR7,#177
DJNZR7,$
DJNZR6,DLYR7
RET