I2C(Inter-Integrated Circuit)总线协议是一种简单、高效、双向的串行通信协议,主要用于微控制器与外部设备之间的通信。I2C协议利用两根线——数据线SDA和时钟线SCL,实现多设备间的通信。下面我们将深入探讨I2C的工作原理和协议细节。
一、I2C总线结构与特性
1. 数据线SDA和时钟线SCL:SDA是双向数据线,采用开漏(Open Drain)门设计,与其他器件形成“线与”关系。SCL是同步时钟线,同样为开漏结构。在空闲状态下,两线都通过上拉电阻维持高电平。
2. 设备分类:I2C总线上有两类设备——主设备(Master)和从设备(Slave)。主设备控制通信流程,驱动SCL线,而从设备响应主设备的请求。同一时间只能有一个主设备,但可有多个从设备。从设备的地址由7位组成,高4位由制造商分配,低3位由用户设定。
二、I2C通信协议
1. 空闲状态:当SDA和SCL同时为高电平时,总线处于空闲状态。
2. 起始位与停止位:
- 起始位:在SCL为高期间,SDA线从高电平变为低电平。
- 停止位:在SCL为高期间,SDA线从低电平变为高电平。起始和停止信号用于界定传输的开始和结束。
3. 应答位(ACK)与非应答位(NACK):在每个8位数据字节发送后,接收方会在第9个时钟脉冲期间反馈ACK或NACK。ACK表示接收成功,NACK表示接收失败。如果接收器为主设备,收到最后一个字节后会发送NACK,告知从设备结束传输。
4. 数据有效性:数据在SCL的高电平期间必须保持稳定,只允许在SCL的低电平期间改变状态。
5. 数据传输:数据通过SDA线在SCL时钟的配合下逐位串行传输,边沿触发。每个数据位对应一个时钟脉冲。
三、I2C通信过程
1. 主设备向从设备发送数据:主设备首先发送起始位,接着发送从设备地址和读/写选择位。从设备匹配到地址后,接收数据。如果从设备接收成功,它会在SCL的高电平期间拉低SDA线作为应答。如果未成功,从设备不会产生应答。
2. 写入过程:主设备发送起始位,然后发送从设备地址和写选择位。主设备释放总线,等待从设备应答。从设备确认后,主设备开始发送数据,最后发送停止位。
总结,I2C总线协议通过精简的两线设计,实现了高效、低功耗的通信。其协议规范包括起始和停止位、数据传输规则以及应答机制,确保了数据的正确传输。主设备控制通信流程,而从设备根据接收到的地址和命令执行相应操作,共同构建了一个可靠的通信网络。