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


19

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

Answers:


23

传感器集线器布置

在这种情况下,有两个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。


21

需要多个总线的一个非常普遍的原因是设备运行速度不同。最初,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,等等)匹配,而不会影响同一总线上的其他芯片,因为它们没有启用。


19

同样,它可以让您支持两个具有相同地址的设备。是的,大多数设备都可以让您用带子选择其地址的后两位。最近,我不得不支持4个设备,每个设备只允许您使用一个电阻设置其地址的LSB。有两个端口对我来说不需要额外的费用。

也许我希望一个主机成为一堆设备的主机,而另一个主机作为从机端口,所以我的主机不必等待总线抢救就可以向我发送命令,同时我还可以对温度传感器进行第10,000个轮询时间。

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


9

速度。

如果您需要同时访问两个I2C设备,则可能会有重大冲突。或者,一个将不得不等待另一个。


9

其次,I²C可用于获得更多带宽(您可以同时接收或发送两个字节)。

如果您有一些ADC可以连续工作,那么一个I²C一直很忙。

切换地址也需要一些时间,因此在某些情况下-您可以将两个端口用于两个设备,并避免地址更改以节省时间。


0

其他人提到这样做的原因很多,我将添加一个:

您有一堆5V I2C设备和一堆3V3 I2C设备。

例如,我有一个3.3V微型电池,它有两个I2C端口,一个5V耐压,另一个仅3V3。


出于好奇,这是哪个微观角度?
尼克·阿列克谢耶夫

1
LPC4330,摘录自手册:“漏极开路5 V数字I / O焊盘,与I2C总线Fast Mode Plus规格兼容。该焊盘需要外部上拉电路以提供输出功能。当电源关闭时,连接到I2C总线的引脚处于悬空状态,不会干扰I2C线路。”
peufeu
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.