了解铜线上的数据传输速率

电器工程 金属丝 传输线
2022-01-10 20:07:02

我一直在研究将传感器连接到 Arduino 的不同方法,而 i2c 似乎是一种流行的方法。我读过它仅在短距离(最多几米)内可靠,数据速率为 400 或 100kbps。我很难理解为什么该协议的限制与其他铜缆数据传输(如千兆以太网)相比如此之低。我已经看到了诸如电容、电压降和电阻之类的原因,但是 Cat5/6 上的以太网是否会遇到所有这些相同的问题?基本上,我想知道为什么在比较这些不同的方法时,向一些铜线施加一些电压不会产生更一致的结果(带宽、距离)。

4个回答

香农定理设定了电缆信息带宽的极限。以下是有关此的更多信息:https ://www.gaussianwaves.com/2008/04/channel-capacity/

tl; 博士版:香农-哈特利方程:

  • \$ C = B \; log_2 \left(1 + \frac{S}{N}\right) \$

其中\$B\$是以 Hz 为单位的带宽,\$\frac{S}{N}\$是信噪比。

I2C 显然并不接近电缆的香农极限。相反,它是一种轻量级协议,具有故意缓慢的时序 (100/400 kbit/s),使用集电极开路总线,可以轻松实现具有适度 I/O 和控制需求的小型设备网络。I2C 规定的慢速操作避免了大多数信号完整性问题。

有更快的 I2C 变体使用 1 Mbit 和 3.2 Mbit/s 速率。与普通 I2C 相比,这些需要更多地关注布局和端接,当然还有更严格、更苛刻的时序。

在香农的食物链中向上移动,千兆以太网使用多种技术来实现其吞吐量:

  • 差分信号
  • 多对 (4)
  • 多级信令,称为 PAM-5
  • 预加重/去加重
  • 自适应均衡

这些技术需要大量的芯片,包括一个快速、大型混合信号 ADC/DAC 模块来与电缆通信,以及一些相当繁重的信号处理来管理它。除此之外,还有更复杂的软件堆栈来驱动它。这使得以太网作为一个片上模块对于低端微控制器(其中一些选择使用外部 PHY 代替)来说有点多。然而,它的成熟度使它在更大的片上系统的范围内很好。

无论如何,我们离香农极限有多近?更多信息:https ://pdfs.semanticscholar.org/482f/5afbf88a06d192f7cb052f543625c4b66290.pdf

传输不仅仅是铜缆。你见过以太网背后的硬件吗?可能不会,因为很难找到实际发生的任何基本电路,因为胆量总是隐藏在 IC 中。我发现的最接近的是以太网所需的磁性元件,这显然不是可选的。这只是以太网硬件物理上发生的事情的一个暗示。

这样想:空气是一种媒介。为什么狗相互交谈时可以传达的信息类型比人类相互交谈时要少得多?为什么通过空气发送一些压力波不会在这两种动物之间的交流中产生更一致的结果?

I2C(和许多其他协议)的一些限制因素是:

  1. 集电极开路驱动
  2. 没有阻抗匹配
  3. 没有平衡传输
  4. 没有错误检查
  5. 简单的编码方案
  6. 相对较高的电压电平(如果您的电压步长不必很大,您可以更快地传输,因为您的 dV/dT 不必为更高的速度而很高)
  7. 没有隔离
  8. 单极电压(以太网以 +/- 2.5V 传输,这可能会有所帮助)
  9. 从设备的传输由主设备提供时钟,因此基本上时钟必须比数据信号更快地进行往返

所有这些都有助于使事情变得简单。对于高数据速率或长距离传输来说不是很好。

硬件中可能还有其他一些我不知道的巫术。

一些简单的经验法则:没有地面这样的东西。所有的电线都是天线。所有的电线都是传输线。总是有噪音。

如果与信号上升时间相比,电线较短,那么您可以忽略传输线阻抗不匹配和反射(与以太网不同,以太网需要复杂的端接和脉冲整形)。如果电线很长,那么电线和接地差分上的感应电压更有可能使远端的数字信号电平不确定或不正确。但以太网使用双绞线差分信号,大大降低了感应噪声和接地参考问题。以太网接收器还使用更敏感的模拟输入而不是典型的数字输入,从而允许更多的线路损耗。添加以太网的编码和纠错以克服噪声统计,您可以更可靠地走得更快更远。

I2C 是开漏总线,它被主动拉低,但上拉(至少对于正常的 100kHz、400kHz 变体)是无源电阻。

因此,根据上拉电阻器对总线电容充电的速度,事情的工作速度会受到限制,有时您可以通过降低上拉值来获得更快的速度,但这意味着节点需要下沉更多电流以获得逻辑低电平.... 或者您可以采用另一种方式,减慢总线速度以允许使用更高值的上拉电阻以降低功耗(例如,参见 PM 总线)。

启动示波器并注意 I2C 上的下降沿比上升沿要锐利得多。

对于预期用途,基本上是单个板(或最多单个机箱)内的温度传感器和小型配置设备,结果证明这几乎达到了实现复杂性、低引脚数和简单硬件之间的最佳平衡点。设计意图不是“快速、长距离的数据链路”,尽管我发现 SPI 通常更容易处理,但 I2C 非常适合其预期的用例。

一旦距离增加,那么其他东西就会变得更合适,但是在具有适度 eeprom/温度/设备配置接口的板上,它做得相当好(值得注意的是,PHY 管理接口看起来很像 I2C)。