一、IIC总线
IIC总线是飞利浦公司在八十年代推出的一种串行、半双工总线。主要用于近距离、低速率的芯片之间的通信;IIC总线有两根数据线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步,IIC硬件结构简单,成本较低,因此在各个领域得到了广泛的应用。(这里关于串行、半双工的知识请参考上一节UART相关知识)
图1 IIC硬件连接图
IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误产生;每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其它器件正常工作;IIC总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器。
二、IIC总线通信过程
1、主机发送起始信号启用总线(当一个主机发送起始信号后,其它的主机和从机也会检测到这个起始信号,那么它们就不会再去占用IIC总线了)
2、主机发送一个字节数据指明从机地址和后续字节的传递方向(主机发送一个字节数据,其中高7位表示从机地址,最后一位表示数据传递方向,0表示主机向从机发送数据,1表示从机向主机发送数据,从机收到这一个字节以后,用高7位与自己的地址进行比较,如果是则发送应答信号)
3、被寻址的从机发送应答信号
4、发送器发送一个字节数据
5、接收器发送应答信号回应发送器
6、......(循环步骤4、5)
n、通信完成后主机发送停止信号释放总线
三、IIC总线寻址方式
IIC总线上传送的数据是广义的,即包括地址,又包括真正的数据。
主机发送起始信号后必须发送一个字节数据,该地址的高7位为从机地址,最低位表示后续字节的传递方向,0表示主机发送数据,1表示从机发送数据;总线上所有从机接收到该字节后都将这7位地址与自己的地址进行比较,如果相同,则认为自己被主机寻址,然后在根据第8位将自己定为发送器或者接收器。
四、起始信号和停止信号
SCL为高电平时,SDL由高变为低表示起始信号。(IIC初始状态,SCL和SDL都为高电平)
SCL为高电平时,SDA由低变高表示停止信号。
起始信号和停止信号都是由主机发生的,起始信号产生后总线处于占用状态,停止信号产生后总线处于空闲状态。
图 2 IIC起始信号和停止信号
五、字节传送与应答
IIC总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送器,即一帧共9位。
图 3 字节传送与应答
六、同步信号
IIC总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发送变化,时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保存稳定。