IIC总线的优点:
1、IIC总线优点中最主要的优点是其简单性(IIC只有两条信号线)和有效性(根据SCL线上的时钟线来判断)。带有IIC总线的接口的单片机都可直接与具有IIC总线接口的各种扩展器件(如存储器、I/O芯片、A/D、D/A、键盘、显示器、时钟、日历等)连接。由于IIC总线采用纯软件的寻址方法,无须片选线的连接,这样就大大的简化了总线的数量。
2、IIC总线的另一个优点是允许多主器件。任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率,在任何时间点上只能有一个主控。在实际应用中,经常遇到的是以单一单片机为主器件,其他外围接口期间为从器件的情况。
IIC总线的缺点:
在标准的IIC普通模式下,数据的传输速率为100kbit/s,高速模式下可以达到400kbit/s。
IIC所接的外围器件的数量并不是无穷多的,总线上的扩展的期间数量是由限制的。总线上的扩展的期间数量并不是由电流负载决定的,而是由电容负载决定的。IIC总线上的每个器件的接口都有一定的等效电容,器件越多(扩展外围器件可以看作是并联在主器件的总线上的),电容值就越大,就会造成信号传输的延迟。
总线上允许接的器件数量以器件的电容量不能超过400pF(可以通过其他的方法增加总线的电容量),据此可以算出总线的长度和扩展外围器件的数量。
IIC的总线系统的基本结构:
IIC总线总共只有两条信号线,一条是双向的串行数据线SDA,另一条是串行时钟线SCL。SDA和SCL都是双向的,IIC总线上的各器件的数据线都接到SDA线上,IIC总线上的各器件的时钟线都接到SCL线上。
每个连接到IIC总线上的器件都有一个唯一的地址,扩展期间时要受到器件地址数量的限制。IIC的总线系统的基本结构如图所示。
IIC的总线物理拓扑结构:
当IIC总线空闲时,SDA和SCL两条线均为高电平。由于连接到总线上的器件输出级必须是漏极开路或者集电极开路的,因此只要有一个器件任意时刻输出低电平,都将总线上的信号变低,即各器件的SDA和SCL都是“线与“的关系。
由于各器件输出端为漏极开路,则SCL和SDA线必须通过上拉电阻接正电源,以保证SDA和SCL在空闲状态被上拉到高电平。IIC总线的拓扑结构如图所示。
初始状态:SDA,SCL为高电平(高阻态)
起始信号:SCL保持为高电平,SDA拉低由高电平变为低电平(延时>4.7us),然后SCL拉低,开始数据传输,只有在SCL拉低的时候SDA的信号才有效。SCL=1时 数据线SDA的任何电平变换会看做是总线的起始信号或者停止信号。
结束信号:SCL保持高电平,SDA由低电平变为高电平
每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据,
应答信号:主机SCL拉高(上升沿),读取从机SDA的电平,为低电平表示产生应答
应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;
应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。、
当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位ACK, 此时才认为一个字节真正的被传输完成 ,如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
通信时序
(1)主机写
(2)主机读
IIC是半双工通信方式:
(1)、数据线SDA可能会数据输入,也可能是数据输出,需要定义IIC_SDA来进行输出、READ_SDA来进行输入,与此同时就要对IO口进行模式配置:SDA_IN()和SDA_OUT()。
(2)、时钟线SCL一直是输出的,所以不用区分时钟线的输入和输出。