目录
I2C协议是什么:
I2C总线是由philips公司推出的一种在电子通信控制领域常用的通信协议。由时钟线和数据现两根线构成通信线路,利用上拉电阻将他们拉成高电平(表示总线空闲),具有电路简单,连线少,控制简单,通信速率高的优点。
I2C总线是一种主从结构总线,I2C总线上每个设备都可以作为主设备或从设备,但一个总线上一般只有一个主设备 ,可以带多个从设备。其中主设备一般用来产生时钟信号,并初始化总线的数据输出,因此主设备一般是CPU,而从设备只能被动响应主设备发起的通信请求,所以各种I2C接口芯片将作为从设备设用。
I2C可以有多个从设备,主设备需要通过地址来确定与哪个期间进行通信。I2C总线上每个设备都有一个唯一的7bit地址物理识别,这个地址固化在芯片内部,并可以在芯片的datasheet上找到。因为I2C地址全零为广播地址,因此I2C总线理论上可以带2^7-1=127个从设备。
I2C特点:
①有
一根
时钟线,所以是
同
步通信
②只有一根
数据总
线,所以是串行传输数据
③这根总线
是
双向传输,但是要分时,所以是半双工通
I2C通信时序:
I2C通信时序图:
包含空闲状态、起始信号、停止信号、应答信号、数据的有效性、数据传输
空闲状态:
I2C总线的数据线(SDA)和时钟线(SCL)两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高
起始信号:当时钟线(SCL)为高期间,数据线(SDA)由高到低的跳变
停止信号:当时钟线(SCL)为高期间,数据线(SDA)由低到高的跳变
读写地址:
主机在发送起始信号之后的下一个时序要立刻给出7bit目标从机物理地址和1bit的读/写方向位(0为写操作,1为读操作)
应答信号:
发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
此外主/从机在数据通信中,数据接收方(可能是主机也可能是从机)收到传输的一个字节数据后,需要给出响应,此时处在第九个时钟,发送端释放数据线(SDA)控制权,将数据线(SDA)电平拉高,由接收方控制。
数据的有效性:
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定。只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。即:数据在时钟线(SCL)的上升沿到来之前就需准备好。并在下降沿到来之前必须稳定。
数据的传输:
I2C通信时数据传输采用MSB(最高位优先)方式发送,其中高电平表示数据位1,低电平表示数据为0,当传输位需要改变时(如上一位发送的是0,下一位要发送1),必须发送在时钟线(SCL)位低电平期间,另外传输过程中数据线(SDA)上的数据位在时钟线(SCL)高电平期间必须保持不变,避免出现起始信号或终止信号的情况。
主机发送数据流:
总的来说IIC的通讯时序可以描述成:首先主机发送起始信号,时钟线保持高电平,数据线信号由高电平变为低电平,然后发送一个从设备地址,包括7bit的物理地址和1bit的读写地址(R/W=0),从设备匹配到该地址后,发送一个应答信号,主机收到应答信号后发送一个字节数据,循环发送一字节数据,直到主机向从机发送一个停止信号p,从机退出与主机的通信,当时钟线为高期间,数据线由低到高的跳变,释放总线结束通信。
主机接受数据流:
总的来说IIC的通讯时序可以描述成:首先主机发送起始信号,时钟线保持高电平,数据线信号由高电平变为低电平,然后发送一个从设备地址,包括7bit的物理地址和1bit的读写地址(R/W=1),从设备匹配到该地址后,发送一个应答信号并向主机发送数据,主机收到收到数据后向从机发送一个应答信号ACK,从机收到应答信号发送下一个字节的数据,循环这个过程,直到主机向从机发送一个停NACK,从机停止发送,最后主机发送停止信号,当时钟线为高期间,数据线由低到高的跳变,释放总线结束通信。
I2C模式:
I2C总线是一种同步,半双工,采用电平信号收发的串行总线,其速率支持:
标准模式:速率高达100kbit/s
快速模式:速率高达400kbit/s
快速模式+:速率高达1Mbit/s
高速模式:速率高达3.4Mbit/s
超快速模式:速率高达5Mbit/s(单向传输时支持)