I2C总线协议
IIC总线
IIC总线只需要两根引脚就可以实现通信,一根是数据线(SDA Serial Data),另一根是时钟线(SCL Serial Clock),所有通过IIC接口通信的外围器件都挂载在IIC总线上,通过这种机制就可以实现多机通信。
外围器件的时钟线和数据线都是挂载在IIC总线(由主控芯片提供),并且在空闲状态下所有器件的时钟线(SCL)和数据线(SDA)都被总线的上拉电阻拉高,这样就可以把SDA引脚和SCL引脚设置为开漏模式即可,好处是防止短路。
内部集成电路(Inter Integrated Circuit)的简称叫做IIC或者I2C,是一种简单的、半双工同步通信的串行通信接口,IIC总线是上世纪80年代(1982年)由飞利浦公司设计出来,当时的目的是为了给MCU和外围芯片提供更简单的交互方式。
通信步骤过程
注意:SDA和SCL在空闲状态乡下都是高电平
-
主机发送起始信号启用总线 总线处于占用
-
主机发送一个字节byte数据指明从机地址和后续字节的传送方向 (寻址方式)发送7位地址决定跟哪个从机通信还有1位是数据的方向 0主机给从机 1从机给主机一共8位bit 一个字节
-
被寻址的从机发送应答信号回应主机提取出主机发送的一个字节的数据的高7位 查看是不是主机寻找自己回应主机
-
发送器发送一个字节的数据(此发送器由上述2步骤的方向决定)
-
接收器发送应答信号回应发送器(此接收器由上述2步骤的方向决定)
-
重复步骤 4、5,可以发送任意多个字节 但是发送的第一个字节一定是步骤 2
-
通信完成后主机发送停止信号释放总线 总线处于空闲
起始信号和终止信号
SCL为高电平时、SDA由高变低电平 表示 起始信号
SCL为高电平时、SDA由低变高电平 表示 停止信号
起始信号和停止信号都是由主机发出,起始信号发出总线处于占用,终止信号发出总线处于空闲
字节发送和应答
每个字节为8位长度,由于长度固定UART长度在5-8,所以从低位到高位发送;
而IIC发送字节长度固定 所以从高到低;
每个数据发送完一个字节数据之后 接收器必须发送1位应答位来回应发送器;所以一共是9位
同步信号
IIC在进行数据传送时,SCL低电平写;高电平是读
SCL为低电平期间,发送器向数据线发送一位数据时可以允许SDA信号变化
SCL为高电平期间,接收器向数据线读取一位数据时不可以允许SDA信号变化