IIC接口总线

Posted Dingwj_blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IIC接口总线相关的知识,希望对你有一定的参考价值。

转载:http://www.eefocus.com/article/08-07/48416s.html
图11-1给出一个由MCU作为主机,通过IIC总线带3个从机的单主机IIC总线系统。这是最常用、最典型的IIC总线连接方式。

技术分享图片

物理结构上,IIC系统由一条串行数据线SDA和一条串行时钟线SCL组成。主机按一定的通信协议向从机寻址和进行信息 传输。在数据传输时,由主机初始化一次数据传输,主机使数据在SDA线上传输的同时还通过SCL线传输时钟。信息传输的对象和方向以及信息传输的开始和终 止均由主机决定。
每个器件都有一个唯一的地址,而且可以是单接收的器件(例如:LCD驱动器)或者可以接收也可以发送的器件(例如:存储器)。发送器或接收器可以在主模式或从模式下操作,这取决于芯片是否必须启动数据的传输还是仅仅被寻址。
1.总线上数据的有效性

技术分享图片

 
IIC总线是以串行方式传输数据,从数据字节的最高位开始传送,每一个数据位在SCL上都有一个时钟脉冲相对应。在时钟线高电平期间数据线上必须保持稳定 的逻辑电平状态,高电平为数据1,低电平为数据0。只有在时钟线为低电平时,才允许数据线上的电平状态变化,如图11-2所示。

2.总线上的信号
IIC总线在传送数据过程中共有四种类型信号,它们分别是:开始信号、停止信号、重新开始信号和应答信号。
开始信号(START):如图11-3所示,当SCL为高电平时,SDA由高电平向低电平跳变,产生开始信号。当总线空闲的时候,例如,没有主动设备在使用总线(SDA和SCL都处于高电平),主机通过发送开始(START)信号建立通信。

技术分享图片

停止信号(STOP):如图11-3所示,当SCL为高电平时,SDA由低电平向高电平跳变,产生停止信号。主机通过发送停止信号,结束数据通信。
重新开始信号(Repeated START):在IIC总线上,由主机发送一个开始信号启动一次通信后,在首次发送停止信号之前,主机通过发送重新开始信号,可以转换与当前从机的通信模 式,或是切换到与另一个从机通信。如图11-3所示,当SCL为高电平时,SDA由高电平向低电平跳变,产生重新开始信号,它的本质就是一个开始信号。

技术分享图片

应答信号(A):接收数据的IC在接收到8位数据后,向发送数据的IC发出的特定的低电平脉冲。每一个数据字节后面都要 跟一位应答信号,表示已收到数据。应答信号在第9个时钟周期出现,这时发送器必须在这一时钟位上释放数据线,由接收设备拉低SDA电平来产生应答信号,由 接收设备保持SDA的高电平来产生非应答信号(A(—)),如图11-4所示。所以,一个完整的字节数据传输需要9个时钟脉冲。如果从机作为接收方向主机 发送非应答信号,这样,主机方就认为此次数据传输失败;如果是主机作为接收方,在从机发送器发送完一个字节数据后,发送了非应答信号,从机就认为数据传输 结束,并释放SDA线。不论是以上哪种情况都会终止数据传输,这时,主机或是产生停止信号释放总线,或是产生重新开始信号,开始一次新的通信。开始信号、 重新开始信号和停止信号都是由主控制器产生,应答信号由接收器产生,总线上带有IIC总线接口的器件很容易检测到这些信号。

3.总线上数据传输格式
一般情况下,一个标准的IIC通信由四部分组成:开始信号、从机地址传输、数据传输、停止信号。
由主机发送一个开始信号,启动一次IIC通信;在主机对从机寻址后,再在总线上传输数据。IIC总线上传送的每一个字节均为8位,首先发送的数据位为最高 位,每传送一个字节后都必须跟随一个应答位,每次通信的数据字节数是没有限制的;在全部数据传送结束后,由主机发送停止信号,结束通信。

技术分享图片

图11-5所示,时钟线为低电平时数据传送将停止进行。这种情况可以用于当接收器接收到一个字节数据后要进行一些其它工 作而无法立即接收下一个数据时,迫使总线进入等待状态,直到接收器准备好接收新数据时,接收器再释放时钟线使数据传送得以继续正常进行。例如,当接收器接 收完主控制器的一个字节数据后,产生中断信号并进行中断处理,中断处理完毕才能接收下一个字节数据,这时接收器在中断处理时将钳住SCL为低电平,直到中 断处理完毕才释放SCL。

4.IIC总线寻址约定
为了消除IIC总线系统中主控器与被控器的地址选择线,最大限度地简化总线连接线,IIC总线采用了独特的寻址约定,规定了开始信号后的第一个字节为寻址字节,用来寻址被控器件,并规定数据传送方向。

在IIC总线系统中,寻址字节由被控器的七位地址位(它占据了D7-D1位)和一位方向位(为D0位)组成。方向位为0时表示主控器将数据写入被控器,为 1时表示主控器从被控器读取数据。主控器发送开始信号后,立即发送寻址字节,这时,总线上的所有器件都将寻址字节中的7位地址与自己器件地址比较。如果两 者相同,则该器件认为被主控器寻址,并发送应答信号,被控器根据读,写位确定自身是作为发送器还是接收器。

主器件作为被控器时,其7位从地址在IIC总线地址寄存器中给定,为纯软件地址。而非单片机类型的外围器件地址完全由器件类型与引脚电平给定。IIC总线系统中,没有两个从机的地址是相同的。主控器不应该传输一个和它本身的从地址相同的地址。

5.主机向从机读写1个字节数据的过程
如图11-6所示,主机要向从机写1个字节数据时,主机首先产生START信号,然后紧跟着发送一个从机地址,这个地址共有7位,紧接着的第8位是数据方 向位(R/W),0表示主机发送数据(写),1表示主机接收数据(读),这时候主机等待从机的应答信号(A),当主机收到应答信号时,发送要访问的地址, 继续等待从机的应答信号,当主机收到应答信号时,发送1个字节的数据,继续等待从机的应答信号,当主机收到应答信号时,产生停止信号,结束传送过程。

技术分享图片


如图11-7所示,主机要从从机读1个字节数据时,主机首先产生START信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为0,表明是向从机 写命令,这时候主机等待从机的应答信号(A),当主机收到应答信号时,发送要访问的地址,继续等待从机的应答信号,当主机收到应答信号后,主机要改变通信 模式(主机将由发送变为接收,从机将由接收变为发送)所以主机发送重新开始信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为1,表明将主机设 置成接收模式开始读取数据,这时候主机等待从机的应答信号,当主机收到应答信号时,就可以接收1个字节的数据,当接收完成后,主机发送非应答信号,表示不 在接收数据,主机进而产生停止信号,结束传送过程。

技术分享图片





































以上是关于IIC接口总线的主要内容,如果未能解决你的问题,请参考以下文章

ARM裸板开发:07_IIC 通过IIC总线接口读写时钟芯片时间参数实现的总结

驱动程序实例:mpu6050(IIC + cdev)

Arduino与PCF8575 IIC 总线调试

IIC总线协议

模拟IIC协议时序

ESP3210.PCF8591数模转换器实验(IIC总线/wire库)