I2C总线

  I2C总线是由Philip公司提出的串行通用接口规范。该模式在器仵之间用两根线进行信息传输,这两根线定义为数捃线SDA和时钟线SCL,都其有双向传输功能。

  I2C规范运用土从双向通信,发送数据到总线上的器件被定义为发送器,接收数据的器件被定义为接收器,主从器件都可以工作于接收器和发送器状态,串行数据线SDA传输发送数据,串行时钟线SCL发送同步时钟.这两根线均为集电极开路口输出结构,允许多个器件抟接于这两根线上。

  I2C总线由单片机或CPU控制,主控器件产生串行时钟、控制总线的传送方向,并产生起始和停止位信号,完成一次传输过程。从动器件为被主控器件寻址的器件,I2C模式之有关的寄存器共有12个。

基本操作

  I2C总线上只具有SOL(时钟)和SDA(数据)2根信号线。如果是单纯的串行传输,一旦因为某种原因造成引脚的偏差,则可能会造成不能区分总线上传输的是数据还是地址信息的后果。解决上述问题的简单办法就是附加独立于总线的Reset(复位)信号,由主机控制该信号。因为I2C至少利用2根线进行所有的操作,因此在数据传输时,通常当SCL为低电平时,设置下一个数据;当SDA变化后,SCI为高电平,这可以解释为一连串操作的开始/结束。

  1.  起始条件

  始条件表示一系列操作的开始。图1表示起始条件以及随后数据传输的开始操作。在I2C总线的空闲状态下,SDA及SCL通过上拉电阻都为高电平。在这样的状态下,如果SCL仍保持高电平,而SDA变为低电平,则成为开始指令。

I2C总线的起始条件

  图1 I2C总线的起始条件

  由于该状态并不出现于地址及数据的发送与接收过程中,因此,即使在途中发生异常,只要检测出该状态,初始化内部的状态机,就可以使其恢复。

  2.  结束条件

  在一系列操作的是结束条件。结束条件如图2所示。当SOL为高电平时,一旦SDA由低电平变化为高电平,即成为结束条件,主机与器件之间的通信将停止,器件恢复为空闲状态。进行写操作时的结束状态是开始进行EEPROM内部单元写操作的指示标志。

I2C总线的结束条件

  图2 I2C总线的结束条件

  结束前所传输的数据是ACK/NoACK的状态位,如果是ACK,则该状态位为低电平。但如果发生某种错误时,则表示为NoACK的高电平。读操作时的字节是主机向器件返回NoˉACK信息,所以SDA为高电平。这样就不能形成结束条件所需要的SDA的上升沿,因此在结束之前需要加入哑元“0”数据位作为解决办法。

  在最终数据的ACK NoACK之后,主机通过下述的流程,形成结束条件,如下所述:

  ①SCL变为低电平;

  ②SDA变为低电平;

  ③SOL变为高电平(发送哑元数据);

  ④SDA变为高电平(结束条件)。

  3.  数据传输

  数据传输的流程如图3所示。除去开始与结束条件,在传输包含地址指定等数据时,能够使SDA发生变化的条件只能是在SOL为低电平时。因此,总线操作以如下的步骤进行:

  ①SCL变为低电平;

  ②为SDA设置数据(主机或者器件);

  ③SCL变为高电平。

  进行数据读操作时,主机在SOL恢复为高电平之前读取数据。

I2C总线的数据传输

  图3 I2C总线的数据传输

基本工作原理

  在I2C总线的数据传输过程中,主控器和被孔器工作在两个相反的状态 并且在一次通信过程中一股不发生转换;

  1. 主控器为发送器(主控发送器)时被控器为接收器(被控接收器);

  2. 主控器为接收器(主控炫收器)时被控器为发送器(被控发送器)。

  图所下为一次完整的通信过程时序,在I2C总线上进行的每一次通信过程,都存在在如下规律:

一个完整通信过程的I2C总线信号时序

  图 一个完整通信过程的I2C总线信号时序

  1.  由主控器主动发起,并且以发送启动信号S和停止信号P分别来掌管总线和释放总线。

  2.  通信过程都是以启动信号S开始、以停止信号P结束。

  3.  传送的数据字节数没有限制。

  4.  主控器在启动信号后紧接着发送一个地址字节,其实包含7位被控器地址码和1位读/写控制位R/W。

  5.  读/写控制位R/W(或称作方向位)用于通知被控器数据传送的方向,0表示这次通信是由主控器向被控器写数据,1表示这次通信是主控器从被控器读数据。

  6.  每传送1个地址字节或数据字节共需要9个时钟脉冲, 其中第1~8个时钟脉冲对应的是由发送器向接收器发送的信息,笫9个脉冲对应的是由接收器句发送器反馈的一个应答位ACK。

  7.  所有挂接到I2C总线上的被控器件都接收启动信号后的地址字节,并且把接收到的7位地址码与自己的地址进行比较,如果相符即为主控器寻址的被控器,在第9个时钟脉冲期间反馈应答信号。

  8.  每个数据字节在传送时都是高位(MSB)在前。

读操作的流程

  M24Cxx的读操作模式及其各种模式的操作流程如图1、图2所示。

  1.  当前地址读

  EEPROM内部具有保持当前地址的寄存器。读取当前地址的数据时,不需要指定地址。只要单纯给出读指令就可读出数据。读取完毕后,内部所保持的当前地址将自动进位。

I2C存储器的读操作

  图1 I2C存储器的读操作(1)

 I2C存储器的读操作

  图2 I2C存储器的读操作(2)

  数据读操作后的ACK/NoACK信号由主机返回,但必须返回NoACK信号。

  2.  随机读

  随机读是由主机指定任意的地址读取的。利用写指令设定地址,如果赋予读指令则可以读出当前地址。所以,与字节写操作时相同,在第1字节的数据后面给出地址。在这里,一旦发送出数据就成为写操作,在此设置开始条件,取消向写操作的迁移而发出读指令,将从事先设定的地址中读出数据。

  此时,DEVSEL数据(前7位数据)必须设定与最初写指令所发送的相同的值。

  3.  顺序读

  在当前地址读操作之后,如果主机返田ACK信号,则为顺序读模式,器件将准备下一个地址的数据,主机取回该数据。一旦到达要读出的最终地址,主机将返回NoACK信号,通知器件这已是的数据。

  4.  顺序随机读

  当指定任意地址、希望由此连续读出数据时,可利用该模式。只要认为这是与对应于当前读的顺序读相同的模式即可。

  顺序随机读模式与随机读同样进行读操作,接收到数据后如果是ACK应答,则器件将准各下一个地址的数据;如果是最终数据,则返回NoACK信号,结束数据的传输。

写操作的流程

  在I2C总线上传输操作是以8位+ACK/NoACK共计9位为单位进行的。发送是从位7(MSB)开始进行的,虽然一般的串口(PC机的COM端口等)是由位0(LSB)开始发送的,但I2C总线是相反的,这一点需要注意。接收8位数据或者指令的接收方在下一个时钟输出ACK/NoACK位,如果是低电平则表示ACK;如果是高电平则表示NoACK。

  写操作包括字节写及页面写两种。字节写是只置换特定的1个地址;而页面写可置换汇总了16字节界限内的连续的地址范围(页)。各种写操作的流程图如图所示。

I2C存储器的字节写与页面写

  图 I2C存储器的字节写与页面写

  1.  字节写

  这是指定任意的地址(8位)写人数据的方式。

  起始字节的DEVSEL按照前面描述的起始数据的格式,位7~4是“1010”的固定模式,位操作(“1”)还是写操作(“0”)。

  如果存储器处于写保护状态(WC引脚为高电平等),则在接收地址之前一直返回ACK信号,对于之后传输的数据,则返回No-ACK信号。

  数据发送完毕后,如果检测出来自主机的结束条件,则EEP-ROM内部开始进行写入操作。根据数据手册可查出完成写入操作所需要的时间。+5V的产品需要5ms,其他的产品大约需要10ms左右的时间。

  EEPROM内部的替换周期在进行过程中,即使发送下一个指令也将返回NoACK信号。因此,利用该NoACK信号就可判断内部的操作是否完成。

  2.  页面写

  页面写操作本身与字节写是相同的。由于在存取后地址自动进位,因而可以按序发送1页(16字节)以内的数据。实际上向存储器单元的写人操作,与字节写相同,都是在检测出结束条件后进行的,所以需要等待,直到操作结束,然后再进行下一个操作。

及其应用

  I 2C总线起源与特点

  I 2C(Inter-IntegratedCircuit)总线是一种由Philips公司开发的两线式串行总线,用于连接微控制器及其外围设备。12C总线产生于20世纪80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,管理系统的配置或掌握组件的功能状态,如电源和系统风扇;可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,以便有效进行管理。

  12C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此VC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10kb/s的传输速率支持40个组件。12C总线的另一个优点是,他支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。

  12C总线的构成及信号类型

  PC总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,传送速率100kb/s。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有惟一的地址,在信息的传输过程中,12C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于他所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。

  VC总线在传送数据过程中共有3种类型信号,他们分别是:开始信号、结束信号和应答信号。 开始信号 SCL为高电平时,SDA由高电平向低电子跳变,开始传送数据。

  结束信号 SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。

  应答信号 接收数据的IC在接收到8b数据后,向发送数据的IC发出特定的低电子脉冲,表示已收到数据。CPU向受控单元发出二个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况做出是否继续传递信号的判断。若未收到应答信号,判断为受控单元出现故障。

  目前有很多半导体集成电路上都集成了12C接口。带有12C接口的单片机有:Cygnal的C8051FOXX系列,Philips的SAA73XX与SAA78XX系列等。很多外围器件如存储器、监控芯片等也提供12C接口。

  3 总线基本操作

  I2C规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电子的期间,SDA状态的改变被用来表示起始和停止条件。如图1所示。

  3.1 控制字节

  在起始条件之后,必须是器件的控制字节,其中高4位为器件类型识别符(不同的芯片类型有不同的定义,E2PROM一般应为1010),接着3位为片选,一位为读写位,当为1时为读操作,为。时为写操作。如图2所示。

  3.2 写操作

  写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。关于页面写的地址、应答和数据传送的时序如图3所示。

  3.3 读操作

  读操作有3种基本操作:当前地址读、随机读和顺序读。图4给出的是顺序读的时序图。应当注意的是一个读操作的第9个时钟周期不是"不关心"为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电子、然后发出停止条件。

  4.I2C总线软件编写

  一般I2C通用读写程序的编写主要包括以下几个模块:I2C总线的初始化子程序;延时子程序;起始、结束子

  以上部分是I2C总线各个部分的软件编写。其中SDA,SCL口的定义留给用户,用户可以根据需要自行定义。

  5 结 语

  PC总线由于其简单的硬件结构,在智能控制、单芯片控制、LCD驱动器、远程I/O控制,特别是在日益流行的视听系统、多媒体系统、家庭影院得到了广泛应用,已经成为一种工业标准,相信随着数字化时代的到来,一定会有更美好的发展前景,一定会得到更好的应用.

相关百科