FPGA读写AT24C02实验
- 格式:pdf
- 大小:475.59 KB
- 文档页数:10
AT24C02串行E2PROM的工作原理与读写串行EEPROM中,较为典型的有ATMEL公司的AT24CXX系列和AT93CXX等系列产品。
简称I2C总线式串行器件。
串行器件不仅占用很少的资源和I/O线,而且体积大大缩小,同时具有工作电源宽、抗干扰能力强、功耗低、数据不易丢失和支持在线编程等特点。
I2C总线是一种用于IC器件之间连接的二线制总线。
它通过SDA(串行数据线)及SCL (串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。
1.I2C总线的基本结构:采用I2C总线标准的单片机或IC器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。
CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。
I2C总线接口电路结构如图1所示。
从图中可以看出:对于时钟及数据传送,串行数据I/O端SDA一般需要用外部上拉电阻将其电平拉高。
2.双向传输的接口特性:传统的单片机串行接口的发送和接收一般都分别用一条线,如MCS51系列的TXD和RXD,而I2C总线则根据器件的功能通过软件程序使其可工作于发送或接收方式。
当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。
主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。
I2C总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。
总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于此时数据传送的方向。
SDA和SCL均为双向I/O线,通过上拉电阻接正电源。
当总线空闲时,两根线都是高电平。
连接总线的器件的输出级必须是集电极或漏极开路,以具有线“与”功能。
AT24C02读写测试方法I2C测试工具:武汉吉阳光电科技有限公司的I2C接口系列产品测试软件:1、串口调试助手软件支持型号:GY760X,GY75062、I2CTools V2.1支持型号:GY760X,GY7506,GY7501A,GY7512(两种测试软件任选其一即可)一、24C02信号连接:Pin 1,2,3,4,7脚接GND (该接法的SlaveAdress为0xA0)PIN 5 接SDAPIN 6接SCLPIN 8接VCC, +5V,或3.3V。
二、利用串口调试助手软件测试运行该软件后,波特率选择115200,“16进制显示”打勾,“16进制发送”打勾。
其余采用默认值,不修改。
硬件线路连接好以后,给转换器和被测设备上电。
举例1)从内部地址00开始,读256个字节键入44 A1 00 FF 点发送,若正常,则会收到256个字节,并显示出来。
2)从内部地址20开始,读2个字节键入44 A1 20 01 点发送,若正常,则会收到2个字节,并显示出来。
3)从内部地址00开始,写8个字节11 12 13 14 15 16 17 18键入44 A0 00 11 12 13 14 15 16 17 18 点发送,若正常,则会收到AA,表示通讯成功。
如果收到BB,表示I2C握手失败。
三、利用I2CTools软件。
运行I2CToolsV2.1软件,选择设备型号。
如果是GY760X, 则需选择COM端口和波特率115200点“Open”如果正常,则应将得到结果提示为打开成功和“WorkMode=0 I2C-Channel=0 ClkValue=100khz”SlaveAddr填入A0 ROM/REG ADDR 打勾,填入欲操作的内部地址举例1)从内部地址00开始,读256个字节ROM ADDR填入00WriteDataNum=0ReadRequest=256 执行Read, 如果正常则会提示OK,并返回读到的256个数据。
一这物行时每如一、认识IIC 这是最常用、物理结构上,行信息 传输。
时钟。
信息传每个器件都有如:存储器)C 总线的工作方最典型的II IIC 系统由一。
在数据传输传输的对象和方有一个唯一的地。
发送器或接方式C 总线连接方一条串行数据输时,由主机初方向以及信息地址,而且可接收器可以在IIC 时方式。
据线SDA 和一条初始化一次数息传输的开始可以是单接收的在主模式或从模时序24C02的条串行时钟线数据传输,主和终 止均由的器件(例如模式下操作,的操作 线SCL 组成。
主机使数据在S 主机决定。
如:LCD 驱动器这取决于芯片主机按一定的SDA 线上传输器)或者可以接片是否必须启的通信协议向输的同时还通过接收也可以发启动数据的传从机寻址和进过SCL 线传输发送的器件(例传输还是仅仅被进输例被寻1I 在低2I 寻址。
1.总线上数据IIC 总线是以在时钟线高电低电平时,才2.总线上的信IIC 总线在传据的有效性串行方式传输电平期间数据线才允许数据线上信号送数据过程中输数据,从数据线上必须保持上的电平状态中共有四种类据字节的最高持稳定 的逻辑态变化,如图类型信号,它们高位开始传送,辑电平状态,11-2所示。
们分别是:开,每一个数据位高电平为数据开始信号、停止位在SCL 上都据1,低电平为止信号、重新都有一个时钟为数据0。
只新开始信号和应脉冲相对应。
有在时钟线为应答信号。
为开的停停重之所开始信号(STA 的时候,例如停止信号(STO 停止信号,结重新开始信号之前,主机通所示,当SCL ART):如图1如,没有主动设OP):如图11结束数据通信。
号(Repeated S 通过发送重新开L为高电平时,1-3所示,当设备在使用总-3所示,当。
START):在I 开始信号,可,SDA由高电当SCL 为高电总线(SDA 和S SCL 为高电平IC 总线上,由可以转换与当电平向低电平跳平时,SDA 由CL 都处于高电平时,SDA 由低由主机发送一前从机的通信跳变,产生重由高电平向低电电平),主机通低电平向高电一个开始信号启信模 式,或是重新开始信号,电平跳变,产通过发送开始电平跳变,产生启动一次通信是切换到与另,它的本质就产生开始信号始(START)信号生停止信号。
#include "reg51.h"#include "intrins.h" //包含有函数_nop_()的头文件#define uchar unsigned char#define uint unsigned int#define out P2 //发送缓冲区的首地址sbit scl=P1^1;sbit sda=P1^0;sbit key1=P3^2;sbit key2=P3^3;uchar data mem[4]_at_ 0x55; //发送缓冲区的首地址uchar mem[4]={0x41,0x42,0x43,0xaa}; //欲发送的数据数组uchar data rec_mem[4] _at_ 0x60 ; //接收缓冲区的首地址void start(void); //起始信号函数void stop(void); //终止信号函数void sack(void); //发送应答信号函数bit rack(void); //接收应答信号函数void ackn(void); //发送无应答信号函数void send_byte(uchar); //发送一个字节函数uchar rec_byte(void); //接收一个字节函数void write(void); //写一组数据函数void read(void); //读一组数据函数void delay4us(void); //延时4μsvoid main(void) //主函数{EA=1;EX0=1;EX1=1; //总中断开,外中断0与外中断0允许中断while(1);}void ext0()interrupt 0 //外中断0中断函数{write(); //调用写数据函数}void ext1()interrupt 2 //外中断1中断函数{read(); //调用读数据函数}void read(void) //读数据函数{uchar i;bit f;start(); //起始函数send_byte(0xa0); //发从机的地址f=rack(); //接收应答if(!f){start(); //起始信号send_byte(0xa0);f=rack();send_byte(0x00); //设置要读取从器件的片内地址f=rack();if(!f){start();send_byte(0xa1);f=rack();if(!f){for(i=0;i<3;i++){rec_mem[i]=rec_byte();sack();}rec_mem[3]=rec_byte();ackn();}}}stop();out=rec_mem[3];while(!key2);}void write(void) //写数据函数{uchar i;bit f;start();send_byte(0xa0);f=rack();if(!f){send_byte(0x00);f=rack();if(!f){for(i=0;i<4;i++){send_byte(mem[i]);f=rack();if(f)break;}}}stop();out=0xc3;while(!key1);void start(void) //起始信号{scl=1;sda=1;delay4us();sda=0;delay4us();scl=0;}void stop(void) //终止信号{scl=0;sda=0;delay4us();scl=1;delay4us();sda=1;delay5us();sda=0;}bit rack(void) //接收一个应答位bit flag;scl=1;delay4us();flag=sda;scl=0;return(flag);}void sack(void) //发送接收应答位{sda=0;delay4us();scl=1;delay4us();scl=0;delay4us();sda=1;delay4us();}void ackn(void) //发送非接收应答位{sda=1;delay4us();scl=1;delay4us();scl=0;delay4us();sda=0;}uchar rec_byte(void) //接收一个字节{uchar i,temp;for(i=0;i<8;i++){temp<<=1;scl=1;delay4us();temp|=sda;scl=0;delay4us();}return(temp);}void send_byte(uchar temp) //发送一个字节{uchar i;scl=0;for(i=0;i<8;i++){sda=(bit)(temp&0x80);scl=1;delay4us();scl=0;temp<<=1;}sda=1;}void delay4us(void) //延时4μs {_nop_();_nop_();_nop_();_nop_();}。
E2PROM芯片24C02的读写程序一、实验目的:给24C02的内部RAM写入一组数据,数据从24C02内部RAM的01h开始存放。
然后再把这组数据读出来,检验写入与读出就是否正确。
在这里我们给24C02中写入0、1、2的段码,然后把它读出来,送到数码管显示。
二、理论知识准备:上面两个实验主要学习的就是利用单片机的串口进行通讯,本实验要介绍的就是基于I2C 总线的串行通讯方法,下面我们先介绍一下I2C总线的相关理论知识。
(一)、I2C总线概念I2C总线就是一种双向二线制总线,它的结构简单,可靠性与抗干扰性能好。
目前很多公司都推出了基于I2C总线的外围器件,例如我们学习板上的24C02芯片,就就是一个带有I2C总线接口的E2PROM存储器,具有掉电记忆的功能,方便进行数据的长期保存。
(二)、I2C总线结构I2C总线结构很简单,只有两条线,包括一条数据线(SDA)与一条串行时钟线(SCL)。
具有I2C 接口的器件可以通过这两根线接到总线上,进行相互之间的信息传递。
连接到总线的器件具有不同的地址,CPU根据不同的地址进行识别,从而实现对硬件系统简单灵活的控制。
一个典型的I2C总线应用系统的组成结构如下图所示(假设图中的微控制器、LCD驱动、E2PROM、ADC各器件都就是具有I2C总线接口的器件):我们知道单片机串行通讯的发送与接收一般都各用一条线TXD与RXD,而I2C总线的数据线既可以发送也可以接受,工作方式可以通过软件设置。
所以,I2C总线结构的硬件结构非常简洁。
当某器件向总线上发送信息时,它就就是发送器,而当其从总线上接收信息时,又成为接收器。
(三)、I2C总线上的数据传送下面我们瞧瞧I2C总线就是如何进行数据传送的。
我们知道,在一根数据线上传送数据时必须一位一位的进行,所以我们首先研究位传送。
1、位传输I2C总线每传送一位数据必须有一个时钟脉冲。
被传送的数据在时钟SCL的高电平期间保持稳定,只有在SCL低电平期间才能够改变,示意图如下图所示,在标准模式下,高低电平宽度必须不小于4、7us。
24c02读写—相关资料AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,内含256×8位存储空间,具有工作电压宽(2.5~5.5 V)、擦写次数多(大于10 000次)、写入速度快(小于10 ms)、抗干扰能力强、数据不易丢失、体积小等特点。
而且他是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。
1 AT24C02的引脚功能AT24C02引脚如图1所示。
他的的1、2、3脚是3根地址线,用于确定芯片的硬件地址。
第8脚和第4脚分别为正、负电源。
第5脚SDA为串行数据输入/输出,数据通过这根双向I2C总线串行传送。
第6脚SCL为串行时钟,SDA和SCL为漏极开路端,在实际的应用当中都需要和正电源间各接一个5.1 kΩ的电阻上拉。
第7脚为WP写保护端,接地时允许芯片执行一般的读写操作;接正电源时只允许对器件进行读操作。
2 AT24C02的内部结构图2为AT24C02的内部结构图。
启动、停止逻辑单元 接收数据引脚SDA上的电平信号,判断是否进行启动和停止操作串行控制逻辑单元 根据SCL,SDA电平信号以及“启动、停止逻辑”部件发出的各种信号进行区分,并排列出有关的“寻址”、“读数据”和“写数据”等逻辑,将他们传送到相应的操作单元。
例如:当操作命令为“寻址”时候,他将通知地址计数器加1,并启动“地址比较”器进行工作。
在“读数据”时,他控制“Dout/确认逻辑”单元;在“写数据”时候,他控制“高压泵/定时”电路,以便向E2PROM电路提供编程所需要的高电压。
地址/计数器单元 产生访问E2PROM所需要的存储单元的地址,并将其分别送到X译码器进行字选,送到Y译码器进行位选。
高压泵/定时单元 由于E2PROM数据写入时候需要向电路施加编程高电压,为了解决单一电源电压的供电问题,芯片生产厂家采用了电压的片内提升电路。
电压的提升范围一般可以达12~21.5 V。