详解I2C串行通讯总线

接口/总线/驱动

1120人已加入

描述

通信协议 - I2C

I2C(Inter-Integrated Circuit)是一种串行通讯总线,可允许存在多主机,但同一时刻只能有一个主机在线。I2C 由两条开漏信号线组成,接线简单,利用电阻上拉,典型电平为正逻辑 3.3V 或 5V。传输速率分快速模式(400Kb/s)、标准模式(100Kb/s)、低速模式(10Kb/s)。

在 I2C 总线上,从机以它的 I2C 地址被选择。这样子可以用在一个主机上通过两根线控制多个从机。

总线

I2C 的引脚

SCL(serial clock):由主机产生的方波,用来控制传输速率和数据的锁存。

SDA(serial data):这是一个半双工、同步的信号线,传输的数据包括地址、控制信号与通信数据。

I2C 地址

I2C 地址划分,是 7 bit 地址加上 1 bit 读写指示。

I2C 总线上的每个设备都必须有一个唯一的地址,如果地址重复会出问题。有些设备的 I2C 地址是可以编程设置的。

总线

I2C 通信

START:主机在 SCL 为高时,拉低 SDA 发起。

STOP:主机在 SCL 为高时,释放 SDA(变为高电平)发起。

ACK(acknowledge):I2C 传输都是随着每个 SCL 脉冲,每次传输 1 个字节(8 个位)。每次传输的第 9 个脉冲被保留为从机的确认信号,每次的 ACK 信号表示前一次传输成功。

I2C 传输句段示例

这一段传输的值为 11001101:

总线

主机拉低 SDA 电平以产生 START 信号。

第一个位被设置,主机拉低 SCL,将时钟信号经过 DAC 进行输出。

传输到第九个位时,主机不会拉低 SDA,如果从机确认传输完整,则将 SDA 拉低让主机知道。

有效的数据传输

在 SCL 保持高电平(传输数据)时,SDA 在这段时间内必须保持稳定才有效。

在 SCL 节拍间的低电平,才允许 SDA 切换数值。

当 SCL 为高电平,SDA 发生变化时,就会被解释为 START、RESTART 或 STOP 事件。

总线

接口电路上升 / 下降计时

总线

如图,晶体管将在低电平时导通,并将 Cb 电容放电到低电平。反之,晶体管将在高电平时截止,上拉电阻会将 Cb 充电至高电平。

tr(上升时间):信号从低电平过渡到高电平的最大时间。因为 I2C 是开漏信号,所以上升时间由上拉电阻和总线电容的 RC 时间常数决定。

tf(下降时间):信号从高电平过渡到低电平的最大时间。

总线

I2C 上拉电阻计算

上拉电阻最小值:

总线

上拉电阻最大值:

总线

其中,上拉电阻最小值会带来最短的上升时间。如果用的阻值比这个再小,就会导致当输出晶体管开启(逻辑低电平)时,消耗过多的电流,违反最大逻辑低电平输出的规范。

上拉电阻最大值会带来最长的上升时间。如果使用大于此值的上拉电阻,将会违反时序要求。

VDD 表示供电电压;VOLMAX 表示最大逻辑低电平(典型值为 0.4V);ISinkMax 表示最大灌电流(典型值为 3mA);Cb 表示总线电容,取决于 PCB 走线的长度和宽度,与连接至总线的设备的电容。

计算示例:

总线

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分