【技术论坛】I2C协议分析
发布时间:2021-11-25 15:32:35
IIC(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。由于只有一根数据线SDA,所以I2C协议是半双工的。I2C设备有主设备和从设备,时钟由主设备提供。
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。
不论是读还是写,都是由主设备发起和结束的。也就是由主设备产生开始和结束条件。I2C设备地址为8bit,其中最低位为读写位,0为写,1为读。实际地址位为7bit。
3.1 写过程
可以总结为以下过程:
1.发送起始位
2.发送设备地址信息
3.发送寄存器信息
4.发送数据信息
5.发送停止位
上述过程省略了等待应答,每发送一个字节数据都会等待应答。
3.2 读过程
读过程相对来讲会复杂一些,需要先写(写要读的寄存器)再读。并且读的时候由主设备发送ACK
1.发送起始位
2.发送设备地址信息(写)
3.发送要读的寄存器信息
4.重新开始,restart
5.发送设备地址信息(读)
6.读取数据
7.接收完毕,发送NAK
8.发送停止信号
以上就是关于I2C协议的相关知识,希望能对大家有所帮助!
- 上一篇:纯干货!GPIO八大工作模式介绍
- 下一篇:什么是平衡二叉树(中)