I2C总线的基本工作过程

I2C总线的基本工作过程,第1张

I2C基本工作过程

I2C总线是一个标准的双向接口,它使用一个控制器(称为主控制器)与从设备进行通信。 从机不能传送数据,除非它已被主机寻址。 I2C总线上的每个设备都有一个特定的设备地址,以区分同一I2C总线上的其他设备。

物理I2C接口由串行时钟(SCL)和串行数据(SDA)线组成。 SDA和SCL线都必须通过一个上拉电阻连接到VCC。 上拉电阻的大小由I2C线上的电容量决定。 数据传输只能在总线空闲时启动。 如果在停止条件后SDA和SCL线都是高电平,总线被认为是空闲的。

主设备访问从设备的一般过程如下:

(1)假设一个主服务器想要发送数据给一个从服务器:

(a)主机发送一个START条件,并向从机发送地址。

(b)主机将数据发送到从机。

(c)主机以STOP条件终止传输。

(2)如果主服务器想从从服务器接收/读取数据:

(a)主机发送一个START条件,并向从机发送地址 。

(b)主机将请求的寄存器读给从机。

(c)主机从从机接收数据 。

(d)主机使用STOP条件终止传输 。

I2C协议

1. 启动和停止条件

与该设备的I2C通信由发送START条件的主设备发起,并由发送STOP条件的主设备终止。 当SCL为高时,SDA电平从高到低转换定义为START条件。 当SCL为高时,SDA电平从低到高转换定义为停止条件,如图所示。

I2C总线的基本工作过程,poYBAGL0yVaAMaEtAAAv68sITbc701.png,第2张

图1 启动和停止条件时序图

2. 重复起始条件

重复的 START 条件类似于 START 条件,用于代替紧接的 STOP的 START 条件。 它看起来与 START 条件相同,但与 START 条件不同,因为它发生在 STOP 条件之前(当总线不空闲时)。 当主机希望开始新的通信,但又不想让总线在 STOP 条件下空闲时,这很有用,这有可能使主机失去对另一个主机的总线控制(在多主机环境中) )。

3. 数据有效性和字节格式

在SCL的每个时钟脉冲期间传输一个数据位。 SDA一个字节由8位组成。 一个字节可以是设备地址、寄存器地址或写入或从从设备读出的数据。 数据先传输最高有效位(MSB)。 在START和STOP条件之间可以从主机向从机传输任意数量的数据字节。 SDA线上的数据必须在时钟周期的高电平期间保持稳定,因为当SCL是高电平时,数据线的变化被解释为控制命令(START或STOP),如图所示。

I2C总线的基本工作过程,poYBAGL0yWqAFKWRAACNeE7Xgbo353.png,第3张

图2 单字节数据传输时序图

4. 应答(ACK)和不应答(NACK)

数据的每个字节(包括地址字节)后面跟着一个来自接收端的ACK位。ACK位允许接收端向发送端发送已成功接收的字节和可以发送的另一个字节。

在接收端可以发送ACK之前,发送端必须释放SDA线。为了发送ACK位,接收端需要在ACK/ NACK对应的低电平期间(周期9)下低SDA线,这样在ACK/ NACK对应的高电平期间的SDA线要稳定在低电平。建立和保持时间必须考虑在内。

当SDA线在ACK/NACK相关的时钟周期内保持高电平时,这被解释为NACK。有几个条件会导致NACK的生成:

(1)从机无法接收或发送,因为它正在执行一些实时功能,并没有准备好开始与主机通信。

(2)在传输过程中,主机获取了它不理解的数据或命令。

(3)在传输过程中,从机无法接收更多的数据字节。

(4)从机完成了读取数据并通过NACK指示从机。

I2C总线的基本工作过程,poYBAGL0yXyAAS9KAAByos6SYEI341.png,第4张

图3 NACK时序图

4.1.5 I2C写时序

要在I2C总线上写,主机将在总线上发送一个带有从机地址的启动条件,并且最后一个位(R/W位)设置为0,表示写。 在从机发送应答位后,主机将发送它希望写入的寄存器的寄存器地址。 从机会再次应答,让主人知道它准备好了。 在此之后,主机将开始向从机发送寄存器数据,直到主机发送了它需要的所有数据(有时只是一个字节),并且主机将用STOP条件终止传输,如图所示。

I2C总线的基本工作过程,pYYBAGL0yZCAI_jyAABmX9-LQ5w002.png,第5张

图4 写时序图

4.1.6 I2C读时序

从从机读取与写入非常相似,但需要一些额外的步骤。 为了从从机读取数据,主机必须首先指示它希望从哪个从机读取数据。 这是由主机以类似于写的方式开始传输的,通过发送R/W位等于0(表示写)的地址,后面跟着它希望读取的寄存器地址。 一旦从机确认了这个寄存器地址,主机将再次发送一个START条件,然后是R/W位设为1(表示读)的从机地址。 这一次,从机将确认读的请求,主机释放SDA总线,但将继续向从机提供时钟。 在这部分的时间中,主机将成为主接收端,从机将成为从发送端。

主机将继续发送时钟脉冲,但将释放SDA线,以便从机可以传输数据。 在每个数据字节的末尾,主机将发送一个ACK给从机,让从机知道它已经准备好接收更多的数据了。 一旦主机收到了它所期望的字节数,它将发送一个NACK,向从服务器发出信号,停止通信并释放总线。主机将在此之后使用STOP条件,如图所示。

I2C总线的基本工作过程,poYBAGL0yaSAaOwuAABbVlQrghI797.png,第6张

图5 读时序图

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/3000213.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存