2 I2C总线技术
2.1 I2C总线的基本结构
前面提到,I2C总线是仅仅利用两根连线来进行器件之间数据信息和地址信息的传输的,其中一根为SDA,另外一根为SCL。SDA是数据线,SCL是时钟线。各种各样的被控电路或者器件都被并联在I2C总线上,而且总线上的每一个电路模块或器件都有它唯一的地址,所以I2C总线能够分辨识别连接在总线上的器件就是根据这个唯一的地址。在地址和数据的传输过程中,根据I2C总线上并联的每一个模块电路所要完成的功用,此模块电路既可以控制其它器件,也可以被其它器件控制;既可以是发送数据的器件,也可以是接收数据的器件。
I2C总线中,两根连线SDA和SCL要通过上拉电阻连接到电源的正极。当两根连线SDA和SCL都处于高电平的时候,总线这个时候不会进行任何动作,即为闲置状态。SDA输出电路是用来发送数据到总线上的,而SDA输入电路则用来接收总线上的数据。主机上的SCL输出电路是用来发送时钟信号的,此时本身的接收电路则可通过检测SCL的高低电平来明确接下来该干嘛。从机上的SCL输入电路是用来接收总线时钟信号的,同时可以从SDA上接收数据或向SDA上发送数据。
I2C总线支持多个处理机之间的信息传输,也就是能够实现多机通信。无论什么时候,总线都是由一台主机控制的,而其他的器件均被当作从机使用。一台主机与多台从机之间的信息传输是双向的。显然,发送数据的器件就是发送器,而接收数据的器件就是接收器,这些器件既可以是主机,也可以是从机。
2.2 I2C总线的信号类型
I2C总线在进行数据的发送与接收过程中,只有当SCL处于低电平状态的时候,SDA上的数据才允许改变,而SCL处于高电平状态的时候,SDA上的数据不允许变化,必须保持不变。SCL上的时钟信号都与SDA上的每一位数据信号相对应,当SCL上没有时钟信号的时候,SDA将停止传输数据。
下面介绍I2C总线在进行地址和数据的传输过程中所包括的几种不一样的信号种类。
(1)起始信号:当SCL处于高电平时,SDA由高电平跳变到低电平,传送地址和数据开始。
(2)结束信号:当SCL处于高电平时,SDA由低电平跳变到高电平,传送地址和数据结束。
(3)应答信号:当集成电路接收到地址和数据以后能够发出一个低电平的信号,说明已经接收到了。中央处理器向被控制的器件发出一个信号以后,被控制的器件就会发出应答信号,中央处理器接收到该应答信号以后,会根据这个应答信号推断出是不是需要再继续传送信息。若中央处理器没有接收到该应答信号,就会判断是因为被控制的器件发生了问题。由此可见,应答信号在信息的传送过程中是举足轻重的,总线包括连接在总线上的器件的下一步动作和状态都由它决定。而且,当应答信号发生错误时,总线的通信就意着失败了。
I2C总线的起始信号状态和终止信号状态的时序图如2.1所示。
2.1 I2C总线起始信号状态和终止信号状态时序图
2.3 I2C总线的数据传送
起始信号、数据发送信号、响应信号以及停止信号是I2C总线传输数据过程中的几种信号类型。这里的数据都是字节型的数据类型。
输出数据的一方每输出一个字节以后,都要经历一个等待的过程。此时,接收数据的一方会给输出方一个响应信号ACK。所以I2C总线上传输的数据包括7位的地址位,1位的读写位以及以为的响应位。当读写位为“1”的时候,为读操作;当读写位为“0”的时候,为写操作。
如果传送的字节数据被总线上的另一个接收器接收,而且该接收器已经被寻址了,这时会在总线上产生一个确认信号,并在这一位是时钟信号的高电平器件,是数据保持稳定的低电平状态,从而完成应答信号的输出。确认信号通常指起始信号和终止信号,如果这个信息是一个起始字节,或者是总线寻址,则总线上不允许有应答信号产生。如果接收器对被控寻址做出了确认应答,但在数据传输的一段时间以后,又无法接收更多的数据,则主控制器也将停止数据的继续传送。 ATmega128单片机I2C总线的非易失数据存储器设计+源代码(2):http://www.751com.cn/jixie/lunwen_22843.html