我一直在研究将传感器连接到Arduino的不同方法,而i2c似乎是一种流行的方法。我读到它仅在短距离(最多几米),数据速率为400或100kbps时才可靠。我很难理解为什么与通过千兆位以太网等铜缆进行的其他数据传输相比,该协议的限制如此之低。我已经看到了电容,电压降和电阻等原因,但是基于cat5 / 6的以太网是否也遇到所有相同的问题?基本上,我想知道为什么在比较这些不同的方法时为何在某些铜线上施加一些电压脉冲并不能产生更一致的结果(带宽,距离)。
我一直在研究将传感器连接到Arduino的不同方法,而i2c似乎是一种流行的方法。我读到它仅在短距离(最多几米),数据速率为400或100kbps时才可靠。我很难理解为什么与通过千兆位以太网等铜缆进行的其他数据传输相比,该协议的限制如此之低。我已经看到了电容,电压降和电阻等原因,但是基于cat5 / 6的以太网是否也遇到所有相同的问题?基本上,我想知道为什么在比较这些不同的方法时为何在某些铜线上施加一些电压脉冲并不能产生更一致的结果(带宽,距离)。
Answers:
香农定理设定了电缆上信息带宽的极限。这是有关此的更多信息:https : //www.gaussianwaves.com/2008/04/channel-capacity/
tl; dr版本:Shannon-Hartley方程:
I2C显然不在电缆的Shannon限制附近。相反,它是一种轻量级协议,具有使用集电极开路总线的故意慢速(100/400 kbit / s)的协议,可轻松实现具有适度I / O和控制需求的小型设备网络。I2C指定的慢速运行可避免大多数信号完整性问题。
有更快的I2C变体使用1 Mbit和3.2 Mbit / s的速率。与正常的I2C相比,这些要求更多地关注布局和端接,当然时序更严格,要求更高。
沿着食物链向Shannon方向发展,Gbit以太网使用多种技术来实现其吞吐量:
这些技术需要大量的硅,包括用于与电缆通信的快速,大型混合信号ADC / DAC模块以及用于管理电缆的相当繁重的信号处理。除此之外,还要复杂得多的软件堆栈来驱动它。对于低端微控制器(其中有些选择使用外部PHY),这使得以太网作为片上模块的功能有所增加。然而,它的成熟度使其处于较大的片上系统的范围之内。
无论如何,我们离香农极限有多近?此处更多:https://pdfs.semanticscholar.org/482f/5afbf88a06d192f7cb052f543625c4b66290.pdf
传输不仅仅是铜缆。您是否看到过以太网背后的硬件?可能不是,因为很难找到任何基层电路来进行实际工作,因为胆量总是隐藏在IC中。我找到的最接近的是以太网所需的磁性,这显然不是可选的。这只是以太网硬件实际发生的情况的提示。
这样考虑:空气是一种媒介。为什么狗彼此交谈时可以传达的信息类型比人类彼此交谈时所传递的信息类型少得多?为什么通过空气发送一些压力波不能在这两种动物之间的通讯中产生更一致的结果?
I2C(和许多其他协议)的一些限制因素是:
所有这些都使事情变得简单。对于高数据速率或长距离传输而言不是很好。
在我不知道的硬件中可能还存在其他一些伏都教。
I2C是开漏总线,它被主动拉低,但上拉(至少对于正常的100kHz,400kHz变型而言)是无源电阻。
因此,基于上拉电阻器对总线电容充电的速度,事物运行的速度受到限制,有时可以通过降低上拉值来提高速度,但这意味着节点需要下沉增大电流以使逻辑低电平...。或者您也可以采用另一种方法,降低总线速度,以允许使用较高值的上拉电阻来降低功耗(例如,参见PM总线)。
触发示波器并提示I2C的下降沿比上升的沿陡峭得多,这是有启发性的。
对于预期的用途,基本上在一块板(或至多一块机架)中的温度传感器和小型配置设备实际上在实现复杂性,低引脚数和简单硬件之间达到了最佳位置。设计意图不是“快速,长距离数据链路”,对于我发现SPI通常更易于处理的所有方面,I2C确实非常适合其预期的用例。
一旦距离增加,那么其他的东西就更适合了,但是在具有适度的eeprom /温度/设备配置接口的板上,它的表现相当不错(值得一提的是,PHY管理接口看上去很像I2C)。
结果不同是因为每种技术的驱动器电路都不同。
100kHz I2C通常使用上拉电阻将信号置于高电平,而漏极开路驱动器将信号置于低电平。
上拉电阻通常为几千欧姆。电缆越长,其电容越大。线路从0过渡到1所需的时间将与线路上的总电容和上拉电阻值成正比。在大约T = 2 * R * C范围内的某个位置大约是正确的。
例如,如果您有一条10英尺长的电缆,每英尺的电容为20pF,并且使用了10K上拉电阻,则从低到高的过渡需要T = 2 * 20pF / ft * 10 ft * 10K = 3.6us。
在这种情况下,您显然不能在宽度小于3.6us的零位之后跟随任何一位,因此您的传输速率将被限制为277kHz。
在实际的I2C系统中,I2C规范进一步要求围绕数据和时钟转换建立和保持时间。那些时间可能是数百纳秒或微秒。故意使时序变慢,以便可以廉价地实现这些设备(便士),并且仅消耗很少的功率(毫瓦)。
另一方面,尽管电缆有电容,但以太网可以运行得更快,因为它不使用上拉电阻。它主动将高电平或低电平驱动到电缆中。该驱动器具有低阻抗,可以非常快速地为任何线路电容充电。当然,这都是有代价的。以太网通常消耗数百毫瓦的功率,并且每个端口的实施成本至少为几美元。
当然,可以将类似于I2C的设置运行得更快一些,只需将10K上拉电阻更改为100欧姆,现在您将10英尺电缆的上升时间从3.6us降至36ns。这样一来,您可能可以在10MHz左右的频率下运行而不会出现太多问题(除了常规I2C芯片不能这么快地通话的事实)。