串行eepromat24cxx芯片资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串行EEPROM AT24CXX芯片资料
AT24CXX是美国ATMEL公司的低功耗CMOS串行EEPROM,典型的型号有
AT24C01A/02/04/08/16等5种,它们的存储容量分别是
1024/2048/4096/8192/16384位;也就是128/256/512/1024/2048字节;使用电压级别有5V,2.7V,2.5V,1.8V;本文主要介绍常用的AT24C02即256字节存储器的使用;它具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。
外行如图:
AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址(实验板中直接接地只有一块器件);第8脚和第4脚分别为正、负电源。
第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,SDA和SCL 都需要和正电源间各接一个5.1K的电阻上拉。
第7脚为WP写保护端,接地时允许芯片执行一般的读写操作。
接电源端时不允许对器件写。
24C02中带有片内地址寄存器。
每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。
所有字节均以单一操作方式读取。
为降低总的写入时间,一次操作可写入多达8个字节的数据。
;这是将0100H地址中以下的8个数据写到24C02的01H为首址单元中去的汇编程序可直接在实验板上实验。
ORG 0000H
SCL BIT P3.7;定义24C02的串行时钟线
SDA BIT P3.6;定义24C02的串行数据线
LJMP START
START:LCALL STAR;调用
MOV R2,#08H;一个数据有8位
MOV DPTR,#0100H;定义源数据的位置LOOP:MOV A,#00H
MOVC A,@A+DPTR
LCALL SDATA
LCALL ACK
JC LOOP
INC DPTR
DJNZ R2,LOOP
LCALL STOP;调用停止子程序STAR:SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
SDATA:MOV R0,#08H
LOOP0:RLC A
MOV SDA,C
NOP
NOP
SETB SCL
NOP
NOP
NOP
CLR SCL
DJNZ R0,LOOP0 RET
ACK:SETB SDA NOP
NOP
SETB SCL NOP
NOP
NOP
NOP
MOV C,SDA CLR SCL
RET
STOP:CLR SDA NOP
NOP
NOP
NOP
SETB SCL NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
RET
ORG 0100H
DB 0A0H,10H,01H,02H,03H,04H,05H,06H
END
读写子程序如下:
;写串行E2PROM子程序XEPR
; R3=10100000(命令1010+器件3位地址+读/写。
器件地址一个芯片,是000); (R4)=片内字节地址
; (R1)=欲写数据存放地址指针
; (R7)=连续写字节数n
XEPR: MOV P3,#0FFH
CLR SDA ;发开始信号
MOV A,R3 ;送器件地址
ACALL SUBS
MOV A,R4 ;送片内字节地址
ACALL SUBS
AIN: MOV A,@R1
ACALL SUBS ;调发送单字节子程序INC R1
DJNZ R7,AIN;连续写n个字节
CLR SDA ;SDA置0, 准备送停止信号
ACALL DELAY ;延时以满足传输速率要求
SETB SCL ;发停止信号
ACALL DELAY
SETB SDA
RET
SUBS: MOV R0,#08H ;发送单字节子程序
LOOP: CLR SCL
RLC A
MOV SDA,C
NOP
SETB SCL
ACALL DELAY
DJNZ R0,LOOP ;循环8次送8个bit
CLR SCL
ACALL DELAY
SETB SCL
REP: MOV C,SDA
JC REP ;判应答到否,未到则等待
CLR SCL
RET
DELAY: NOP
NOP
RET
;读串行E2PROM子程序DEPR
;(R1)=欲读数据存放地址指针
;; R3=10100001(命令1010+器件3位地址+读/写。
器件地址一个芯片,是000);(R4)=片内字节地址
;(R7)=连续读字节数
DEPR: MOV P3,#0FFH
CLR SDA ;发开始信号
MOV A,R3 ;送器件地址
ACALL SUBS ;调发送单字节子程序
MOV A,R4 ;送片内字节地址
ACALL SUBS
MOV P3,#0FFH
CLR PSDA ;再发开始信号
MOV A,R3
SETB ACC.0 ;发读命令
ACALL SUBS
MORE: ACALL SUBR
MOV @R1,A
INC R1
DJNZ R7,MORE
CLR P1.0
ACALL DELAY
SETB SCL
ACALL DELAY
SETB SDA ;送停止信号
RET
SUBR: MOV R0,#08H ;接受单字节子程序LOOP2: SETB SCL
ACALL DELAY
MOV C,SDA
RLC A
CLR SCL
ACALL DELAY
DJNZ R0,LOOP2
CJNE R7,#01H,LOW
SETB SDA ;若是最后一个字节置A=1
AJMP SETOK
LOW: CLR SDA ;否则置A=0
SETOK: ACALL DELAY
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
SETB SDA ;应答毕,SDA置1
RET
程序中多处调用了DELAY子程序(仅两条NOP指令),这是为了满足I2C总线上数据传送速率的要求,只有当SDA数据线上的数据稳定下来之后才能进行读写(即SCL线发出正脉冲)。
另外,在读最后一数据字节时,置应答信号为“1”,表示读操作即将完成。
以上是介绍AT24C02的单个字节的读写操作程序,初学者在能熟练运用后可以再学习“整个页的读写”。