IIC接口EEPROM的控制

I2C接口EEPROM的控制
AT24CxxAtmel公司生产的串行电可擦的可编程存储器EEPROM,它采用8引脚双排直插式封装,具有结构紧凑、存储容量大等特点,可以在I2C总线上并接4片该芯片,特别适用于具有大容量数据存储要求的数据采集系统。本设计以AT24C512为例,介绍该芯片的工作原理和与单片机的软硬件接口。
一.AT24C512简要介绍
AT24C512Atmel公司生产的64KByte串行电可擦的可编程存储器,内部有512页,每一页为128Byte,任一单元的地址16位,地址范围为0000~0FFFFH。它采用8引脚封装,具有结构紧凑、存储容量大等特点,可以在I2C总线上并接4片芯片,特别适用于具有大容量数据存储要求的数据采集系统。因此在测控系统中被大量采用。
1AT24C512的主要特性
具有如下3种工作电压:
5.0 (VCC = 4.5V to 5.5V)
2.7 (VCC = 2.7V to 5.5V)
1.8 (VCC = 1.8V to 3.6V)
存储容量为65,536Byte512Kbit( 64Kx 8bit)
100kHz400kHz1MHz I2C总线兼容。
ESD保护电压>4kV
数据可保存40年。
CMOS低功耗技术,最大写入电流为3mA
采用施密特触发,可抑制输入噪声。
符合双向数据传送协议。
具有硬件写保护和软件数据保护功能。
具有128Byte页写入缓存器。
自动定时的写周期。
具有8引脚DIP20引脚SOIC封装等多种。
2、管脚说明新闻自由与言论自由
AT24C512的管脚如图 所示
各引脚的功能如下:
A0A1:地址选择输入端。在串行总线结构中,如需连接4AT24C512弗吉尼亚伍尔夫芯片,则可用A0A1来区分各芯片。A0A1悬空时为0
SDA:双向串行数据输入输出口。用于存储器与单片机之间的数据交换。
SCL:串行时钟输入。通常在其上升沿将SDA上的数据写入存储器,而在下降沿从存储器读出数据并送往SDA
WP:写保护输入。此引脚与地相连时,允许写操作;与VCC相连时,所有的写存储器操作被禁止。如果不连,该脚将在芯片内部下拉到地。
VCC:电源。
GND:接地。
NC:悬空。
二.硬件接口电路的设计
24C512的接口电路如图 所示,由于采用IC串行总线接口,连线非常简单。如果单片机没有集成硬件I2C总线接口,可以采用P1.0P1.1口线来模拟I2C总线,AT24C512SDASCL为开漏输出,故接入10k的上拉电阻。
三.软件程序设计
1、起停信号
时钟线保持高电平期间,数据线电平从高到低的跳变代为I2C总线的起始信号。时钟线保持高电平期间,数据线电平从低到高的跳变代为I2C总线的停止信号。
2、设备选址
器件通过发送1个起始信号启动发送过程,然后发送它所需要寻址的从器件地址,8位从器件地址的高5位固定为10100,接下来的2位(A0A1)为器件的地址位,因此最多可以将4AT24C512连接到同一总线上使存储容量扩展至256Kbyte。注意,这两位必须与A0A1两引脚的输入状态相对应,从器件地址的最低位为读写控制位,“1”表示对从器件进行读操作,“0”表示对从器件进行写操作,在主器件发送起始信号和从器件发送地址字节后AT24C512监测总线并当其地址与发送的从地址相符时发出1应答信号(通过SDA线),AT24C512再根据读写控制位(R/W)的状态进行读写操作,从器件地址字节内容如表 所示。
忆韦素园君
AT24C512地址控制字
1蒋毅君 清华大学
0
1
0
0
A0
A1
R/W六元子
3、应答信号
I2C总线传送数据时,每成功传送1个字节,接收器都必须产生1个应答信号,应答的器件在第9个时钟周期将SDA线拉低表示其已收到18位数据。AT24C512在接收到起始信号和从器件地址之后产生应答信号,如果器件已选择了写操作,则在每接收18位字节之后产生1个应答信号。
当该器件工作于读模式时,在发送18位数据后释放SDA线并监测1个应答信号,一旦接收到应答信号,则继续发送数据,若主器件没有发送应答信号,器件停止传送数据并等待1个停止信号。
4、写操作
写操作可分为字节写和页写两种写入方式。通常E2PROM的写入占用一定的写入时间,但AT24C512内部设有128字节的页写缓存,使得操作该器件如同操作SRAM一样方便,页面缓存使得两种写入方式的操作过程相同,区别仅在于写入数据字节的多少。下面以字节写入为例介绍写操作过程。
在字节写操作模式下,主器件首先给从器件发送起始信号和从器件地址信息,在从器件送回应答信号后,主器件在发送两字节的16位地址信息写入到AT24C512地址指针,主器件在收到从器件的应答信号后,再发送1个字节的数据到被寻址的存储单元,从器件在此应答,并在主器件产生停止信号后开始内部数据擦写,在内部擦写过程中,从器件不再应答主器件的任何请求。
在写页方式时,AT24C512可以一次性写入一页128Byte。其初始化过程与字节的方法基本相同。不同的是:当写入一个数据字节后,单片机不发停止状态,而是在应答信号后接着输入127Byte;每1Byte接收完毕后,AT24C512则这样输出一个应答信号。
5、读操作
读操作分为立即读、随机读和连续读。其初始化过程基本与写操作相同,只是在设备选择字中的最低位要改成读而已。在当前地址读操作方式时,内部数据的地址将保持在最后的读写操作地址加1上,直到读到最后字节后又回到最开始的位置。而随机读操作之前先要向AT24C512写入1Byte地址,然后才能读。读串操作既可以是当前地址读,也可以是随机地址读。当单片机接收到一个数据字后,会回应一个应答信号。AT24C512在接收到应答信
号后会将地址加1,接着输出下1Byte.当单片机接收到数据但不送应答信号时,读过程结束。
读写程序
1I2C总线基本读写程序
//-----------------------函数声明,变量定义--------------------------------------------------------------
#include <reg51.h>
#include <intrins.h>
sbit SDA=P1^0;                              // p1.0口模拟数据口
sbit SCL=P1^1;                              // p1.1口模拟时钟口
#define  NUM  10                            // 接收和发送缓存区的深度
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};                   
unsigned char idata sendbuf[NUM];              // 数据发送缓冲区
unsigned char idata receivebuf[NUM];              // 数据接收缓冲区
bit  bdata SystemError;                      // 从机错误标志位
//------------------------------------------------总线基本函数声明
iic_start()                            // 启动I2C总线子程序
iic_stop()假死状态;                            // 停止I2C总线数据传送子程序
slave_ACK()                            // 从机发送应答位子程序
slave_NOACK()                        // 从机发送非应答位子程序,迫使数据传输过程结束
IICSendByte(unsigned char ch)        // 发送一个字节
IICreceiveByte()                    // 接收一字节子程序
writeNbyte(unsigned char slave_add, unsigned char n)       
//发送n位数据子程序
                                        // slave_add从机地址,n要发送的数据个数
receiveNbyte(unsigned char idata slave_add, unsigned char n)

本文发布于:2024-09-22 12:36:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/8969.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:器件   数据   地址   应答   信号   发送   字节
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议