I2C总线协议详解

您所在的位置:网站首页 iic总线协议详解 I2C总线协议详解

I2C总线协议详解

2023-08-31 16:13| 来源: 网络整理| 查看: 265

目录

1.I2C简介

2.I2C主从器件

3.I2C总线接口特点

4.I2C总线协议

4.1起始位

4.2停止位 

 4.3 数据传输的有效性

 4.4 响应应答和非响应应答

I2C总线的操作

1.I2C 写时序

2.I2C 读时序

3.时钟同步和数据仲裁

1.I2C简介

        I2C 是很常见的一种总线协议(串行,半双工), I2C 是 NXP 公司设计的, I2C 使用两条线在主控制器和从机之间进行数据通信。一条是 SCL(串行时钟线),另外一条是 SDA(串行数据线),这两条数据线需要接上拉电阻,总线空闲的时候 SCL 和 SDA 处于高电平。 I2C 总线标准模式下速度,串行的8位双向数据传输位效率在标准模式下可达100kbit/s,快速模式下可达400Kbit/s,高速模式下可3.4Mbit/s。

2.I2C主从器件

        I2C 是支持多从机的,也就是一个 I2C 控制器下可以挂多个 I2C 从设备,这些不同的 I2C从设备有不同的器件地址,这样 I2C 主控制器就可以通过 I2C 设备的器件地址访问指定的 I2C设备了。

主器件:用于启动总线传送数据,并产生时钟以开放传送的器件 从器件:此时任何被寻址的器件被认为是从器件

主机发送数据给从器件流程:

1.主机首先寻址从器件(因为要支持多个器件之间进行相互通信,所以要为每一个器件进行编址) 2.然后主动发送数据至从器件,最后由主机终止数据传送

主机接收从器件的数据流程

1.主器件寻址从器件,然后主机接收从器件发送的数据 2.最后主机终止接收过程,在这种情况下主机负责产生定时时钟和终止数据传送

可以看到I2C开发,核心在主机这,主机设备和从机设备  比如:控制系统--I2C设备(主机设备)传感器--从机设备

 上图中 SDA 和 SCL 这两根线必须要接一个上拉电阻,一般是 4.7K。其余的 I2C 从器件都挂接到 SDA 和 SCL 这两根线上,这样就可以通过 SDA 和 SCL 这两根线来访问多个 I2C设备。

3.I2C总线接口特点

        I2C总线只需要一根数据线和一根时钟线,总线接口已经集成在芯片内部。I2C总线简化了硬件电路PCB布线,降低了系统成本,提高了系统可靠性,很容易形成标准化和模块化,便于重复利用。         I2C是一个真正的多主机总线,如果两个或多个主机同时初始化数据传输,可以通过冲突监测和仲裁防止数据破坏,每个连接到总线上的器件都有唯一的地址(在一个系统里)任何器件即可以作为主机也可以作为从机,但同一时刻只允许有一个主机,数据传输和地址设定由软件设定,比较灵活。总线上的器件增加和删除不影响其他器件正常工作。并且可以通过外部连线进行在线检测,便于系统故障诊断和调试,故障可以立即被寻址。

连接到相同总线上的IC数量只受总线最大电容(400pF)的限制? 因为设备会增加总线的电容值(它会充放电--时间特性)会改变时钟速率芯片内部的采样电路会出现问题

        总线具有极低的电流消耗,抗高噪声干扰,增加总线驱动器可以使总线电容扩大10倍,传输距离达到15m,兼容不同电压等级的器件,工作温度范围宽。

4.I2C总线协议

        总线上的数据传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件,起始和结束信号总是由主设备产生。

起始和结束信号产生条件:总线在空闲状态时,SCL和SDA都保持着高电平当SCL为高电平而SDA由高到低的跳变,表示产生一个起始条件; 当SCL为高而SDA由低到高的跳变,表示产生一个停止条件。 (为什么都是处于SCL时钟信号为高电平状态???因为时钟信号处于高电平时一般处于空闲状态)

起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C器件无法访问总线,而在停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态。

4.1起始位

        I2C 通信起始标志,通过这个起始位就可以告诉 I2C 从机,“我”要开始进行 I2C 通信了。在 SCL 为高电平的时候, SDA 出现下降沿就表示为起始位,如下图所示:

4.2停止位 

        停止位就是停止 I2C 通信的标志位,和起始位的功能相反。在 SCL 位高电平的时候, SDA出现上升沿就表示为停止位,如下图所示:

 4.3 数据传输的有效性

        I2C 总线在数据传输的时候要保证在 SCL 高电平期间, SDA 上的数据稳定,因此 SDA 上的数据变化只能在 SCL 低电平期间发生,如下图所示:

 4.4 响应应答和非响应应答

        主设备在SCL线上产生每个时钟脉冲的过程中将在SDA线上传输一个数据位当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位,此时才认为一个字节真正被传输完成。当然,并不是所有的字节传输都须有一个应答位,比如当从设备不能再接收主设备发送的数据时,从设备将回传一个非响应应答位。(I2C传输一个字节数据需要9个bit位)响应应答如下图所示: 

 非响应应答如下图:

I2C总线的操作

地址 I2C总线上的每一个设备都对应一个唯一的地址,主从设备之间的数据传输是建立在地址的基础上,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低为来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。

1.主设备往从设备读数据 (寻址操作有一个读写位,读写同一时刻只能存在一个) 2.主设备在从设备中读数据 3.主设备往从设备中写数据,然后重启起始条件,紧接着在从设备中读取数据或者主设备在从设备中读数据,然后重启起始条件,紧接着主设备往从设备中写数据。

一次完整的传输操作如下图:

 

1.I2C 写时序

 I2C 总线单字节写时序如下图所示:

写时序步骤:

1)、开始信号。 2)、发送 I2C 设备地址,每个 I2C 器件都有一个设备地址,通过发送具体的设备地址来决定访问哪个 I2C 器件。这是一个 8 位的数据,其中高 7 位是设备地址,最后 1 位是读写位,为1 的话表示这是一个读操作,为 0 的话表示这是一个写操作。 3)、 I2C 器件地址后面跟着一个读写位,为 0 表示写操作,为 1 表示读操作。 4)、从机发送的 ACK 应答信号。 5)、重新发送开始信号。 6)、发送要写写入数据的寄存器地址。 7)、从机发送的 ACK 应答信号 8)、发送要写入寄存器的数据。 9)、从机发送的 ACK 应答信号。 10)、停止信号。 

2.I2C 读时序

I2C 总线单字节读时序如下图所示:

 I2C 单字节读时序比写时序要复杂一点,读时序分为 4 大步,第一步是发送设备地址,第二步是发送要读取的寄存器地址,第三步重新发送设备地址,最后一步就是 I2C 从器件输出要读取的寄存器值,我们具体来看一下这步:

1)、主机发送起始信号。 2)、主机发送要读取的 I2C 从设备地址。 3)、读写控制位,因为是向 I2C 从设备发送数据,因此是写信号。 4)、从机发送的 ACK 应答信号。 5)、重新发送 START 信号。 6)、主机发送要读取的寄存器地址。 7)、从机发送的 ACK 应答信号。 8)、重新发送 START 信号。 9)、重新发送要读取的 I2C 从设备地址。 10)、读写控制位,这里是读信号,表示接下来是从 I2C 从设备里面读取数据。 11)、从机发送的 ACK 应答信号。 12)、从 I2C 器件里面读取到的数据。 13)、主机发出 NO ACK 信号,表示读取完成,不需要从机再发送 ACK 信号了。 14)、主机发出 STOP 信号,停止 I2C 通信。

3.时钟同步和数据仲裁

时钟同步:时钟同步是通过I2C总线上的SCL之间的线“与”来完成的,即如果有多个主机同时产生时钟,那么只有所有的master都发送高电平时,SCL上才表现为高电平,否则SCL都表现为低电平

数据仲裁:当所有主机在SDA上都写1时,SDA的数据才是1,只要有一个主机写0,那么此时SDA上的数据就是0一个主机每发送一个bit数据,在SCL处于高电平时,就查看SDA的电平是否发送的数据一致,如果不一致这个主机便知道自己输掉仲裁,然后停止向SDA写入数据,保证数据传输不会中断



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3