I2C总线协议是一种常见的通信协议,具有一根时钟线SCL(Serial Clock)、一根数据线SDA(Serial Data)。
I2C:同步通信、串行发送数据、半双工
同步通信:通信双方靠一根时钟线来约定通信速率
串行发送数据:一根数据线传输数据
半双工:通信双方可以互传数据,但必须分时复用同一根数据线
数据线和时钟线均外接上拉电阻(弱上拉),空闲时处于高电平。支持多设备挂载,允许存在多主机,每个设备具有唯一地址。
起始信号:SCL为高电平期间,SDA由高电平切换为低电平
终止信号:SCL为高电平期间,SDA由低电平切换到高电平
发送字节:SCL低电平期间,才允许SDA上的电平变换,因此在SCL低电平时,主机将数据位依次放到SDA线上(高位在前),然后拉高SCL,此时SDA线上的数据有效且稳定,从机在SCL高电平期间读取SDA线上的数据,循环8次,即可发送一个字节。
接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位在前),然后拉高SCL,主机在SCL高电平期间读取SDA线上的数据,循环8次,即可接收一个字节。
发送应答:在接收完一个字节的数据之后,从机向主机发送一位应答信号,低电平表示继续接收,高电平表示接收结束。
接收应答:在接收到一个字节的数据之后,主机向从机发生一位应答信号,低电平表示继续接收,高电平表示接收结束。
主机向从机发送数据:
起始信号+从机地址_写 + 答 + 数据 + 答 + 终止信号
主机从从机接收数据:
起始信号+从机地址_读 + 答 + 数据 + 答 + 终止信号
主机首先向从机发送数据,然后从从机接收数据:
起始信号+从机地址_写 + 答 + 数据 + 答
+
起始信号+从机地址_读 + 答 + 数据 + 答 + 终止信号