AT24C02数据存储I2C协议-串口通讯
I2C总线at24c02芯片使用说明
3.2.5 密码储存电路密码储存电路采用I2C总线at24c02存储芯片存放密码,可实现断电密码不消失,at24c02存储芯片可长期存储信息,可上百万次以上重新擦写。
图3-5 密码储存电路2.4.3 I2C总线密码存储芯片at24c02介绍图2-3 at24c02引脚图(1)引脚功能介绍及相关知识WP:写保护引脚,将该引脚接VCC E2PR0MI就实现写保护(只读)。
引脚接地或悬空,可以对器件进行读写操作。
SCL串行时钟引脚,串行输入输出时该引脚用于输入时钟。
SDA串行数据输入输出引脚,用来输入输出数据,该引脚为射极开路输出,需接上拉电阻。
(2)I2C总线协议只有总线非忙时才被允许进行数据传送,在传送时,当时钟线为高电平,数据线必须为固定状态,不允许有跳变。
时钟线为高电平时数据线的任何电平变化将被当作总线的启动或停止条件。
(3)起始条件起始调教必须在所有操作命令之前发送。
时钟线保持高电平期间,数据线电平从高到低跳变作为I2C总线的启动信号。
CAT24Cxx>一直监视SDA和SCL电平信号,直到条件满足时才响应。
(4)停止条件时钟线保持高电平期间,数据线电平从低到高跳变作为IC总线的停止信号。
(5)器件地址的约定主器件在发送启动命令后开始传送数据,主器件发送相应的从器件地址,8 位从器件地址的高四位固定为1010,接下来的 3 位用来定义存储器的地址,对2于,这三位无意义,对于,接下来的 2 位无意义,第三位是地址高位,中,第一位无意义,后两位表示地址高位。
最后一位为读写控制位,“1表”示对从器件进行读写操作,“0表”示写操作。
在主器件发送启动命令和一字节从器件地址后,如果与从器件地址吻合,CAT24C02各发送一个应答信号,然后再根据读/写控制为进行读或写操作。
(6)应答信号每次数据传送成功后,接收器件将发送一个应答信号。
当第九个时钟信号产生时,产生应答型号的器件将SDA下拉为低,通知已经接受到8位数据,接收到起始条件和从器件地址后,CAT24C02发送一个应答信号,如果为写操作,每接收到一个字节数据,CAT24C02发送一个应答信号。
I2C串行AT24C02实验
第4章实验01-I2C串行AT24C02实验
一、实验目的:
1、了解I2C总线的工作原理;
2、学习I2C总线与单片机的接口方法;
3、学习串行E2PROM芯片24CXX系列的读写方法;
4、单片机I2C总线接口的编程方法。
二、实验内容:
1、向24C02写入数据,然后读出数据检验,检验正确,点亮8个发光二极管;检验错误,熄灭8个发光二极管。
原理图:
流程图:
子程序开始子程序开始开始
发送启动条件发送启动条件I/O端口初始化
I2C初始化送出器件地址,设为送出器件地址,设为
“写”模式;“写”模式;I2C写1个字节
送出写入地址;送出写入地址;
送出写入数据;I2C读出1个字节
送出重启条件否
发送停止条件读出=写入?
送出器件地址,设为“读”是延时10ms 接收24C02送出的数据
灯灭灯亮
返回发送非应答条件
发送停止条件踏步
返回
2、编制程序,分别按字节模式和页模式向24C02芯片写入数据,比较写入速度的差别。
原理图:
流程图:
字节子程序主程序
一个字节程序I/O端口初始化
N I2C初始化
是否8次定时初始化
Y
返回启动定时0
页模式程序
页模式子程序关闭定时0
发送启动条件启动定时1
送出器件地址,设置字节子程序
“写”模式;关闭定时1
送出写入地址;N
T0<T1
Y
送出写入数据灯亮灯灭
N
是否8次?
Y 踏步
返回
T0 为定时器0的定时时间;T1为定时器T1的定时时间。
IIC总线操作AT24C02芯片详解
IIC总线操作AT24C02芯片详解一IIC总线操作规范起始和终止信号:SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
数据传送格式: 每一个字节必须保证是8位长度。
数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
二.AT24C02芯片定义和功能该芯片是一个有2K(256*8)存储单元的EEPROM.1010为固定,A0,A1,A2正好与芯片的1,2,3引角对应.对通过这三个引脚设定可编程地址.若这三个引脚都接地,则地址如下图片:在IIC总线上读写AT24C02要遵循以下规范三,程式实例void init() //初始化{SCL=1;delay();SDA=1;delay();}void start() //启动信号{SDA=1;delay();SCL=1;delay();SDA=0;delay();}void stop() //停止信号{SDA=0;delay();SCL=1;delay();SDA=1;delay();}void respons() //回应信号{uchar i=0;SCL=1;delay();while((SDA==1)&&(i<255))i ;SCL=0;delay();}void writebyte(uchar date)// 写一个字节{uchar i,temp;temp=date;for(i=0;i<8;i ){temp=temp<<1;SCL=0;delay();SDA=CY;delay();SCL=1;delay();}SCL=0;delay();SDA=1;delay();}uchar readbyte() //读一个字节{uchar i,j,k;SCL=0;delay();SDA=1;for(i=0;i<8;i ){SCL=1;delay();if(SDA==1)j=1;elsej=0;k=(k<<1)|j;SCL=0;delay();}delay();return k;}Void write_add(uchar address,uchar info) //指定地址写一个字节数据{start();writebyte(0xa0);respons();writebyte(address);respons();writebyte(info);respons();stop();}uchar read_add(uchar address) //指定地址读一个字节数据{uchar dd;start();writebyte(0xa0);respons();writebyte(address);respons();start();writebyte(0xa1);respons();dd=readbyte(); stop();return dd;}。
I2C总线AT24C02芯片运用
I2C总线AT24C02芯片运用1,I2C总线介绍:I2C总线(Inter IC Bus)由飞利浦公司推出,是近年来微电子控制领域广泛采用的一宗新型总线标准,它使同步通信的一种特殊形式,具有接口少、控制简单、器件封装形体小、通信速率较高等优点(可达400Kbps)。
在主从通信中,可以有多个I2C 总线器件同时接到I2C总线上,所有与I2C总线兼容的器件都具有标准的接口,通过地址来识别通信对象,是她可以经由I2C总线相互直接通信。
I2C总线由数据线和时钟线SDA和SCL两条线构成,可发送数据可接收数据。
于CPU 及被控IC间、IC与IC间均可双向传送,各器件均并于总线上,各自有唯一地址。
信息传输中,I2C总线上的各器件既是被控又是控制器件,既是发送器又是接收器。
CPU 发出的控制信号分为地址码和数据码两部分;地址码选址;数据码送数。
故而各IC虽同并于总线上但却各自独立。
I2C总线硬件结构图图中:ACL时钟,SDA数据接上拉电阻,故总线空闲是高电平,任一器件变低均将拉低电平故曰:各器件的时钟线及数据线乃“与”关系。
通信格式为时钟高时下跳开始寻地址发送一字节 8位中低位为数据方向 0为我党要向下面发指令形象的为“O”,俗称为蛋,如川蛋:“川O001”,陕蛋:“陕O001”都是当官的向下发指令,发飙的,当然,单片机哎平方C系统呢有点民主成分,从机可以向主机传信息,既发1,形象的成为“1”:咦你们小麻虾小老百信还要上方发信息呀??!!事实上是的 0为下蛋-----下传数据;1为上访-----上传数据。
记住了吧!时钟为高SCL=1时数据那得稳定俗称维稳期间当然时钟撤了 SCL=0时随便你虾子变化数据。
发送启动信号那得我们主机发了党外人士没这个权利在时钟为高警察在的时候主机发一个下跳沿信号表示开会了开始了既:SCL=1时 SDA 你们老百姓就等着查户口吧!当官的在警察在时下跳了于是衙门发令查户口高七位为你我家庭住址,最低一位为数据方向上面已表在此老子不说了。
I2C总线原理介绍AT24C02内部原理介绍
I2C总线原理介绍AT24C02内部原理介绍I2C总线原理介绍:I2C (Inter-Integrated Circuit)总线是一种用于在集成电路之间进行通信的串行通信总线协议。
它最初由飞利浦半导体公司(现在的NXP半导体)开发,旨在解决多个IC之间的通信问题。
I2C总线协议包括了两种设备,即主设备和从设备。
主设备负责控制总线及发送和接收数据,而从设备则依从主设备的控制。
主设备通过发送一个起始条件开始通信,并通过发送地址和数据进行控制。
从设备则根据主设备发送的地址和数据进行相应的响应。
1.双向通信:I2C总线允许主设备和从设备之间双向通信,即主设备可以发送数据给从设备,也可以从从设备接收数据。
2.多主模式:I2C总线支持多个主设备同时驱动总线,这可以实现多个主设备之间的协同工作。
3.硬件地址和数据传输:I2C总线使用7位或10位地址来寻址从设备,并以字节为单位传输数据。
4.起始和停止条件:I2C总线使用起始和停止条件来控制通信的开始和结束。
5.错误检测:I2C总线通过校验和来检测传输过程中的错误。
6.时钟同步:I2C总线使用时钟信号来同步主设备和从设备之间的通信。
AT24C02内部原理介绍:AT24C02是一种常见的I2C EEPROM (Electrically Erasable Programmable Read-Only Memory)芯片,用于存储数据。
它的内部原理如下:1.存储单元:AT24C02由256个8位字节构成,每个字节具有一个唯一的地址。
地址范围从0到255,可以存储共计2048位的数据。
2.寻址和读写:AT24C02通过I2C总线进行寻址和读写操作。
主设备发送启始条件和设备地址,然后发送要读取或写入的数据的地址,最后发送或接收实际数据。
3.数据传输:AT24C02的数据以字节为单位被写入和读取。
写入操作通过I2C总线将字节数据写入到指定地址处。
读取操作通过I2C总线将字节数据从指定地址读出。
IIC总线及AT24C02
单片机IIC总线及AT24C02的应用一:IIC和24C02的关系IIC是一种通信协议,IIC总线:由时钟线和数据线构成。
IIC和24C02的关系:24C02是芯片,24C02和其他设备通信使用的是IIC总线。
二:24C02和EEPROM的关系24C02和EEPROM的关系:24C02是一款数据存储芯片,它的存储介质是EEPROM。
三:EEPROM是什么,有什么特点?EEPROM是一款存储介质,电可擦除,可编程的存储介质。
数据可读可写,数据掉电不丢失。
四:EEPROM和单片机的关系EEPROM和单片机的关系:24C02的存储介质是EEPROM,24C02通过IIC总线和单片机通信,单片机把需要掉电不丢失的数据存储在24C02的EEPROM里面。
ROM:程序存储器,数据可读不能写,掉电不丢失。
RAM:数据存储器,数据可读可写,掉电丢失。
EEPROM:数据存储器,数据可读可写,掉电丢失。
容量小,价格高,可以随机读写擦除。
FLASH:数据存储器,数据可读可写,掉电丢失。
快擦除,价格较低,容量较大。
出现坏掉的概率相对较高。
五:AT24C02怎么控制总线—启动,停止,读,写。
(时序图可得)1.启动总线:时钟线是高电平的时候,数据线上的电平由高到低的跳变。
2.停止总线:时钟线是高电平的时候,数据线上的电平由低到高的跳变。
3.正常传输数据要改变的话:时钟线处于低电平。
设备地址:每个硬件设备地址,设备地址可以理解为器件地址。
A0H(实际应用而定)字地址:芯片内部数据存放的地址,256字节空间。
00H~FFHA:写操作(根据写操作时序图)1.启动总线2.写芯片地址(写设备地址)等待应答3.应答有效后,写芯片内部地址(字地址)4.写数据,等待应答5.结束,B:读操作(根据读操作时序图)1.启动总线2.写芯片地址(写设备地址)等待应答3.应答有效后,写芯片内部地址(字地址)4.重启总线(根据读的时序图得:先写操作后才读操作(只有写操作才有读写))5.发送设备地址(目的是把写改为读),6.结束模块化模块的分割:一个.c配一个.h文件,.C文件用来写实体函数。
IIC总线协议及EEPROMAT24C02
IIC总线协议及EEPROMAT24C02IIC总线协议及EEPROMAT24C02IIC总线协议是一种串行通信协议,用于在电子设备之间进行数据传输。
它也被称为I2C(Inter-Integrated Circuit)协议。
IIC总线协议由Philips(现在的NXP Semiconductors)在1982年开发,用于同一电路板上的集成电路芯片之间的通信。
IIC总线是一种主从式结构,其中一个设备作为主设备,其他设备作为从设备。
主设备负责控制数据传输和通信的时序。
每个从设备都有一个唯一的地址,主设备根据地址选择要与之通信的从设备。
从设备根据主设备发出的命令来执行特定的操作,例如读取数据或写入数据。
EEPROM是一种可擦写可编程只读存储器(Electrically Erasable Programmable Read-Only Memory),用于存储非易失性数据。
AT24C02是Microchip Technology公司制造的一种EEPROM芯片,具有容量为2Kbit的存储能力。
AT24C02采用了IIC总线协议,因此可以通过IIC总线与其他设备进行通信。
它有一个7位地址寄存器,可以设置其作为IIC总线上的从设备的地址。
在与主设备通信时,主设备发送一个启动条件,然后发送从设备地址,接下来是读写位和数据。
AT24C02根据主设备的指令来执行读取或写入操作。
AT24C02有一个内部的写保护电路,可以保护存储的数据被误写。
它还支持分页写入,即可以一次写入多个字节的数据,从而提高写入效率。
总结:IIC总线协议是一种用于串行通信的协议,适用于设备之间的数据传输。
AT24C02是一种采用IIC总线协议的EEPROM芯片,具有2Kbit的存储容量。
它通过主设备的控制来进行读写操作,同时具有写保护和分页写入等特性。
I2C_24C02总线通信协议实例详解(附详细示波器实测波形图)
I2C详解I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。
I2C总线只有两根双向信号线:一根是数据线SDA,另一根是时钟线SCL。
I2C总线通过上拉电阻接正电源。
当总线空闲时,两根线均为高电平。
连到总线上的任一器件输出的低电平都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。
在有些情况下,可能没接上拉电阻I2C也能正常通信,但是建议读者最好接上拉电阻。
本文最后将给出有接上拉电阻和没接两种情况下的I2C通信波形,可以明显的看出来,接了上拉电阻波形更漂亮,通信也更稳定。
本文将以24C02来详细讲解I2C 协议。
因为本文的重点是讲解I2C,所以这里只简单的介绍24C02,有关24C02的更为详细的资料,读者可以查阅其数据手册,在这里就其必需的部分进行简单的讲解。
一、 AT24C02简介AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256×8位(2K)存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。
它的典型应用电路如图1:图1 AT24C02典型应用电路图1中AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。
在本文都将其接地,表示其地址为000。
第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,第6脚SCL为串行时钟输入线。
当用单片机I/O 口模拟I2C通信时,这两个引脚可以接任意的I/O口。
SDA和SCL都需要接一个上拉电阻,其阻值一般为4.7K~10K。
第7脚是写保护引脚,可以接IO口也可以直接接地,接地就不再具有保护功能。
这里将其直接接地。
二、 I2C总线的构成及信号类型I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
IIC—24C02协议
IIC—24C02协议IIC(Inter-Integrated Circuit)是一种串行通信协议,也被称为I2C。
它是一种用于在芯片之间进行通信的简单而高效的协议,广泛应用于多种电子设备中的通信接口。
在这篇文章中,我们将深入探讨IIC协议在24C02 EEPROM芯片中的应用。
24C02是一种常见的EEPROM(Electrically Erasable Programmable Read-Only Memory)芯片,具有2K位的存储容量。
它被广泛应用于各种电子设备中,如电脑、手机、智能卡等。
在这些设备中,24C02 EEPROM芯片用来存储设备的配置信息、用户数据等。
IIC协议是通过两根线进行通信的,这两根线分别是SCL(串行时钟线)和SDA(串行数据线)。
SCL线由主设备控制,用于传输时钟信号。
SDA线用于传输数据,数据可以是指令、地址或实际存储数据。
24C02芯片中的数据存储以页为单位,每个页有8个字节。
每个字节都有一个地址,从0x00到0xFF。
因此,24C02芯片总共具有256个地址。
在读写24C02芯片之前,需要先发送一条起始信号,然后发送设备地址和读/写位,最后发送地址或数据,并在每个字节传输之后发送一个应答信号。
IIC协议的工作时序如下:1.主设备发送起始信号。
2.主设备发送设备地址和读/写位。
设备地址由7位组成,占用7个时钟信号。
3.24C02芯片发送应答信号。
如果芯片正确接收到了设备地址,它将发送一个低电平,对主设备表示接收到了应答。
4.主设备发送一个字节的地址或数据。
5.24C02芯片发送应答信号,与主设备进行握手。
如果芯片正确接收到了地址或数据,它将发送一个低电平,对主设备表示接收到了应答。
6.主设备发送停止信号,表示传输结束。
读取24C02芯片中的数据时,需要按照上述步骤进行操作。
写入数据时,需要先发送要写入的地址,然后再发送数据。
可以一次性写入一个字节或多个字节,但写入的数据不能超过页的容量。
AT24C02串行E2PROM的工作原理与读写
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线,通过上拉电阻接正电源。
当总线空闲时,两根线都是高电平。
连接总线的器件的输出级必须是集电极或漏极开路,以具有线“与”功能。
I2C与24C02
关于I2C通讯的资料,网络上很多,多了我这篇也不多,我也很想对i2c和 ATMEIL 发表一点什么。
关于I2C:1.空闲时候,SDA,SCL都是保持高电平,因此stop信号后,保持SDA,SCL,释放总线。
2.开始信号是:在SCL高电平时候,SDA跳变为低;结束信号:在SCL高电平时候,SDA跳变为高。
3.信号发送:主机在SCL低电平期间准备好要发送的bit,赋值给SDA,在SCL由低变高后的一段时间内写入从机。
4.信号接受:主机释放总线(置为高电平),从机在SCL低电平期间已经准备好SDA的bit 数据,主机只需要在SCL由低变高一段时间后读取数据。
5.应答:主机发送8bit后,释放总线,SCL由低变高后,可以读取从机发送的应答信号(应答用0表示,无应答用1表示),收到应答信号后,SCL应该拉低;主机接受8bit后,应该发送应答信号0(24c02要求最后一次读取8bit数据后无须发送应答0,须发送1),从机在SCL由低变高后一段时间内读取应答信号。
关于ATMEL 24C02:1.用EEPROM保存数据最大的好处是不占用CPU时间,不会让CPU、中断等暂停,而用片内的flash存储数据,会导致cpu暂停,中断暂停,严重影响程序效果。
2.数据保存需要时间,这个时间内不可以对同一个24c02进行写保存数据操作(这段时间内是否能读?没有测试过),单字节写入和页写入,需要的保存时间一样,官方说不超过5ms,实测不足1ms。
相对于单字节写入,页写入效率更高。
3.关于WP写保护功能,WP高电平可以正常读数据,但是不能读。
WP低电平可以读写。
那么,是否是数据保存延时的期间WP也需要保持低电平呢?答案是否定的,也就是说,I2C通讯完成,即可WP=1,再继续延时5ms,数据成功写入,亲测有效!4.读数据时候,一定在stop信号前一个byte后发送无应答信号(即1),其他读byte后发送应答信号(即0);以下程序:1.适用于于多个i2c端口,如同时挂led显示,24c02等多个不能用寻址来区别的系统。
以AT24C02为例介绍I2C总线与单片机的连接
DB 0,0,0,0,0
RET
;;===================================================================
RD24C021:
MOV R3,#1
ACALL STR_24C021 ;I2C 总线开始信号
NoAck: DJNZ R6,WaitLoop
SETB C ;NO ACK
CLR A24C_SCL
RET
;;===================================================================
MOV R1,#30H ;要利用的是间址
MOV A,#0
INPUT1: Байду номын сангаасOV @R1,A
INC A
INC R1
DJNZ R2,INPUT1
RD_ACK: ;发送应答信号
DB 0,0,0,0
SETB A24C_SCL
DB 0,0,0,0,0,0
CLR A24C_SCL
DB 0,0,0,0
CLR F0
CLR A24C_SDA
RET
;===================================================================
SJMP $
;名称:STR_24C021
;描述:启动I2C总线子程序-发送I2C起始条件
;--------------------------------------------------------------------
如何对AT24C02编写驱动程序——IIC总线协议
8.2.2 I2C总线器件的扩展
一、扩展电路
二、串行E2PROM的扩展
(1)串行E2PROM典型产品
ATMEL公司的AT24C系列:
AT24C01:128字节(128×8位); AT24C02:256字节(256×8位); AT24C04:512字节(512×8位) AT24C08:1K字节(1K×8位); AT24C16:2K字节(2K×8位);
(3)读出过程
单片机先发送该器件的7位地址码和写方向位“0”(“伪 写”),发送完后释放SDA线并在SCL线上产生第9个时钟信 号。被选中的存储器器件在确认是自己的地址后,在SDA线 上产生一个应答信号作为回应。 然后,再发一个字节的要读出器件的存储区的首地址,收 到应答后,单片机要重复一次起始信号并发出器件地址和读 方向位(“1”),收到器件应答后就可以读出数据字节,每 读出一个字节,单片机都要回复应答信号。当最后一个字节 数据读完后,单片机应返回以“非应答”(高电平),并发 出终止信号以结束读出操作。
8.1.1
I2C串行总线概述
I2C总线是PHLIPS公司推出的一种串行总线,是具备多 主机系统所需的包括总线裁决和高低速器件同步功能的高 性能串行总线。
I2C总线只有两根双向信号线。一根是数据线SDA,另 一根是时钟当总线空闲时,两根线均 为高电平。连到总线上的任一器件输出的低电平,都将使总 线的信号变低,即各器件的SDA及SCL都是线“与”关系。
8.1.2
I2C总线的数据传送
一、数据位的有效性规定
I2C总线进行数据传送时,时钟信号为高电平期间,数据 线上的数据必须保持稳定,只有在时钟线上的信号为低电 平期间,数据线上的高电平或低电平状态才允许变化。
二、起始和终止信号
AT24C02简介
AT24C02简介AT24C02简介AT24C02是美国Atmel 公司的低功耗CMOS 型E2PROM ,内含256*8位存储空间,具有⼯作电压宽(2.5V~5.5V),擦写次数多(⼤于10000次),写⼊速度快(⼩于10ms),抗⼲扰能⼒强,数据不易丢失,体积⼩等特点。
并且它是采⽤I2C 总线式进⾏数据读写的串⾏操作,只占⽤很少的资源和I/O 线。
A T24C02有⼀个16字节页写缓冲器,该器件通过I2C 总线接⼝进⾏操作,还有⼀个专门的写保护功能。
AT24C02的引脚如图3-9,各引脚功能如下:SCL :串⾏时钟输⼊管脚,⽤于产⽣器件所有数据发送或接收的时钟。
SDA :双向串⾏数据/地址管脚,⽤于器件所有数据的发送或接收。
A0、A1、A2:器件地址输⼊端。
这些输⼊脚⽤于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。
使⽤AT24C02最⼤可级联8个器件,如果只有⼀个24C02被总线寻址,这三个地址输⼊脚A0、A1、A2可悬空或连接到VSS 。
WP :写保护。
如果WP 管脚连接到Vcc ,所有的内容都被写保护,只能读。
当WP 管脚连接到Vss 或悬空,允许器件进⾏正常的读/写操作。
VSS :电源地(GND)。
VCC :电源电压(5V)。
AT24C02⽀持I2C 总线数据传送协议,I2C 总线协议规定:任何将数据传送到总线的器件作为发送器,任何从总线接收数据的器件为接收器。
数据传送是由产⽣串⾏时钟和所有起始停⽌信号的主器件控制的,主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据发送或接收的模式。
I2C 总线协议定义如下:●只有在总线空闲时才允许启动数据传送。
●在数据传送过程中,当时钟线为⾼电平时,数据线必须保持稳定状态,不允许有跳变,时钟线为⾼电平时,数据线的任何电平变化将被看作总线的起始或停⽌信号。
图3-9 AT24C02引脚图图3-10 AT24C02起始/停⽌时序如图3-10所⽰,时钟线保持⾼电平期间,数据线电平从⾼到低的跳变作为I2C总线的起始信号。
以AT24C02为例的IIC通信协议
以AT24C02为例的IIC通信协议
IIC 通信协议:
双向二线制同步串行总线,只需要两根线即可在总线上器件之间传送信息,
两根线分别是SDA 和SCL
SDA:双向数据线,为OD 门,与其它任意数量的OD 与OC 门成”线与”关系。
SCL:上升沿将数据输入到每个EEPROM 器件中;下降沿驱动EEPROM 器件输出数据。
(边沿触发)
(在读写的时候,SCL = 1 时,SDA 保持数据,不能在获取数据;SCL = 0,SDA 可以改变,可以获取读或者写的一个字节。
)
SDA(串行数据线)和SCL(串行时钟线)都是双向I/O 线,接口电路是开楼输出,需通过上拉电阻接电源VCC,当总线空闲时,两根线都是高电平,连接总线的外同器件都是CMOS 器件,输出级也是开漏电路,在总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件
的总线接口都有一定的等效电容.而线路中电容会影响总线传输速度.当电容
过大时,有可能造成传输错误.所以,其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量。
特征:1、在硬件上,I2C 总线只需要一根数据线和一根时钟线两根线,总线接口已经集成在芯片内部,而且片上接口电路的滤波器可以滤去总线数据上的
毛刺.因此I2C 总线简化了硬件电路PCB 布线,降低了系统成本,提高了系统可靠性。
因为12C 芯片除了这两根线和少量中断线,与系统再没有连接的线,用户常用IC 可以很容易形成标准化和模块化,便于重复利用。
2、I2C 总线是
一个真正的多主机总线,如果两个或多个主机同时初始化数据传输,可以通过。
I2C总线at24c02芯片使用说明
325密码储存电路密码储存电路采用l2C总线at24c02存储芯片存放密码,可实现断电密码不消失,at24c02存储芯片可长期存储信息,可上百万次以上重新擦写。
2.4.3 I 2C总线密码存储芯片at24c02介绍S-I&ad TSSOP图2-3 at24c02 引脚图(1)引脚功能介绍及相关知识WP写保护引脚,将该引脚接VCC U PROM就实现写保护(只读)。
引脚接地或悬空,可以对器件进行读写操作。
SCL串行时钟引脚,串行输入输出时该引脚用于输入时钟。
SDA串行数据输入输出引脚,用来输入输出数据,该引脚为射极开路输出,需接上拉电阻。
(2) |2C总线协议只有总线非忙时才被允许进行数据传送,在传送时,当时钟线为高电平,数据线必须为固定状态,不允许有跳变。
时钟线为高电平时数据线的任何电平变化将被当作总线的启动或停止条件。
(3)起始条件起始调教必须在所有操作命令之前发送。
时钟线保持高电平期间,数据线电平从高到低跳变作为I2C总线的启动信号。
CAT24Cxx>一直监视SDA和SCL电平信号,直到条件满足时才响应。
(4) 停止条件时钟线保持高电平期间,数据线电平从低到高跳变作为l 2C 总线的停止信号。
(5) 器件地址的约定主器件在发送启动命令后开始传送数据,主器件发送相应的从器件地址, 8位从器件地址的高四位固定为1010,接下来的3位用来定义存储器的地址,对 于CAT24C021/022这三位无意义,对于 CAT24C41/042接下来的2位无意义, 第三位是地址高位,CAT24C081/082中,第一位无意义,后两位表示地址高位。
最后一位为读写控制位,“ 1”表示对从器件进行读写操作,“ 0 ”表示写操 作。
在主器件发送启动命令和一字节从器件地址后,如果与从器件地址吻合, CAT24C02各发送一个应答信号,然后再根据读/写控制为进行读或写操作。
(6) 应答信号每次数据传送成功后,接收器件将发送一个应答信号。
AT24C02 EEPROM及I2C总线的应用与设计(赵新大学本科毕业论文)
本科毕业设计(论文)题目: AT24C02 EEPROM及I2C总线的应用与设计学生姓名:赵新院(系):电子工程学院专业班级:电气0508 指导教师:汤楠完成时间:2007年03月20日1.课题的意义在这次毕业设计中,我的毕业设计题目为“AT24C02 EEPROM及I2C总线的应用与设计”,其实就是以AT24C02 EEPROM为例学习I2C总线的应用,设计调试AT24C02 EEPROM 应用软硬件系统。
从某种意义上说,其实质属于单片机的开发技术这个范畴,是单片机开发技术的一个实例。
众所周知,信息时代与知识经济是当今的一个热门话题,但真正拉开信息时代帷幕的是高速发展的单片机开发技术,而知识经济的特征产业,人们一致认为是芯片业与软件业。
因此,以芯片设计和制造为核心的微电子产业己经成为衡量一个国家综合国力的重要标志。
微电子技术的核心是集成电路,MOS存储器作为集成电路的典型代表产品,发展异常迅猛。
EEPROM作为一种重要的MOS存储器,其作用也不容忽视。
由于采用并行总线扩展时连线过多,外围器件工作方式各异,外围器件与数据存储器混合编址等,都给单片机应用系统设计带来布线复杂,线路板面积大,易引起干扰等困难。
因而采用I2C总线仅用一条数据线(SDA)加一条时钟线 (SCL)来完成数据的传输及外围器件的扩展,对于各节点的寻址是软寻址方式,节省了片选线。
此外,采用I2C总线的多功能、高可靠性、低成本和较高的性能,提高了测试和调试AT24C02 EEPROM应用软硬件系统时的稳定性。
在单片机应用系统中推广I2C总线后将会大大改变单片机应用系统结构性能,具有很大的实用意义,对单片机的应用开发来说采用I2C总线将带来以下好处:1.可最大限度地简化结构。
二线制的I2C串行总线使得各电路单元之间只需要简单的连接,而且总线接口都集成在器件中,不需另加总线接口电路。
电路的简化省去了电路板上大量走线,减少电路板面积,提高了可靠性,降低了成本。
I2C总线原理介绍AT24C02内部原理介绍
I2C总线原理介绍AT24C02内部原理介绍I2C(Inter-Integrated Circuit)总线是一种用于通信和连接集成电路的串行通信总线标准。
它由飞利浦公司推出,用于多个设备之间进行数据传输,例如芯片与芯片之间的通信。
常见的应用包括存储器、传感器和其他外设。
AT24C02是一种2Kbit串行电可擦除可编程只读存储器(EEPROM),采用I2C总线进行通信。
它由许多电子设备使用,如微控制器和其他数字电路。
AT24C02包含256个字节,存储器被分成128个页,每个页包含8个字节。
AT24C02的内部结构和工作原理如下所述:1.写操作:在写操作期间,主设备首先发送起始信号,然后发送设备地址和读/写位。
设备地址由7位地址和1位读/写位组成。
如果读/写位为0,表示写操作;如果读/写位为1,表示读操作。
一旦设备地址和读/写位被接受,AT24C02开始等待接收数据。
2.页写操作:AT24C02支持页写操作,每个页包含8个字节。
如果要写入的位置在同一页内,可以一次性写入多个字节。
在页写操作中,主设备首先发送起始信号,然后发送设备地址和读/写位。
接下来,主设备发送要写入的页地址。
AT24C02接收到页地址后开始等待接收数据。
3.读操作:在读操作期间,主设备首先发送起始信号,然后发送设备地址和读/写位。
接下来,AT24C02发送一个ACK信号,表示它已准备好进行读操作。
主设备接收到ACK信号后,发送字节地址,并等待AT24C02发送数据。
4.擦除操作:AT24C02支持块擦除操作,可以同时擦除多个连续的字节。
在擦除操作期间,主设备发送起始信号和设备地址,然后发送要擦除的起始字节地址。
AT24C02接收到擦除命令后,将相关字节的数据擦除为0xFF。
AT24C02的内部结构包括引脚、寄存器和存储单元:1.引脚:AT24C02有8个引脚,包括电源引脚(VCC和GND)、串行数据引脚(SDA)、串行时钟引脚(SCL)、硬件写保护引脚(WP)和复位引脚(RST)。
如何对AT24C02编写驱动程序——IIC总线协议
如何对AT24C02编写驱动程序——IIC总线协议AT24C02是一种2Kbit(256字节)的串行EEPROM芯片,采用I2C总线协议进行通信。
编写AT24C02的驱动程序需要了解I2C总线协议的工作原理以及AT24C02的读写操作。
以下是编写AT24C02驱动程序的步骤:1. 硬件配置:首先,需要在单片机上配置I2C总线的硬件连接。
I2C 总线需要两根信号线,即SDA(Serial Data Line)和SCL(Serial Clock Line)。
将SDA和SCL引脚连接到AT24C02的对应引脚,并通过上拉电阻将其拉高。
2.初始化I2C总线:在驱动程序中,需要初始化I2C总线的相关寄存器和配置参数。
这包括设置I2C总线的通信速率、使能I2C模块、使能中断等。
3.开始信号和设备地址:发送开始信号START,然后发送AT24C02的设备地址,设备地址由3位固定的值和一个读/写位组成。
读写位为0代表写操作,为1代表读操作。
4.发送数据:如果是写操作,发送要写入的数据到AT24C02的指定地址。
数据写入时,需要注意AT24C02的内存地址范围,以及页写操作的限制。
如果是读操作,发送读取的目标地址。
5.停止信号:传输完成后,发送停止信号STOP,结束通信。
6.延时和轮询:在I2C总线通信中,需要一定的延时等待数据传输完成。
在写入大量数据或读取数据时,还需要轮询等待操作完成。
7.错误处理:在驱动程序中,需要考虑到可能发生的错误和异常情况。
例如,设备地址未响应、通信超时、数据传输错误等,都需要进行相应的错误处理。
8.封装函数接口:为了方便上层应用调用,可以将上述操作封装成函数接口。
例如,提供读写函数、擦除函数和查询设备ID的函数等。
除了以上的驱动程序,还可以根据实际需求进行功能扩展。
例如,可以实现批量写入数据、随机读取数据、擦除操作等。
总之,编写AT24C02的驱动程序主要包括硬件配置、初始化I2C总线、发送开始信号和设备地址、发送数据、发送停止信号、延时和轮询、错误处理等步骤。
I2C总线原理介绍AT24C02内部原理介绍
I2C总线原理介绍AT24C02内部原理介绍I2C(Inter-Integrated Circuit)是一种串行通信总线,由Philips公司于1980年代初开发。
它是一种简单而高效的串行通信协议,能够在多个设备之间进行通信。
I2C总线由两根线组成,分别是SCL(时钟线)和SDA(数据线)。
SCL由主设备产生并控制通信速度,SDA用于数据的传输。
每个设备都有一个唯一的地址,以便其他设备可以通过地址找到它并与其通信。
I2C总线使用了主从结构,其中主设备是指负责发起通信的设备,从设备则是被动接受通信的设备。
在I2C总线上,可以连接多个从设备,但只能有一个主设备。
主设备负责发起通信并控制通信的过程,从设备在收到主设备的请求后回应,并传输数据。
在I2C总线上,通信的过程可以分为以下几个步骤:1.主设备将起始信号发送到总线上,通知其他设备开始通信。
2.主设备发送从设备地址和读写标志位,指示通信的目标设备和读写操作。
3.从设备根据接收到的地址判断是否为自己,如果是则回应ACK信号。
4.主设备根据ACK信号判断是否有设备应答,如有应答则继续通信,否则终止通信。
5.主设备发送数据或请求数据,并接收从设备的应答。
6.数据传输完成后,主设备发送停止信号,终止本次通信。
1.双向传输:I2C总线上的数据传输是双向的,主设备既可以发送数据给从设备,也可以从从设备读取数据。
2.多从设备:I2C总线可以连接多个从设备,每个从设备都有唯一的地址,主设备通过地址选择通信的目标设备。
3.速度可变:I2C总线的通信速度可以通过改变时钟频率来调整,可以根据实际需求选择合适的速度。
4.硬件简单:I2C总线只需要两根线即可完成通信,硬件接口简单,成本低廉。
AT24C02内部原理介绍:AT24C02是一种8位串行电子可擦除可编程只读存储器(EEPROM),由Atmel公司生产。
它具有2K字节的存储容量,可以存储2048个8位字节的数据。
AT24C02采用了I2C总线通信接口,可以与其他I2C设备进行通信。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void RS_Byte(uchar R_Byte)
{
SBUF = R_Byte;
while(TI == 0);//查询法
TI = 0;
}
/******************************************/
//串口发送字符串数据
void RS_String(uchar *p)
uchar EEPROM_ReadBuffer[20];
//函数声明
/******************************************/
//延时子函时,
//参数d_time控制延时的时间
//作用,灯亮和熄灭必须持续一定时间,人眼才能看到
void delay(unsigned int time);}BitCoun Nhomakorabeaer--;
}while(BitCounter);
return(temp);
}
//I2C写入多个字节数据
void WrToROMs(uchar *iData,uchar Address,uchar Num)
{
uchar i;
Start();//发送启动信号
Send(0xa0);//发送SLA+W
Sda=1;
_nop_();_nop_();_nop_();_nop_();
}
//I2C应答位
void Ack(void)
{
Sda=0;
_nop_();_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();
Scl=0;
}
//I2C反向应答位
Scl=1;
_nop_();_nop_();_nop_();_nop_();
if(Sda)//如果Sda=1
temp=temp|0x01;//temp的最低位置1
else
temp=temp&0xfe;//否则temp的最低位清0
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
{
uchar i = 0;
while(*(p+i) != '\0' )
{
RS_Byte(*(p+i));
i++;
}
}
/******************************************/
//主函数
void main(void)
{
uchar LED;//LED灯输出变量
Uart_Init();
RS_String("Writing Data to AT24C02 .... Address = 0x00 \n");
WrToROMs(EEPROM_WriteBuffer,0x00,sizeof(EEPROM_WriteBuffer));//向AT24C02写入数据,起始地址0x00
delay(50000);
{
P0 = (LED << i);//按照原理图,单片机输出低电平时,LED发光
delay(10000);//延时
}
LED = 0x7f;//高位向低位流动
for(i=0;i<8;i++)
{
P0 = (LED >> i);//按照原理图,单片机输出低电平时,LED发光
delay(10000);//延时
#include <intrins.h>
//宏定义
#define uchar unsigned char
#define uint unsigned int
//引脚定义
sbit Scl= P3^6;//AT24C0x串行时钟
sbit Sda= P3^7;//AT24C0x串行数据
//全局变量
uchar EEPROM_WriteBuffer[] = {""};
串口输出数据,串口是单片机程序调试种
最常用最重要的工具。在使用前需要主要
开发板当前晶振频率是否为11.0592MHz,如
不是,请更换晶振,或者自行计算定时器
数值。
时间:2011-8-23
******************************************/
//头文件
#include "reg51.h"
RS_String("We got message text is : \"");
RS_String(EEPROM_ReadBuffer);
RS_String("\" \n");
RS_String("Going to Main Loop.. \n");
while(1)//主程序循环
{
uchar i;//循环变量
//I2C起始位
void Start(void)
{
Sda=1;
Scl=1;
_nop_();_nop_();_nop_();_nop_();
Sda=0;
_nop_();_nop_();_nop_();_nop_();
}
//I2C停止位
void Stop(void)
{
Sda=0;
Scl=1;
_nop_();_nop_();_nop_();_nop_();
//RI = 0;
//REN = 1;
}
//------------------------------------------------串口显示----------------------------------------------------------
/******************************************/
//毫秒级延时子函数
void mDelay(uchar j)
{
uchar i;
for(;j>0;j--)
for(i=0;i<125;i--);
}
//------------------------------------------------串口初始化------------------------------------------------------
RS_String(" Bytes ! \n ");
delay(50000);
RS_String("Reading Data form AT24C02....Address = 0x00 \n");
RdFromROM(EEPROM_ReadBuffer,0x00,sizeof(EEPROM_WriteBuffer));//从AT24C02读取数据,起始地址0x00
delay(10000);//延时
}
LED = 0x80;
for(i=0;i<8;i++) //低位向高位流动
{
P0 = ~(LED >> i);//按照原理图,单片机输出低电平时,LED发光
delay(10000);//延时
}
LED = 0xfe;//高位向低位流动
for(i=0;i<8;i++)
Stop();
}
}
//------------------------------------------------串口初始化------------------------------------------------------
void Uart_Init( void )
{//波特率9600
Ack();
Send(Address);//发送地址
Ack();
for(i=0;i<Num;i++)
{
Send(iData[i]);
Ack();
}
Stop();
mDelay(4); //延时4ms。。。。
}
//I2C读取多个字节数据
void RdFromROM(uchar Data[],uchar Address,uchar Num)
RS_String("Uart Initializing...... \n");
delay(50000);
RS_String("Uart Initializing Finished !! \n");
delay(50000);
RS_String("Welcome to use Green Shield Products ! \n");
uchar temp;//中间变量控制
do
{
temp=Data;
Scl=0;
_nop_();_nop_();_nop_();_nop_();
if((temp&0x80)==0x80)//如果最高位是1
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;//RLC
Data=temp;
{
uchar i;
uchar *PData;
PData=Data;
for(i=0;i<Num;i++)
{
Start();
Send(0xa0);
Ack();
Send(Address+i);
Ack();
Start();
Send(0xa1);
Ack();