1.IIC接口原理
内部集成电路总线(Inter Integrated Circuit BUS, IIC BUS),用于连接控制器及其外围设备。是具备总线仲裁和高地速设备同步等功能的高性能多主机总线。直接用导线连接设备,通信时无需片选信号。
IIC总线有如下操作模式:主发送模式、主接受模式、从发送模式、从接受模式。
2.通用传输过程及格式
起始条件:当IIC接口处于从模式时,要想数据传输,必须检测SDA线上的起始条件,起始条件由主器件产生。当SCL信号为高时,SDA产生一个由高变低的电平变化,即产生一个启动信号。当IIC总线上产生了启动信号后,这条总线就被发出起始信号的主器件占用了,变成"忙"状态。
停止条件:在SCL信号为高时,SDA产生一个由低变高的电平变化处,产生了一个停止信号。停止条件也由主器件产生,作用是停止与某个从器件之间的数据传输。当IIC总线上产生了一个停止条件,那么在几个时钟周期之后总线就被释放,变成"闲"状态。
当主器件送出一个起始条件,它还会立即送出一个从地址,来通知将与它进行数据通信的从器件。1个字节的地址包括7位的地址信息和一位的传输方向的指示位,如果第7位为0,表示马上要进行写操作;如果为1,表示马上要进行读操作。
数据传输格式:SDA线上传输的每个字节长度都是8位,每次传输中字节的数量是没有限制的,在起始条件后面的第一个字节是地址域,之后每个传输的字节后面都有一个应答(ACK)位(即一帧共有9位)。传输中串行数据的MSB(字节的高位首先发送)。
应答信号:为了完成1个字节的传输操作,接收器应该在接受完1个字节之后发送ACK位到发送器,告诉发送器收到这个字节。ACK脉冲信号在SCL线上第9个时钟处发出(前面8个时钟完成1个字节的数据传输,SCL上的时钟都是由主器件产生的)。当发送器要接受ACK脉冲时,应该释放SDA信号线,即将SDA置高。接收器在接收完前面8位数据后,将SDA拉低。发送器探测到SDA为低,就认为接收器成功接收了前面的8位数据。
3.数据传输过程
开始:主设备产生启动信号,标明数据传输开始。
地址:主设备发送地址信息,包含7位的从设备地址和1位的数据方向指示位(读或写位,表示数据流的方向)。
数据:根据指示位,数据在主设备和从设备之间进行传输。数据一般以8位传输,MSB先传;具体能传输多少量的数据并没有限制。接收器产生1位的ACK(应答信号)表明收到了每个字节。传输过程可以被中止和重新开始。
停止:主设备产生停止信号,结束数据传输。
4.总线竞争的仲裁
IIC总线上可以挂载多个器件,有时会发生两个或多个主器件同时想占用总线的情况。IIC总线具有多主控能力,可对发生在SDA线上的总线竞争进行仲裁。
仲裁原则:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。
总线竞争的仲裁在两个层次上进行:首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位比较,从而确保竞争仲裁的可靠性。由于是利用IIC总线上的信息进行仲裁,不会造成信息的丢失。