51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 取经杂谈 > 详细内容
大容量串行E2PROM AT24C512及其应用
作者:佚名  发布时间:2009/12/5  阅读次数:1819  字体大小: 【】 【】【

1.概述  
       近年来,以单片机为核心构成的智能仪器仪表与数据采集系统获得了愈来愈广泛的应用。传统的数据存储方法均是通过总线型非易失数据存储器来保存采集的数据。随着单片机技术的不断发展及各种非总线型单片机的不断涌现,采用非总线型单片机并配合大容量串行E2PROM构成的数据存储系统,将是一种非常好的数据存储方法。该方法一方面可提高系统的可靠性,另一方面又可降低系统成本。  
       AT24C512ATMEL公司新近推出的具有I2C总线容量达512Kbit64K×8)的E2PROM,该芯片的主要特性如下:存储容量为65536byte;与100kHz400kHz1MHzI2C总线兼容;100000次编程/擦写周期;单电源、读写电压为1.8V5.5VESD保护电压>4kV;数据可保存40年;写保护功能,当WP为高电平时,进入写保护状态;CMOS低功耗技术,最大写入电流为3mA128byte页写入缓存器;自动定时的写周期;具有8引脚DIP20引脚SOIC封装等多种封装形式。

2.引脚排列及功能

       AT24C512DIP型封装及20引脚的SOIC型封装的引脚排列如图1所示,各个引脚的功能如下:

SCL:串行时钟该引脚为一输入引脚,用于产生器件所有数据发送或接收的时钟。

SDA:串行数据/地址双向串行数据/地址引脚,用于器件所有数据的发送或接收。SDA1个开漏输出引脚,可与其它开漏输出或集电极开路输出进行线接。

WP:写保护当引脚WP连接到VCC时,所有存储数据变为写保护。当引脚WPVSS时,则允许器件进行正常读写操作。

           A0A1:器件地址输入这两个引脚为硬件连线或者不连接,通过连接VCCVSS的组合可使单总线最多寻址4AT24C512,当这些引脚没有连接时其默认值为0

3.器件功能描述

       AT24C512是具有I2C总线的存储芯片,因此该器件必须严格遵守I2C总线传输协议。I2C总线简单的硬件接口是以复杂的时序及软件编程为代价的,下面首先对该器件的时序进行描述。

       1)起停信号

       时钟线保持高电平期间,数据线电平从高到低的跳变代为I2C总线的起始信号。时钟线保持高电平期间,数据线电平从低到高的跳变代为I2C总线的停止信号。

       2)器件寻址

       主器件通过发送1个起始信号启动发送过程,然后发送它所需要寻址的从器件地址,8位从器件地址的高5位固定为10100,接下来的2位(A0A1)为器件的地址位,因此最多可以将4AT24C512连接到同一总线上使存储容量扩展至256Kbyte。注意,这两位必须与A0A1两引脚的输入状态相对应,从器件地址的最低位为读写控制位,“1”表示对从器件进行读操作,“0”表示对从器件进行写操作,在主器件发送起始信号和从器件发送地址字节后,AT24C512监测总线并当其地址与发送的从地址相符时发出1个应答信号(通过SDA线),AT24C512再根据读写控制位(R/W)的状态进行读写操作,从器件地址字节内容如表1所示。

1       从器件地址内容

 

DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
  
1
0
1
0
0
A1
A0
R/W  

       3)应答信号

       I2C总线传送数据时,每成功传送1个字节,接收器都必须产生1个应答信号,应答的器件在第9个时钟周期将SDA线拉低表示其已收到18位数据。AT24C512在接收到起始信号和从器件地址之后产生应答信号,如果器件已选择了写操作,则在每接收18位字节之后1个应答信号。

       当该器件工作于读模式时,在发送18位数据后释放SDA线并监测1个应答信号,一旦接收到应答信号,则继续发送数据,若主器件没有发送应答信号,器件停止传送数据并等待1个停止信号。

       掌握了AT24C512的操作时序后再配合一定的地址/数据信息就可完成该器件的读写操作。

       4)写操作

       写操作可分为字节写和页写两种写入方式。通常E2PROM的写入占用一定的写入时间,但AT24C512内部设有128字节的页写缓存,使得操作该器件如同操作SRAM一样方便,页面缓存使得两种写入方式的操作过程相同,区别仅在于写入数据字节的多少。下面以字节写入为例介绍写操作过程。

       在字节写操作模式下,主器件首先给从器件发送起始信号和从器件地址信息,在从器件送回应答信号后,主器件在发送两字节的16位地址信息写入到AT24C512地址指针,主器件在收到从器件的应答信号后,再发送1个字节的数据到被寻址的存储单元,从器件在此应答,并在主器件产生停止信号后开始内部数据擦写,在内部擦写过程中,从器件不再应答主器件的任何请求,字节写入操作时序如图2所示。

       5)读操作

       读操作分为立即读、随机读和连续读。立即读是在最后操作字节的地址上加1进行读取,而连续读则是在立即读和随机读起动后主器件通过应答信号响应完成多个数据的读取,在主器件发出停止信号后结束读取过程。下面以随机读为例介绍读操作过程。

       随机读操作允许主器件对存储器的任意字节进行读操作。操作过程为主器件首先发送起始信号,从器件地址和欲读取字节的地址执行1个伪写操作,此时R/W位应置0,在AT24C512应答后,主器件重新发送起始信号和从器件地址,此时R/W位应置1AT24C512响应并发送应答信号,然后输出所要求的18位字节数据。主器件不发送应答信号,但产生1个停止信号。字节读操作时序如图3所示。

4应用

       AT24C512AT89C2051单片机的硬件连接电路如图4所示。这里使用了2AT24C512组成寻址空间为128K字节的E2PROM存储器电路。其中U2的器件地址为A0H,存储地址空间为0000-0FFFFHU3的器件地址为A2H,存储地址空间为0000-0FFFFH

       由于AT89C2051不具有I2C总线,因此采用P1.0P1.1口线来模拟I2C总线,AT24C512SDASCL为开漏输出,故接入10kΩ的上拉电阻器。下面是与上述电路配套的E2PROM读写程序:

;内存数据定义

BitCnt         DATA       30H;/写数据位数计数器

ByteCnt       DATA       31H;/写数据字节数计数器

SlvAddr       DATA       32H;E2PROM器件地址

SubAdrl       DATA       33H;存储单元地址高8

SubAdr2       DATA       34H;存储单元地址低8

ReadDat       DATA       50H;读操作数据缓冲区

WriteDat     DATA       40H;写操作数据缓冲区

;端口位定义

SDA               BIT         P1.0;模拟I2C数据传送位

SCL               BIT         P1.1;模拟I2C时钟控制位

ACK               BIT         20H;读非应答标志

;主程序

MAIN:           MOV         SP         60H;设堆栈

Write:         MOV   SlvAdr,     A0H;选择1个器件地址

                     MOV   ByteCnt,   08H;设写入数据长度为8字节

                     MOV   SubAdr1,   00H;设写入单元首址为0020H

                     MOV   SubAdr2,   20H;

                     LCALL   WriteData   ; 写数据

                     ……

Read:           MOV     Slvadr,       A0H;选择1个器件地址

                     MOV     Bytecnt,     08H;设读出数据长度为8字节

                     MOV     SubAdr1,     00H;设读出单元

                     MOV     SubAdr2,     20H;首址为0020H

                     LCALL     ReadData;     读数据

                     ……

WriteData:LCALL   Start;         I2C总线起始条件

                   MOV     A,SlvAdr;     取器件地址

                   LCALL   writeByte; 发送器件地址

                   MOV     A,SubAdr1

                   LCALL   writeByte;发送高8位地址

                   MOV     A,SubAdr2

LCALLwriteByte;发送低8位地址

MOVR0,WriteDat;取写入数据的首地址

Next:MOVA,@R0

LCALLwriteByte;写入1字节数据

LNCR0;取下1个数据

DJNZByteCnt,Next;重复操作直到写完全部数据

LCALLStop;发送I2C总线停止条件

LCALLDL10ms;延时10ms等待E2PROM内部数据

;写完

RET

;读数据子程序

ReadData:LCALLStart

MOVA,SlvAdr

LCALLWriteByte

MOVA,Subadr1

LCALLWriteByte

MOVA,Subadr2

LCALLWriteByte

LCALLStart;重复发送I2C总线起始条件

MOVA,Slvadr

SETBACC.0;R/W位置1

LCALLWriteByte

CLRACK;请读非应答标志

MOVR0,RdadData;读缓冲区首址

DJNZByteCnt,Next1

SJMPLast

Next1:LCALLReadByte;接收1个字节数据

MOV@R0,A;接收数据送缓冲区

INCR0

DJNZByteCnt,Next1;重复接收

Last:SETBACK;接收最后1个字节数据

ACALLReadByte

MOVR0,A

LCALLStop

RET

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号