为什么需要多个 I²C 端口?

电器工程 i2c
2022-01-24 13:43:20

理论上,I²C 协议允许通过 7 位寻址将多达 127 个设备连接到主设备。这是一个很大的数字,那么为什么任何低成本的微控制器(例如这个 PIC24)会有多个 I²C 端口?为什么需要它?

4个回答

传感器集线器布置

在这种情况下,有两条 I²C 总线。我们称它们为本地总线主总线本地总线的目的是将一堆传感器连接到微控制器 (μC)。μC 的目的是轮询传感器,从它们汇总信息,并检测某些事件。扮演这种角色的 μC 称为传感器集线器传感器集线器不负责高阶功能;为此有一个强大的主处理器。主总线将传感器集线器连接到主处理器。因此,传感器集线器 μC 是本地 I²C 总线上的主设备和 I²C 主总线上的从设备。

SPI 和 I²C

原始帖子中链接的 PIC 不共享 SPI 和 I²C 之间的引脚。但是,还有其他 PIC 对硬件 SPI 和 I²C 使用相同的引脚,因为它们都是使用相同的 MSSP 外设实现的。如果 PIC 有两个独立的 MSSP 外设,那么一个可用于硬件 SPI,而另一个用于硬件 I²C。

需要多个总线的一个非常常见的原因是设备以不同的速度运行。最初,I²C 以最高 100 kHz 运行。后来,速度增加到最大 400 kHz,再后来,增加到 1 MHz 及以上。

问题是,由于每个设备的地址都嵌入在 I²C 协议中,因此如果您在同一总线上有不同额定速度的设备,例如 100 kHz 和 400 kHz,您总是必须以最低的速度运行总线到同一总线上的所有设备(在这种情况下为 100 kHz)。

如果你以更高的速度(400 kHz)运行总线,显然低速设备将无法正常工作,甚至可能将高速设备的地址解释为自己的地址,导致 400 kHz 设备故障为好吧。但是,即使您最初以 100 kHz 运行总线,然后在寻址高速芯片后尝试将总线加速到 400 kHz,低速芯片也有可能(尽管可能不太可能)解释以下之一高速数据包错误地作为它的地址,从而扰乱了总线上的通信。在任何一种情况下,在与 400 kHz 设备交换结束时,100 kHz 设备都可能处于未知状态。

因此,如果您的设备以不同的速度运行并且您有多个 I²C 端口并且您有备用引脚来实现这种奢华,那么它是最有效的,例如有一个 I²C 用于 100 kHz 设备,另一个用于 400 kHz 设备,以及另一个对于 1 MHz 设备,根据您的需要。

这不是 SPI 的问题,因为每个设备都通过单独的片选线在硬件中启用(寻址)。因此,时钟速度可以与所选芯片的速度(10 MHz、20 MHz 等)相匹配,而不会对同一总线上的其他芯片产生任何影响,因为它们未启用。

它还可以让您支持两个具有相同地址的设备。是的,大多数设备都允许您使用带子选择它们地址的底部两位。最近我不得不支持 4 个设备,每个设备都只允许你用一个电阻设置它们地址的 LSB。拥有两个端口对我来说意味着没有额外的费用。

也许我想让一个成为一堆设备的主控,而另一个作为从属端口,所以我的主控不必等待抢总线给我一个命令,同时我轮询第 10,000 个温度传感器时间。

在这个线程中似乎还有很多其他好的回应,只是加上我的 2 美分。

速度。

如果您需要同时访问两个 I2C 设备,您可能会遇到严重的冲突。或者,一个必须等​​待另一个。