I2C属于一主多从的总线结构,总线上的每个设备都有一个特定的设备地址,以区分同一I2C总线上的其他设备。
主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。此时,任何被寻址的器件都被认为是从机。
物理I2C接口有两根双向线,串行时钟线(SCL)和串行数据线(SDA)组成,可用于发送和接收数据,但是通信都是由主设备发起,从设备被动响应,实现数据的传输。
I2C主从设备的一般通信过程(简化版):
①发信号-②发地址-③等待响应-④发送数据-⑤发送无效响应,数据发送停止
I2C总线协议内容概括:
①起始信号-②停止信号-③应答信号-④数据有效性
1、空闲状态
时钟线(SCL)和数据线(SDA)接上拉电阻,默认高电平,表示总线是空闲状态。
2、从设备地址
从设备地址用来区分总线上不同的从设备,一般发送从设备地址的时候会在最低位加上读/写信号
3、起始(START)信号
I2C通信的起始信号由主设备发起,SCL保持高电平,SDA由高电平跳变到低电平。
4、停止(STOP)信号
I2C通信的停止信号由主设备终止,SCL保持高电平,SDA由低电平跳变到高电平。
5、数据有效性
I2C总线进行数据传送时,在SCL的每个时钟脉冲期间传输一个数据位,时钟信号SCL为高电平期间,数据线SDA上的数据必须保持稳定,只有在时钟线SCL上的信号为低电平期间,数据线SDA上的高电平或低电平状态才允许变化,因为当SCL是高电平时,数据线SDA的变化被规定为控制命令(START或STOP,也就是前面的起始信号和停止信号)。
6、应答信号(ACK:有效应答,NACK:无效应答)
接收端收到有效数据后向对方响应的信号,发送端每发送一个字节(8位)数据,在第9个时钟周期释放数据线去接收对方的应答。
当SDA是低电平为有效应答(ACK),表示对方接收成功;
当SDA是高电平为无效应答(NACK),表示对方没有接收成功。
【补充知识】
上拉、下拉电阻统一称为拉电阻,作用是将状态不确定的信号线通过一个电阻将其箝位至高电平(上拉)或低电平(下拉),上拉电阻与电源串联,下拉电阻与地串联。
在数字电路中,信号通常有三种状态:0(低电平)、1(高电平)、浮空(不确定、随机)
上拉电阻并联外接电阻,提高输出电平,下拉电阻同理。