I2C (Inter-Integrated Circuit) 总线是一种两线式串行通信协议,主要用于短距离内的集成电路间通信。I2C总线由两条线组成:一条是串行数据线SDA (Serial Data Line),另一条是串行时钟线SCL (Serial Clock Line)。以下是I2C通信时序的关键部分及其详细说明:
1. 起始信号(Start Condition)
起始信号标志着一次I2C事务的开始。当SCL线处于高电平时,SDA线从高电平转变为低电平,即SDA线出现一个下降沿。这是唯一允许的条件来启动一次I2C事务。
2. 停止信号(Stop Condition)
停止信号标志着一次I2C事务的结束。当SCL线处于高电平时,SDA线从低电平转变为高电平,即SDA线出现一个上升沿。这是唯一允许的条件来结束一次I2C事务。
3. 数据传输
在每次数据传输期间,数据位在SCL线处于低电平时被改变,在SCL线处于高电平时被采样。每个数据位的传输遵循以下步骤:
- 当SCL为低电平时,SDA线上的数据可以改变。
- 当SCL为高电平时,SDA线上的数据必须保持稳定,以便接收设备能够正确采样数据。
4. 应答(Acknowledge, ACK)
每传输完8位数据后,发送设备会释放SDA线,此时接收设备必须将其拉低至少一个SCL脉冲的时间长度来确认数据已被正确接收,这就是ACK信号。如果没有接收到ACK信号,发送设备会认为数据未被正确接收,并可能尝试重新发送。
5. 空闲状态
当I2C总线既没有处于起始条件也没有处于停止条件时,总线处于空闲状态。在这种状态下,SDA和SCL线都应该保持高电平。这是因为I2C总线是开放漏极或开路集电极配置,需要上拉电阻将线拉到高电平。
6. 总线仲裁
在多主机环境中,如果两个或更多的设备试图同时控制总线,将会发生总线竞争。I2C总线设计时考虑到了这种可能性,并且通过数据线SDA上的电平比较来进行仲裁。如果两个设备在同一时间发送,其中一个发送高电平而另一个发送低电平,那么发送低电平的设备将赢得仲裁。输掉仲裁的设备会自动转换为从机模式。
7. 从机发送与主发送
- 从机发送(Slave Transmitter):从设备作为发送者,主设备作为接收者。
- 主发送(Master Transmitter):主设备作为发送者,从设备作为接收者。
实际操作流程
一次典型的I2C事务包括以下几个步骤:
- 主设备发送起始信号。
- 主设备发送从设备地址和读/写方向标志位。
- 从设备发送ACK信号。
- 主设备发送数据或请求数据。
- 每次传输完8位数据后,从设备发送ACK信号(最后一个字节可能发送非ACK信号)。
- 主设备发送停止信号。
以上就是I2C通信的基本时序概述。理解这些时序对于成功实现I2C通信非常重要。