一、IIC/I2C协议介绍
IIC(Inter-Integrated Circuit)是 IIC Bus 简称,中文叫集成电路总线。它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属设备地址。
I2C的正确读法为"I-squared-C" , 而"I-two-C"则是另一种错误但被广泛使用的读法, 在中国则多以"I方C"称之。
IIC是半双工通信方式。多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源,但在任何时间点上只能有一个主控。IIC使用两根信号线进行通信:一根时钟线SCL,一根数据线SDA。
二、IIC 总线时序
1)空闲状态,时钟线(SCL)和数据线(SDA)默认高电平,表示总线是空闲状态。
2)起始信号,由主设备发起,SCL保持高电平,SDA由高电平跳变到低电平。
3)I停止信号,由主设备终止,SCL保持高电平,SDA由低电平跳变到高电平。
4)数据传送,在SCL的每个时钟脉冲期间传输一个数据位,时钟信号SCL为高电平期间,数据线SDA上的数据必须保持稳定,只有在时钟线SCL上的信号为低电平期间,数据线SDA上的高电平或低电平状态才允许变化。
5)应答信号(ACK:有效应答,NACK:无效应答),接收端收到有效数据后向对方响应的信号,发送端每发送一个字节(8位)数据,在第9个时钟周期释放数据线去接收对方的应答。当SDA是低电平为有效应答(ACK),表示对方接收成功;当SDA是高电平为无效应答(NACK),表示对方没有接收成功。
三、数据传输的完整流程
1、主设备给从设备发送/写入数据:
1) 主设备发送起始(START)信号
2)主设备发送设备地址到从设备
3)等待从设备响应(ACK)
4)主设备发送数据到从设备,一般发送的每个字节数据后会跟着等待接收来自从设备的响应(ACK)
5)数据发送完毕,主设备发送停止(STOP)信号终止传输
2、主设备从从设备接收/读取数据
1)设备发送起始(START)信号
2)主设备发送设备地址到从设备
3)等待从设备响应(ACK)
4)主设备接收来自从设备的数据,一般接收的每个字节数据后会跟着向从设备发送一个响应(ACK)
5)一般接收到最后一个数据后会发送一个无效响应(NACK),然后主设备发送停止(STOP)信号终止传输