今天小编要和大家分享的是I2C总线基本操作 I2C总线基本工作原理,接下来我将从I2C总线的基本操作,I2C总线的基本工作原理,I2C总线的读操作的流程,I2C总线的写操作的流程,I2C总线及其应用,这几个方面来介绍。
I2C总线的基本操作I2C总线上只具有SOL(时钟)和SDA(数据)2根信号线。如果是单纯的串行传输,一旦因为某种原因造成引脚的偏差,则可能会造成不能区分总线上传输的是数据还是地址信息的后果。解决上述问题的简单办法就是附加独立于总线的Reset(复位)信号,由主机控制该信号。因为I2C至少利用2根线进行所有的操作,因此在数据传输时,通常当SC
I2C总线的基本操作
I2C总线上只具有SOL(时钟)和SDA(数据)2根信号线。如果是单纯的串行传输,一旦因为某种原因造成引脚的偏差,则可能会造成不能区分总线上传输的是数据还是地址信息的后果。解决上述问题的简单办法就是附加独立于总线的Reset(复位)信号,由主机控制该信号。因为I2C至少利用2根线进行所有的操作,因此在数据传输时,通常当SCL为低电平时,设置下一个数据;当SDA变化后,SCI为高电平,这可以解释为一连串操作的开始/结束。
1.起始条件
始条件表示一系列操作的开始。图1表示起始条件以及随后数据传输的开始操作。在I2C总线的空闲状态下,SDA及SCL通过上拉电阻都为高电平。在这样的状态下,如果SCL仍保持高电平,而SDA变为低电平,则成为开始指令。
图1I2C总线的起始条件
由于该状态并不出现于地址及数据的发送与接收过程中,因此,即使在途中发生异常,只要检测出该状态,初始化内部的状态机,就可以使其恢复。
2.结束条件
在一系列操作的最后是结束条件。结束条件如图2所示。当SOL为高电平时,一旦SDA由低电平变化为高电平,即成为结束条件,主机与器件之间的通信将停止,器件恢复为空闲状态。进行写操作时的结束状态是开始进行EEpROM内部单元写操作的指示标志。
图2I2C总线的结束条件
结束前所传输的数据是ACK/NoACK的状态位,如果是ACK,则该状态位为低电平。但如果发生某种错误时,则表示为NoACK的高电平。读操作时的最后字节是主机向器件返回NoˉACK信息,所以SDA为高电平。这样就不能形成结束条件所需要的SDA的上升沿,因此在结束之前需要加入哑元“0”数据位作为解决办法。
在最终数据的ACKNoACK之后,主机通过下述的流程,形成结束条件,如下所述:
①SCL变为低电平;
②SDA变为低电平;
③SOL变为高电平(发送哑元数据);
④SDA变为高电平(结束条件)。
3.数据传输
数据传输的流程如图3所示。除去开始与结束条件,在传输包含地址指定等数据时,能够使SDA发生变化的条件只能是在SOL为低电平时。因此,总线操作以如下的步骤进行:
①SCL变为低电平;
②为SDA设置数据(主机或者器件);
③SCL变为高电平。
进行数据读操作时,主机在SOL恢复为高电平之前读取数据。
图3I2C总线的数据传输
I2C总线的基本工作原理
在I2C总线的数据传输过程中,主控器和被孔器工作在两个相反的状态并且在一次通信过程中一股不发生转换;
1.主控器为发送器(主控发送器)时被控器为接收器(被控接收器);
2.主控器为接收器(主控炫收器)时被控器为发送器(被控发送器)。
图所下为一次完整的通信过程时序,在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)在前。
I2C总线的读操作的流程
M24Cxx的读操作模式及其各种模式的操作流程如图1、图2所示。
1.当前地址读
EEpROM内部具有保持当前地址的寄存器。读取当前地址的数据时,不需要指定地址。只要单纯给出读指令就可读出数据。读取完毕后,内部所保持的当前地址将自动进位。
图1I2C存储器的读操作(1)
图2I2C存储器的读操作(2)
数据读操作后的ACK/NoACK信号由主机返回,但必须返回NoACK信号。
2.随机读
随机读是由主机指定任意的地址读取的。利用写指令设定地址,如果赋予读指令则可以读出当前地址。所以,与字节写操作时相同,在第1字节的数据后面给出地址。在这里,一旦发送出数据就成为写操作,在此设置开始条件,取消向写操作的迁移而发出读指令,将从事先设定的地址中读出数据。
此时,DEVSEL数据(前7位数据)必须设定与最初写指令所发送的相同的值。
3.顺序读
在当前地址读操作之后,如果主机返田ACK信号,则为顺序读模式,器件将准备下一个地址的数据,主机取回该数据。一旦到达要读出的最终地址,主机将返回NoACK信号,通知器件这已是最后的数据。
4.顺序随机读
当指定任意地址、希望由此连续读出数据时,可利用该模式。只要认为这是与对应于当前读的顺序读相同的模式即可。
顺序随机读模式与随机读同样进行读操作,接收到数据后如果是ACK应答,则器件将准各下一个地址的数据;如果是最终数据,则返回NoACK信号,结束数据的传输。
I2C总线的写操作的流程
在I2C总线上传输操作是以8位+ACK/NoACK共计9位为单位进行的。发送是从位7(MSB)开始进行的,虽然一般的串口(pC机的COM端口等)是由位0(LSB)开始发送的,但I2C总线是相反的,这一点需要注意。接收8位数据或者指令的接收方在下一个时钟输出ACK/NoACK位,如果是低电平则表示ACK;如果是高电平则表示NoACK。
写操作包括字节写及页面写两种。字节写是只置换特定的1个地址;而页面写可置换汇总了16字节界限内的连续的地址范围(页)。各种写操作的流程图如图所示。
图I2C存储器的字节写与页面写
1.字节写
这是指定任意的地址(8位)写人数据的方式。
起始字节的DEVSEL按照前面描述的起始数据的格式,位7~4是“1010”的固定模式,位操作(“1”)还是写操作(“0”)。
如果存储器处于写保护状态(WC引脚为高电平等),则在接收地址之前一直返回ACK信号,对于之后传输的数据,则返回No-ACK信号。
数据发送完毕后,如果检测出来自主机的结束条件,则EEp-ROM内部开始进行写入操作。根据数据手册可查出完成写入操作所需要的时间。+5V的产品需要5ms,其他的产品大约需要10ms左右的时间。
EEpROM内部的替换周期在进行过程中,即使发送下一个指令也将返回NoACK信号。因此,利用该NoACK信号就可判断内部的操作是否完成。
2.页面写
页面写操作本身与字节写是相同的。由于在存取后地址自动进位,因而可以按序发送1页(16字节)以内的数据。实际上向存储器单元的写人操作,与字节写相同,都是在检测出结束条件后进行的,所以需要等待,直到操作结束,然后再进行下一个操作。
I2C总线及其应用
I2C总线起源与特点
I2C(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控制,特别是在日益流行的视听系统、多媒体系统、家庭影院得到了广泛应用,已经成为一种工业标准,相信随着数字化时代的到来,一定会有更美好的发展前景,一定会得到更好的应用.
关于I2C总线,电子元器件资料就介绍完了,您有什么想法可以联系小编。