1. 简介
IIC是一种串行,半双工总线,主要应用于近距离、低速的芯片间通信。IIC总线有两根双向的信号线。一根为数据线SDA用于传输数据,另一根时钟线SCL用于通信双方时钟的同步。
IIC总线是一种多主机总线,连接在上面的分为主机和从机。主机有权利发起和结束一次通信,从机只能被主机呼叫。为了防止多主机同时启用主线,IIC协议具有冲突检测和仲裁功能来防止错误发生。
每个器件都有唯一的一个地址(7bit),且每一个器件都可以作为主机或从机。通信过程如下:
1. 主机发送起始信号启用总线,这样其他的主机就会知道总线已被启用。
2. 主机发送一个字节的数据(8bit)指明从机地址和后续字节的传送方向,即指明7位的地址加上1位表明传送方向的数据。第0位也就是最右边那位是判断字节,0时表示由主机给从机传送数据,1时表示由从机给主机传送数据。这字节数据会传送给每一个从机,他们再去判断是否和自己的地址是一样的。发送开始后,传送方向就不允许改变了。
3. 被寻址的从机发送应答信号回应主机。
4. 发送器发送一个字节数据。
5. 接收器发送应答信号回应发送器。(注意第4和5步不一定是主机发送给从机,有可能也是从发送给主,这要看第三步的一个字节数据中第0位是0还是1)
。。。。。。
n. 通信完成后主机发送停止信号释放总线,其他主机接收到这一信号就知道总线已经可以被占用了。
在空闲时,IIC总线的SDA和SCL都是高电平。在SCL时钟信号是高电平,SDA数据信号由高变低时,表示起始信号;在SCL时钟信号是高电平,SDA数据信号由低变高表示停止信号。
IIC总线通信规定必须一次最少发送一个字节长度的数据,在传送时,先传送高位(和串口UART通信相反)。接收器在接收到八位的数据后,要返回1位应答位来回应发送器。即一帧有9位,前八位发送器发送的数据,后一位接收器返回的数据。应答位是低电平。
在SCL时钟线为低电平期间,允许发送器向数据线上发送一位数据,在此期间数据线SDA上可以变化;在SCL时钟线为高电平期间,允许接收器在数据线上读取一位数据,在此期间数据线SDA上不可以改变。
2. IIC经典时序