一、I2C总线简介
I2C总线:串行、半双工方式,用于近距离、低速的芯片之间通信。
两根双向的信号线:一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟同步。I2C总线是一种多主机总线,连接在I2C总线还是那个的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫。I2C具备冲突检测和仲裁。
二、I2C总线的通信过程
1、主机发送起始信号启动总线
2、主机发送一个字节数据指明从机地址和后续字节的传送方向,如图所示
最低位表示后续字节的传送方向,如果为“0”表示主机给从机发送数据,如果为“1”则表示主机接收从机数据。
3、被寻址的从机发送应答信号回应主机
4、发送器发送一个字节数据数据
5、接收器发送应答信号回应发送器
循环4、5步骤可以发送任意多个字节。
6、通信完成后主机发送停止信号释放总线
三、I2C总线信号的实现
1、起始信号和停止信号
SCL为高电平时,SDA由高变低表示为起始信号。
SCL为高电平时,SDA由低变高表示为停止信号。
起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态,其他主机就不能用了,停止信号产生后总线处空闲状态。
2、字节传送和应答
I2C总线通信时每个字节为8位,数据传送时,先发送最高位,后传送低位,如0xAA(10101010),先发送1。发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送器,即一帧共有9位,如图所示: