分享

I2C总线:硬件实现细节

 Ycp2016 2019-02-25

了解和设计I2C总线所需硬件的基本信息。

支持信息

·I2C总线简介

·I2C总线固件实现细节

·何时使用I2C缓冲区

有时一点复杂是件好事

I2C协议值得注意的是一些不太直接的特性:你不只要将几个IC引脚连接在一起,然后让低级硬件在读取或写入适当的缓冲区时接管,或者更多或者SPI(串行外设接口)或UART(通用异步接收器/发送器)的情况较少。但I2C的复杂性并非没有目的; 本文的其余部分将帮助您了解有些细微差别的硬件实现细节,使I2C成为多个独立IC之间串行通信的通用可靠选项。

漏极开路

I2C的一个定义特性是总线上的每个器件都必须通过漏极开路(或开路集电极)输出驱动器连接时钟信号(缩写为SCL)和数据信号(缩写为SDA)。让我们来看看这实际意味着什么。首先考虑典型的CMOS(反相)输出级:

I2C总线:硬件实现细节

如果输入为逻辑高,则NMOS晶体管导通,PMOS晶体管截止。因此输出具有低阻抗接地连接。如果输入为逻辑低电平,则情况相反,输出与V DD的低阻抗连接。这被称为推挽输出级,尽管这个名称并不特别有用,因为它没有强调控制输出的连接的低阻抗特性。通常,您不能直接连接两个推挽输出,因为如果一个逻辑高电平而另一个逻辑低电平,电流将从V DD自由地流到地。

I2C总线:硬件实现细节

现在考虑开漏输出配置:

I2C总线:硬件实现细节

PMOS晶体管已被IC外部的电阻取代。如果输入为逻辑高,则NMOS晶体管提供低阻抗接地连接。但如果输入为逻辑低电平,则NMOS看起来像开路,这意味着输出通过外部电阻上拉至V DD。这种安排导致两个重要的区别。首先,当输出为逻辑低电平时会发生非平凡功耗,因为电流通过NMOS晶体管的沟道流过电阻器到地(在推挽式配置中,此电流被关闭的高阻抗阻断 - 状态PMOS晶体管)。其次,输出信号在逻辑高时表现不同,因为它连接到V DD通过更高的电阻(通常至少1kΩ)。此功能可以直接连接两个(或更多)开漏驱动器:即使一个逻辑低电平而另一个逻辑高电平,上拉电阻确保电流不会从V DD自由流到地。

I2C总线:硬件实现细节

以下是这种开漏总线配置的三个重要含义:

·信号始终默认为逻辑高电平。例如,如果I2C主设备尝试与已失效的从设备通信,则数据信号永远不会进入未定义状态。如果从机没有驱动信号,它将被读为逻辑高电平。同样,如果主设备在传输过程中断电,SCL和SDA将返回逻辑高电平。其他设备可以通过观察SCL和SDA在一定时间内逻辑高电平来确定总线可用于新传输。

·即使另一个设备试图将它们驱动为高电平,总线上的任何设备都可以安全地将信号驱动为逻辑低电平。这是I2C“时钟同步”或“时钟延长”功能的基础:主器件产生串行时钟,但如果需要,从器件可以将SCL保持为低电平,从而降低时钟频率。

·具有不同电源电压的器件可以共存于同一总线上,只要较低电压器件不会被较高电压损坏即可。例如,如果SCL和SDA上拉至5 V,3.3 V器件可以与5 V器件通信 - 开漏配置导致逻辑高电压达到5 V,即使3.3 V器件无法驱动 5 V来自典型的推挽输出级。

如果你有R,你就有RC

开漏输出驱动器绝不是数字IC中的标准配置,并且有充分的理由:它具有一些显着的缺点。当我们回想起电容无处不在时,其中一个缺点就变得明显了。电压变化受到与特定节点相关的电容充电或放电所需的时间的限制。麻烦的是,SCL和SDA上的上拉电阻限制了充电电流量 - 换句话说,我们在RC时间常数中有更多的R来控制从逻辑低到逻辑高的转换。

I2C总线:硬件实现细节

I2C总线:硬件实现细节

如这些图所示,从低到高的转换将明显慢于从高到低的转换,从而产生经典的I2C“锯齿”波形:

I2C总线:硬件实现细节

这两个示波器捕获显示I2C时钟信号从低到高和从高到低的转换,具有1kΩ上拉电阻和最小电容(总线上只有两个器件,PCB走线很短)。

I2C总线:硬件实现细节

如何调整上拉电阻的大小

此时,应该明显的是,上拉电阻对特定I2C总线的最大时钟频率施加了限制。实际上,电阻和电容都是这里的因素,尽管我们对电容几乎没有控制,因为它主要取决于总线上有多少器件以及这些器件之间互连的性质。这导致了持久的问题,权衡的是速度与功耗“我应该用什么样的价值上拉电阻的?”:低阻力降低了RC时间常数,但增加的电流从V流入量DD到当SCL或SDA为逻辑低电平时,接地(通过上拉电阻)。

该官方I2C规范(第9页)指出,直到它达到V的70%的电压不被认为是“逻辑高” VDD。您可能还记得RC时间常数告诉我们电压达到最终电压的约63%需要多长时间。因此,为简单起见,我们假设R×C告诉我们信号从接地电压附近上升到逻辑高电压需要多长时间。

现在我们如何找到电容?“简单”的方法是组装整个系统并进行测量; 至少,这可能比尝试执行计算每个电容源的精确计算更容易 - 正如德州仪器的应用笔记所表达的那样,“在电路的正常构造中,形成了难以想象的电容器数量。”如果测量方法不是一种选择(通常是这种情况),您可以通过查找总线上每个器件的引脚电容进行粗略估计(希望数据表不会让您失误),然后再添加3 pF每英寸PCB走线和每英尺同轴电缆30 pF(这些数字来自同一应用说明,第3页)。

假设我们有50 pF的总线电容,我们希望遵守I2C“标准模式”规范,该规范规定最大上升时间为1000 ns。

I2C总线:硬件实现细节

因此,您可以满足Rpull-up =20kΩ 的规格; 此值还可为您提供最低功耗。速度怎么样?假设您希望时钟高电平时间至少是上升时间的三倍。

I2C总线:硬件实现细节

如果167 kHz不够快,您可以降低电阻(以增加功耗为代价),直到达到所需的时钟速度。(实际上,“标准模式”将时钟速度限制为100 kHz,但您可以根据系统需要调整这些规格。)

这些是粗略的计算,但老实说,你不需要强调找到完美的阻力。这种通用方法可以帮助您确定合理的值,并且如果某些东西没有按照您想要的方式工作,您可以随时更换不同的电阻。

结论

如果本文已达到其目的,您现在已完全熟悉I2C硬件设计中涉及的重要细节。我们将在另一篇文章中介绍固件实现。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多