快捷搜索:  汽车  科技

i2c总线工作过程(I2C总线基础知识及操作详解)

i2c总线工作过程(I2C总线基础知识及操作详解)当 SCL 线为高电平时,SDA 线上出现下降沿,表明总线上产生了起始信号Start,标志着一次数据传输的开始。总线上的设备都不驱动总线时,总线进入空闲状态,SCL与SDA均处于高电平。I2C总线速率最低不设限,速率上限分三种模式:标准模式为100kbps,快速模式为400kbps,高速模式可达3.4Mbps。所有I2C器件都支持标准的100kbps模式,当前大多数器件也已支持400kbps模式,但高速模式还是有很多器件不支持的。选择不同的总线速率还会对总线上拉电阻产生不同的要求,上拉电阻阻值通常在2k~10kΩ之间,总线速率越高电阻值应越小。I2C的典型时序图如下图所示。图2 I2C通信时序图

I2C总线是一种简单的双向两线式同步串行总线,最初由Philips公司开发,后又经过几次发展和完善,目前已被业界厂商广泛采用,成为最常用的板级通信总线之一,大量应用于处理器与外围设备芯片之间的通信。

1、物理连接

I2C总线由两条线组成:SCL时钟线负责收发双方的时钟同步,SDA数据线负责串行数据的传输。I2C总线支持多个设备同时挂接在同一条总线上,且支持多主机模式,也就是任一设备都可以作为主机发起通信,这就产生了较为复杂的冲突检测和仲裁机制。但实际应用中多主机模式极少用到,所以本篇文章不涉及多主机模式的内容,只讲解简单的单主多从这一模式,其典型的电路连接如下图所示。

i2c总线工作过程(I2C总线基础知识及操作详解)(1)

图1 一主多从I2C通信示意图

如图1所示,I2C总线由时钟线SCL和数据线SDA组成,连接到总线上的所有器件的SCL都连到一起,所有SDA都连到一起。I2C总线是开漏引脚并联的结构,因此通常外部要加上拉电阻。对于开漏电路外部加上拉电阻,就组成了线“与”逻辑。线“与”的意思是说,当所有接入的器件都输出高电平时,这条线才是高电平,而任何一个器件输出一个低电平,那这条线就会是低电平。作为从机的器件都有自己的地址,主机通过这个地址与不同的从机建立起通信连接并传输数据。

I2C总线速率最低不设限,速率上限分三种模式:标准模式为100kbps,快速模式为400kbps,高速模式可达3.4Mbps。所有I2C器件都支持标准的100kbps模式,当前大多数器件也已支持400kbps模式,但高速模式还是有很多器件不支持的。选择不同的总线速率还会对总线上拉电阻产生不同的要求,上拉电阻阻值通常在2k~10kΩ之间,总线速率越高电阻值应越小。

2、时序定义

I2C的典型时序图如下图所示。

i2c总线工作过程(I2C总线基础知识及操作详解)(2)

图2 I2C通信时序图

(1) 总线空闲

总线上的设备都不驱动总线时,总线进入空闲状态,SCL与SDA均处于高电平。

(2) 起始信号Start

当 SCL 线为高电平时,SDA 线上出现下降沿,表明总线上产生了起始信号Start,标志着一次数据传输的开始。

(3) 数据传输

I2C总线规定数据按字节传输,即一次传输8个bit,数据位由SDA线传输,可以连续传输多个字节。传输数据位时SDA必须在SCL保持低电平时改变,而SCL为高电平时SDA必须保持不变。

(4) 应答ACK/NACK

发送方发送完8bit数据(一个字节)后,紧随的下一个时钟周期,发送方释放SDA线,接收方发送一个ACK/NAK信号,用于应答发送方接收状态。ACK表示接收方已成功接收数据,NACK则通常表示接收方因为“忙”或故障而没有成功接收数据。

(5) 停止信号Stop

当 SCL 线为高电平时,SDA 线上出现上升沿,表明总线上产生了停止信号Stop,标志着一次数据传输的结束。

3、数据格式

I2C总线上在起始条件产生之后的第一帧为寻址帧(一个字节),即主机对这个地址的从机进行寻址。I2C协议支持7位地址和10位地址两种模式,但实际应用中极少用到10位地址模式,所以本篇文章不涉及10位寻址模式,仅讲解7位寻址模式:寻址帧共有8个位,其中的高7位为从机地址,第8位是读/写位,用来决定后续数据帧传输的方向(0:写,主机至从机; 1:读,从机至主机)。

i2c总线工作过程(I2C总线基础知识及操作详解)(3)

图3 I2C数据传输示意图

在实际操作中,SCL线始终由主机驱动,主机发送寻址字节的8bit时,SDA线自然也由主机驱动,8bit发送结束后,主机继续驱动SCL产生一个周期的时钟信号,同时主机释放SDA线,SDA线改由从机驱动,在SCL上升沿之后主机检测SDA线上的电平:如果SDA为低电平(ACK),则说明从机正确应答,可以继续传输数据;如果SDA为高电平(NAK),则说明从机因为“忙”或故障而不能继续,此时主机应放弃后续操作,并释放总线。

当寻址完成后,如果其中的读写位为0,则后续数据帧仍是由主机到从机,其SCL与SDA的操作与寻址帧完全相同;如果读写位为1,则后续数据帧是由从机到主机,此时SCL仍由主机驱动,同时主机释放SDA而由从机驱动,主机在每次SCL上升沿后读取SDA线上的数据,一个字节的数据传输完成后,应答位则由主机给出,通常来说ACK表示主机还要继续读数据,而NACK则表示不再继续读取数据。

4、重复起始

在不产生停止信号的情况下,起始信号可以在传输期间重复产生。这是一种特殊情况,称为重复起始,通常用于从从机的特定内部地址处读取数据。

比如I2C接口的存储器件EEPEOM,它除了自身的I2C设备地址外,在其内部还有存储地址,而通常我们都是要在其内部的存储地址上写入或读取数据。而其它大量具备较负责功能的器件,都具备寄存器地址这类东西,用于处理器对其进行配置与传输特定位置的数据。

对于此类器件,写数据时还是很简单的,在寻址字节后第一个(或多个)字节就是其寄存器地址(或存储地址),再之后的数据就是要在该地址(或从该地址开始)写入的数据,如下图所示。

i2c总线工作过程(I2C总线基础知识及操作详解)(4)

图4 I2C器件数据写入典型操作

而读数据时,通常就会用到重复起始的操作了。首先,主机产生起始信号,并对从机进行寻址 写操作,后续写入一个(或多个)字节的寄存器地址(或存储地址);然后,主机再次产生起始信号(即重复起始),并对从机进行寻址 读操作,后续就可以从先前写入的地址处开始读取数据了,如下图所示。

i2c总线工作过程(I2C总线基础知识及操作详解)(5)

图5 I2C器件数据读取典型操作

5、通信实例

下图是使用Kingst LA5016逻辑分析仪采集的EEPROM存储器的一段数据读取的波形。图中的绿圆点指示起始信号,红方块指示停止信号,中间过程中的白圆点指示数据位,白方块指示应答位。

i2c总线工作过程(I2C总线基础知识及操作详解)(6)

图6 I2C接口EEPROM数据读取实例

从图中可以看到:第一个字节为寻址 写操作,第二个字节就是EEPROM内部的存储地址;然后是重复起始信号,紧跟着一个字节的寻址 读操作,再之后就是从之前传输的地址0x8E处开始的数据了,它们由从机EEPROM逐个送出,最后一个字节的应答位为NAK,表示数据到此结束。

猜您喜欢: