一个i2c主设备可以支持多少个i2c从设备?


17

i2c主设备可以驱动的i2c从设备的最大数量是多少?有哪些物理限制因素?


1
您有一个7位地址。这意味着您可以寻址多达127个从站。
Botnic

谢谢。是否存在诸如电流驱动,电容之类的物理限制因素,或诸如此类的因素会阻止从机数量达到127个?
user768421

1
@Botnic完全忽略了i2c交换机,集线器,缓冲区,转发器以及任何允许您扩展总线的i2c设备。
路人2015年

Answers:


22

软件限制因素是用于从站的地址大小:7位或10位,分别支持127和1023个设备。从物理上讲,有两个限制。首先,总线的物理尺寸,因为总线仅用于短期运行(IC间部分)。如果总线太大,则需要处理电容性负载和传播延迟效应。其次,某些设备不能支持全部I2C地址。例如,MPU6050陀螺仪仅支持两个地址,某些设备保留用于特殊目的的特定地址。


2
您有一个错误的错误。7位寻址支持128个地址(0到127)。10位寻址支持1024个地址(0至1023)。
CurtisHx

3
这并非一by而就。这是一个“ off by 6 error”,因为有7个保留地址,而不仅仅是一个。
kruemi

寻址方案由总线,主机或从机上的设备决定。某些设备具有预设的地址范围和保留的地址。其他设备,例如许多微控制器,没有保留地址,可以使用给定位方案中的任何地址。
vini_i 2015年

这些数字是正确的,但是需要警告。有一些保留地址,例如1111 XXX和0000 XXX。这意味着7位= 2 ^ 7-16 = 112个可用地址,10位是完整的2 ^ 101024。8位不是(应该不是问题)它通常包括R / W位在7位。nxp.com/docs/zh-CN/user-guide/UM10204.pdf
busfault,

@busfault我承认8位地址实际上并不是一回事。我已将其从答案中删除。大多数微控制器可以选择忽略部分或全部保留地址,并使用整个地址范围。我在回答中注意到这是特定于设备的。
vini_i

10

节点的最大数量受地址空间以及总线总电容400 pF的限制,这将实际通信距离限制在几米之内。

I²C了解更多


9

寻址限制了设备的数量-有些设备可以使用10位寻址(很少使用),这将地址数量限制为1024。有少数“保留”地址。

I2C(而不是“双线总线”或其他任何想称为类似总线的总线)应遵循NXP(飞利浦)标准,UM10204 I2C总线规范和用户手册。那应该是您的主要参考文件,而不是其他地方存在的各种解释和子集。

器件的最大数量将受到最弱输出的驱动能力(进而决定最小的上拉电阻),布线和输入电容以及工作模式/频率的影响。如果必须超过最大电容,请参见第7.2节,在最大允许总线电容以上操作

在此处输入图片说明


7

i2c总线主要受总线电容(以及速度)和可访问设备地址的限制。和物理板空间。

但是,当您考虑总线缓冲区,扩展器,转发器,集线器,多路复用器,交换机(或可以在多个总线之间切换的设备的任何其他名称)时,并没有真正的上限。这些可能会增加一些i2c开销,因为可以通过同一i2c总线进行访问。例如,PCA9548A是一个8位总线开关。

从理论上讲,该单芯片可以使i2c从站的数量(127 * 8)增加四倍。而且PCA9548A可以在一条总线上最多配置8个地址,因此8 * 8 * 127个设备。(可能关闭)。而且仅此设备而已。

坦白地说,如果调整电容,则没有理论极限。


5

I2C指定2个地址长度(7位和10位),这在理论上分别给出128和1024个不同的地址最大值。

但是,有一些保留地址,例如0x00(常规调用)。这进一步限制了地址空间。

如果要构建直接控制I2C设备的系统,则可以使用保留的地址供自己使用,但系统将不再符合I2C标准。

除了寻址之外,还有物理总线限制。总线上的每个设备都需要能够在一定时间范围内将总线拉低(取决于总线速度)。如果总线上有很多电容,则设备可能无法将SDA拉低足够快,并且上拉可能无法使SDA拉回足够快。

现在,只需一点驱动程序硬件即可解决硬件问题。我现在正在开发一个项目,该项目使用I2C与数十米的设备进行通信。主总线使用24v,每块板都有一个驱动器,可将其降压至3.3v。

在坚果壳中,可以克服I2C的物理限制。寻址可以克服,但前提是您可以直接控制设备。


自从您从事非常长的i2c总线以来,已经快三年了。他们工作正常吗?
wallyk '18

1
@wallyk发布答案后不久,我离开了那家公司。我会说,如果硬件正确,则可以使I2C进行更长距离的通信。但是,还有其他一些针对长距离设计的通信协议,可能会比I2C更好。
CurtisHx

5

主机可以驱动的从机数量的主要限制通常是由电气因素引起的,例如总线电容,泄漏,驱动强度等。如果可以构造一个寄生电容为零且泄漏为零的从机,并且可以连接它们,如果电容走线为零,那么总线电容就不会成为一个因素,但实际上,这两种假设都不会成立。

另一方面,寻址彼此“了解”的设备并不是真正的问题。设计一种外围设备将是微不足道的,该外围设备将允许使用一个读和一个写地址连接数十亿个芯片。只需指定每个设备必须具有唯一的四字节ID,并且始终需要侦听写入地址,但必须退出前四个传输的数据字节与其ID不匹配的每个事务。进一步指定设备只有在听到的最后一个写入事务与它们的地址匹配时才可以响应读取的地址。

如果要增加使主机确定所有连接的从机的ID的能力,则可以为此保留一些特殊的ID范围。例如,可以说如果第一个ID字节是FF,那么接下来的四个字节将是一个掩码,后面的四个字节将是一个ID;如果设备指定的掩码部分与命令中指定的部分匹配,则设备应保持连接状态(并确认最后一个ID字节)。这将允许主机使用64个事务标识至少一个设备,并使用每个62个或更少的事务标识其他设备。也许不是最快的设备识别方法,但在数十亿个设备ID的搜索空间中也不错。


2

简短答案:这取决于

如果您拥有(通用)设备的7位地址最多104个设备(128个地址-保留地址(保留0x00-0x07和0xF0-0xFF))(有一定的限制)最多可寻址1024个设备(您可以将7位和10位设备混合使用,最多可以达到1136个设备)

现在有局限性:大多数简单设备只能配置为2到8个不同的地址。您可以通过自定义订购具有不同基址的设备来克服这一问题(但这通常意味着您订购的设备数量最少)。还有硬件限制(主要是总线电容),但这可以通过特殊的i2c驱动程序解决。

如果您想在更远的距离上连接许多设备,我建议还是使用现场总线!I2C用于在设备(例如电视机)内部进行通信。我自己使用RaspberyPi来使用I2C,RaspberyPi的外部电缆长达50厘米(即使使用T型截面,您也不应在总线系统中使用)。它出奇地好。


0

连接到总线的设备数量仅受总允许总线电容400 pF的限制。由于大多数具有I²C接口的IC都使用低功耗,高阻抗CMOS技术,因此在达到最大电容之前,可以将许多IC连接到I²C总线


1
这不能完全回答OP的问题。即使使用近似值,也要尝试回答问题的所有方面。指定和/或保留指向您的信息源的链接。
Sparky256 '16

0

使用添加的多路复用器芯片(例如TCA9544A)或缓冲器(例如PCA9515B),您可以克服所有限制 -总线电容和寻址。

您可以将3个具有相同地址的设备放在一个多路复用器后面,然后仅选择其中一个,与之通信,然后再选择另一个。当然,软件会变得更加复杂。

如果布线较长,可以在中间放置一个缓冲器,以克服电容限制。


不,您仍然会受到限制:4通道/多路复用器,每个通道有4个子通道,然后您有子子通道,子子子通道等等。每个通道切换器有3条地址线:是4 ^(2 ^ 3)= 65536个通道。每个通道有2 ^ 8-7-8 + 2 ^ 10 = 1265个设备/通道(当您还使用缓冲区时)(-7表示保留地址,-8表示多路复用地址)。1265 * 65536 = 82903040最多设备数。
12431234123412341234123年

编辑:对不起,有一个错误:它是2 ^ 7-7-8 + 2 ^ 10 = 1137设备/通道=> 1137 * 65536 = 74514432设备。但是,当您使用IO-Expander来打开和关闭某些缓冲区时,可能还有更多的可能性(这是实际使用中的一种形式,但是在理论上是可行的)。
12431234123412341234123年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.