IIC通信原理

        IIC(Inter-Integrated Circuit),中文翻译为集成电路总线,它是一种串行通信总线。前面已经说过,数据是按逐位顺序传输的方式就是串行通信,那么IIC是如何通信的呢。

        前面在讲UART时提到过通信传输所需要的几个必要条件,首先得知道什么时候通信开始,什么时候通信结束,然后就是如何去解析数据了,根据这几点,我们来谈谈IIC是如何实现通信的。

        为了方便理解,我们拿UART中的RS232来做对比。我们知道RS232使用两根线通信,一个发,一个收,通信的开始和停止以及数据读取都是针对同一个通信线的。而IIC也使用了两根线,但却是一根作时钟信号线,另一根作数据线,这样判断通信开始和停止与解析数据就分开了。这样看起来,区分起止信号与数据电平是不是就更加容易些了,但是嘛由于只有一根数据线了,缺点就是无法同时收发了,因此它是半双工通信的。

        下面直接说IIC的协议标准

        

        从图上可以看到,IIC规定的

        起始条件:在SCL为高时,SDA由高变低

        停止条件:在SCL为高时,SDA由低变高

        接下来就是数据收发了

        对于发送端来说,在SCL为低时,发送端将数据位依次放到SDA线上,高位先行(MSB),放完一位后SCL拉高。等SCL再次为低时,发送端再将数据位放到SDA线上,循环8次,即可发出一个字节。

        对于接收端来说,在SCL为低时,发送端正在发送数据,所以接收端保持静默,等SCL为高时,接收端读取SDA电平,之后循环8次,完成一个字节的读取。每次接收完一个字节后,必须发送一个应答告知发送端接收成功。

        在此过程中,每次发送或读取一个位的时间,就跟通信速率有关了,这个也是需要收发双方提前确定好的。

        讲完基本的通信原理,再说下IIC的实际应用吧。

        由于IIC的特性,可以很方便的将多个设备级联到一起,且每个设备都可以收发,也就可以构成一主多从或多主多重的系统。那么这么多设备接在一起,总线又是共享的,如何找到想要通信的设备呢,答案是器件地址。

        当一个IIC主机想要与IIC从机通信时,它会先发送一个字节寻址指令,其中7位为器件地址,1位为方向,即读还是写。此时其它设备收到后比对自身器件地址,发现不符后不做回应,只有匹配的设备才会发送应答。

        然后主机在收到应答后继续发送后面的数据。一般的IIC器件,比如EEPROM,此时会发送要写入或读取的地址,如往0x0000地址写入数字1,那么会先发送0x0000,等到回码后再发送0x01,之后在收到应答后结束通信。(传输过程中每个字节发送后都有应答)

        从上面可以知道,IIC使用了7位器件地址,也就是说总线最大只能容纳127种不同设备,是不是有点少了。其实IIC标准也考虑到这点,所以还有另一种10位地址方案,将器件7位地址与引脚3位地址相结合。但是这样的话,原先的寻址指令长度就得发生变化,需要使用2个字节。总共16位分两个字节发送,其中第一个字节的没用到的前5位被固定为“11110”,如下图所示。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕诗客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值