I2C总线协议.doc_第1页
I2C总线协议.doc_第2页
I2C总线协议.doc_第3页
I2C总线协议.doc_第4页
I2C总线协议.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要:介绍了I2C总线技术及其技术标准。结合ATMEL公司具有I2C总线的AT24C256,给出了8051单片机虚拟I2C总线的硬件设计及C语言的软件实现。关键词:I2C;单片机;AT24C2561、引言I2C总线是PHILIPS公司推出的一种具备多主机系统所需的包括裁决和高低速设备同步等功能的高性能串行总线。它使用两条线:串行数据线(sda)和串行时钟线(SCL),使连接到该总线上可访问的器件之间传送信息,属于多主控制总线。总线上的每个器件都有唯一的地址识别,而且都可以作为一个发送器或接收器。由于I2C总线的使用可以简化电路,省掉了很多常规电路中的接口器件,提高产品的可靠性,在许多领域尤其在目前使用的IC卡获得了广泛的应用。现今,8051系列的单片机应用很广,但是它们都没有I2C总线接口。但是分析I2C总线的时序可知, I2C总线规定其时钟线(SCL线)和和数据线(SDA线)是各设备对应输出状态相“与”的结果,任一设备都可以用输出低电平的方法延长SCL低电平时间,迫使高速设备进入等待状态,实现不同速度设备间的时钟同步。因此,即使时钟脉冲的高、低电平时间长短不一,也能实现数据的可靠传送,因此我们可以通过软件控制单片机的普通I/O口做I2C接口,实现I2C总线功能。本文以ATMEL公司的具有I2C总线的AT24C256为例介绍I2C总线在8051单片机系统中的应用并给出C语言的软件实现。2、I2C总线构成及时序2.1 I2C总线组成I2C总线是一个多主机总线,即可以连接多于一个能控制总线的器件到总线。I2C串行总线有两根信号线:一根双向的数据线SDA;另一根是时钟线SCL。SDA和SCL都是双向I/O口线,当总线空闲时这两条线路都是高电平。所有接到I2C总线上的器件的串行数据线都接到总线的SDA线,各器件的时钟线都接到SCL总线上。其结构如图一所示。图一:I2C总线的组成2.2 I2C总线时序所有主机在SCL线上产生自己的时钟来传输I2C总线上的数据,数据只在时钟的高电平周期有效,每传输一个数据位就产生一个时钟脉冲,数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变,当SCL为高电平时,SDA的改变表示“开始”和“停止”状态,即SDA由高电平转入低电平表示开始,该命令必须在其它命令前执行;SDA由低电平转入高电平表示停止状态,该命令可终止所有通讯。在开始条件后,SCL低电平期间,SDA允许变化,每位数据需一个时钟脉冲,当SCL为高时,SDA必须稳定,主控器在应答时钟脉冲高电平期间释放SDA线,转由接收器控制。相同总线上的设备在收到数据后,以置SDA为低电平的方式对其确认。总线不忙时,数据线和时钟线保持为高电平。I2C的时序如图二所示。3、8051单片机系统中I2C总线的实现8051系列单片机上并不带I2C总线,因此必须根据I2C总线的时序用单片机上的I/O口模拟I2C总线时序实现其功能。现以单片机应用系统中较为常见的E2PROM中AT24C256为例,介绍在8051上利用普通I/O口实现I2C串行总线的方法和软件设计。AT24C256是ATMEL公司256kbit串行电可擦的可编程存储器,8引脚双排直插式封装,具有结构紧凑、存储容量大等特点,其引脚排列如图三所示。其中A0、A1为地址选择输入端。A0、A1用来区分各芯片地址,地址分布从0到3。A0、A1悬空时为0。SCL为串行时钟输入,上升沿将SDA上的数据写入存储器,下降沿从存储器读出数据送SDA上。SDA是双向串行数据输入输出口,用于存储器与单片机之间的数据交换。WP为写保护输入。此引脚与地相连时,允许写操作;与VCC相连时,所有的写存储器操作被禁止。如果不连,芯片内部下拉到地;VCC接5V电源;GND接地;NC悬空。AT24C256在开始状态后需紧接一个8位器件地址,以进行相应的读写操作。设备寻址码的高4位为1、0、1、0,寻址码高4位后面的三位是器件寻址码,与它们的硬连线管脚相对应。最低应是读写选择位,置0时可激发写操作,置1激发读操作。器件的具体的格式为:1010A2A1A0R/W,其中当R/W为0时,为写AT24C256,当为1时为读操作。因为AT24C256片内地址是以8位为单元的,其总存储容量为256K,所以其片内地址为从0到32767的任意数值。因此在编写软件时设置其片内地址数据类型时要设置为unsigned int型,而不能为unsigned char型。图四所示为AT89S51单片机和AT24C256的接口图,分别用I/O口P1.6、P1.7连接SDA和SCL总线。通过控制P1.7口的高低电平得到I2C的虚拟时钟,P1.6口作为数据传输的双向端口,作为单片机和AT24C256之间的数据线。4、虚拟I2C总线软件结构对于虚拟I2C总线来说要实现其功能主要是要软件要注意I2C器件的操作时序,总线的运行由主机控制。所谓主机即启动数据的传送即发出启动信号,发出时钟信号,传送结束时发出停止信号的设备,通常主机是微处理器。被主机寻访的设备都称为从机。为了进行通讯,每个接到I2C总线的设备都有一个唯一的地址,以便于主机寻访。主机和从机的数据传送,可以由主机发送数据到从机,也可以是从机发到主机。凡是发送数据到总线的设备称为发送器,从总线上接收数据的设备被称为接受器。根据I2C的时序,软件分为开始、停止、应答、检查应答、不产生应答、读操作、写操作。以下为C程序清单调试成功。#includeSbit sda=P17;Sbit SCL=P16;启动函数,在SCL为高时,SDA的下降沿为启动信号。void Start(void) scl=0; /SCL处于低电平时,SDA才能改变sda=1;/ 一个开始状态,该状态必须在其他命令之前执行scl=1; / 当scl为高电平时sda的下降沿表示开始状态_nop_(); _nop_(); _nop_(); /给一个延时sda=0; /给下降沿表示开始_nop_(); _nop_(); _nop_(); _nop_();scl=0; /恢复低电平以改变sda的值sda=1; 停止函数,在SCL为高时,SDA的上升沿为停止信号。void Stop(void)scl=0; /SCL处于低电平时,SDA改变数值 */sda=0; /scl为高电平时,sda的上升沿表示停止,scl=1; /scl为高电平时改变sda的状态表示启动,停止_nop_(); _nop_(); _nop_(); / 延时sda=1;_nop_(); _nop_(); _nop_();scl=0; /* * * * * 检查应答位 * * * * */bit RecAck(void) scl=0; /在scl为0的时候改变sda的值sda=1;scl=1; /在scl为1的时候等待sda值的变化,在器件接受到数据后会把sda拉低。_nop_(); _nop_(); _nop_(); _nop_();CY=sda; / 因为返回值总是放在CY中的scl=0;_nop_();return(CY); /如果为CY为低则表示接受成功,如果为高,则表示接受失败。/* * * * *对I2C总线产生应答(一般用在读操作中) * * * * */void Ack(void)sda=0;/ EEPROM通过在收到每个地址或数据之后,_nop_();_nop_();scl=1;/置SDA低电平的方式确认表示收到读SDA口状态_nop_(); _nop_(); _nop_(); _nop_();scl=0;_nop_();sda=1;/* * * * * * * * * 不对I2C总线产生应答 * * * * */void NoAck(void) sda=1;scl=1;_nop_(); _nop_(); _nop_(); _nop_();scl=0;向I2C总线写数据,每次写8位数据。void Send(uchar sendbyte)uchar j=8;for(;j0;j-)scl=0;/拉低scl准备给上升沿delay(5);/延时sendbyte = 1;/ 使CY=sendbyte7;sda=CY; / CY 进位标志位scl=1; /给上升沿,发出sda的状态值scl=0;从I2C总线上读数据子程序 ,每次读8位数据。uchar Receive(void) register receivebyte,i=8;scl=0;while(i-) scl=1; /拉高scl准备给下降沿receiv

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论