I2C协议

来源:互联网 发布:qq农牧场辅助软件 编辑:程序博客网 时间:2024/06/05 17:33

1、I2C协议简介

        IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。由于只有一根数据先SDA,所以I2C协议时半双工的。I2C设备有主设备和从设备,时钟由主设备提供。

2、空闲开始/应答/结束信号

2.1空闲

    I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

2.2 开始和结束

开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

        从上面这副图中我们可以看到,在开始条件之前,以及停止条件之后,SDA和SCL都是高,这就是I2C总线的空闲状态。在SCL为高的情况下,SDA的变化就会引起通信状态的变化(开始或停止)。而在正常数据通信数据发生变化时,必须保持SCL为低

2.3 应答

        发送方在发送完8bit数据后,在第9个时钟期间释放数据线,等待接收方的应答信号。接收方此时应给出应答(ACK)或非应答信号(NAK),SCL被拉低表示为应答信号,SCL置高为NAK信号。注意应答信号由接收方发出(可能为主,也可能为从,主从和发送接收不要混淆)。接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。 如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P。


3、I2C读写

不论是读还是写,都是由主设备发起和结束的。也就是由主设备产生开始和结束条件。I2C设备地址为8bit,其中最低位为读写位,0为写,1为读。实际地址位为7bit。

3.1 写过程

可以总结为以下过程:
1、发送起始位
2、发送设备地址信息
4、发送寄存器信息
5、发送数据信息
6、发送停止位
上述过程省略了等待应答,每发送一个字节数据都会等待应答。


3.2 读过程

        读过程相对来讲会复杂一些,需要先写(写要读的寄存器)再读。并且读的时候由主设备发送ACK
1、发送起始位
2、发送设备地址信息(写)
4、发送要读的寄存器信息
5、重新开始,restart
6、发送设备地址信息(读)
7、读取数据
8、接收完毕,发送NAK
9、发送停止信号