I2C协议详解

Posted 旧年不在cd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I2C协议详解相关的知识,希望对你有一定的参考价值。

I2C协议详解

一、I2C协议简介

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

二、I2C总线结构

I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCLSDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。

三、I2C总线的特征

I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(可以从I2C器件的数据手册得知),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPUI2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。

四、I2C总线的三种状态

  • 空闲状态

  • 工作开始状态

  • 工作停止状态

空闲状态:当SCLSDA同时为高电平时,为空闲态:

工作开始状态:此时SCL为高,而SDA出现下降沿(START信号):

工作停止状态:此时SCL为高,而SDA出现上升沿(STOP信号):

五、I2C总线协议

I2C协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号总是由主设备产生。总线在空闲状态时,SCLSDA都保持着高电平,当SCL为高电平时,SDA由高到低的跳变,则会产生一个起始条件;当SCL为高时,SDA由低到高的跳变,则会产生一个停止条件。在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C器件无法访问总线;而在停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态,当然也可以不释放总线,可以直接选取下一个从设备并且开始下一次传输,最后在释放总线即可。

传输数据过程中,当SCL为高电平时,SDA的点平必须保持稳定,否则可能会产生开始位或者停止位,所以数据传输过程中,SCL为高电平时获取SDA的数据,在SCL为低电平时可以进行点平的转换(SCL为低电平时不会有影响)

六、I2C读写时序

  • 写时序

说明:主机要向从设备写入数据时,主机先发送起始信号,再发送从机地址+读写位(AD+W),收到从机ACK后,主机发送写入的寄存器地址,收到从机ACK后,主机发送要写入的数据,收到从机的ACK后,主机发送停止位。

  • 读时序

说明:主机要从从设备读取数据时,主机先发送起始信号,再发送从机地址+读写位(AD+W),收到从机ACK后,主机发送要读取的寄存器地址,收到从机ACK后,因为要转换数据流方向,主机要重新发送起始信号,接着发送从机地址+读写位(AD+R),收到从机的ACK后,开始读取数据并发送ACK信号,数据接收完成后,主发送NACK信号和停止信号。

以上是关于I2C协议详解的主要内容,如果未能解决你的问题,请参考以下文章

linux内核I2C子系统详解——看这一篇就够了

I2C协议(KXTF9-2050芯片分析)

通过KXTF9-2050芯片分析I2C协议

OLED 显示模块程序详解

I2C 总线协议详解

I2C总线协议详解