Понимание скорости передачи данных по медному проводу

11

Я исследовал различные способы подключения датчиков к Arduino, и i2c кажется популярным методом. Я читал, что он надежен только на коротких расстояниях (максимум несколько метров) со скоростью передачи данных 400 или 100 кбит / с. Мне трудно понять, почему ограничения этого протокола так низки по сравнению с другими передачами данных по меди, такими как гигабитный Ethernet. Я видел такие причины, как емкость, падение напряжения и приведенное сопротивление, но разве Ethernet через cat5 / 6 не подвержен всем тем же проблемам? По сути, я хочу знать, почему пульсация некоторого напряжения по медному проводу не дает более последовательных результатов (пропускная способность, расстояние) при сравнении этих различных методологий.

user3629081
источник
Существует множество основных протоколов с установленными ограничениями, которые часто игнорируются. Ethernet надежен только до 30 футов без повторителя. USB меньше 10 футов. Это не значит, что люди не выходят за пределы. Это решения по реализации, основанные на том, насколько быстрыми / надежными вам нужны данные, и можете ли вы позволить себе накладные расходы на проверку crc.
mreff555
Я просто хочу отметить, что, хотя I2C не предназначен для использования таким образом, определенно должно быть возможно использовать его на расстоянии более 100 метров. (Он имеет такое же теоретическое макс. Расстояние, как и Ethernet). Тем не менее, вы либо будете иметь очень низкую скорость передачи данных, либо ваши подтягивающие токи будут смехотворными.
Opifex
@Opifex Смехотворная скорость!
DKNguyen
1
Это не ответ, и, возможно, я утверждаю очевидное, но ограничения в I2C (или любом другом протоколе) в основном связаны с материалом провода и протоколом. Суть вашего вопроса, кажется, заключается в том, что «если метод X заставляет меня получить A по меди, то не должны ли Y и Z также получить меня A?» что по своей сути не верно.
dwizum
6
Под 30 футами вы имеете в виду 328 футов / 100 м @ mreff555? Это спецификация для витой пары Ethernet, более старая коаксиальная сеть Ethernet была еще длиннее (200 м для 10base2, 500 м для 10base5).
Марк Бут

Ответы:

14

Теорема Шеннона устанавливает максимальный предел пропускной способности информации по кабелю. Вот еще немного информации об этом: https://www.gaussianwaves.com/2008/04/channel-capacity/

ТЛ; д-р версия: уравнение Шеннона-Хартли:

  • Сзнак равноВLограмм2(1+SN)(1)

Где В - пропускная способность в Гц, SN - отношение сигнал / шум.

Очевидно, что I2C не подходит близко к пределу Шеннона для кабеля. Вместо этого это упрощенный протокол с преднамеренно медленной синхронизацией (100/400 кбит / с), использующей шину с открытым коллектором, чтобы упростить его реализацию для сети небольших устройств со скромными потребностями ввода-вывода и управления. Медленная работа, указанная I2C, позволяет избежать большинства проблем с целостностью сигнала.

Существуют более быстрые варианты I2C, которые используют скорости 1 Мбит и 3,2 Мбит / с. Они требуют большего внимания к компоновке и завершению, чем обычный I2C, и, конечно, имеют более жесткие и требовательные сроки.

Продвигаясь по пищевой цепочке по Шеннону, Gbit Ethernet использует несколько методов для достижения своей пропускной способности:

  • Дифференциальная сигнализация
  • Несколько пар (4)
  • Многоуровневая сигнализация, называемая PAM-5
  • Preemphasis / Deemphasis
  • Адаптивное выравнивание

Эти методы требуют много кремния, включая быстрый, большой блок АЦП / ЦАП со смешанными сигналами для связи с кабелем и некоторую довольно сложную обработку сигналов для управления им. Добавьте к этому гораздо более сложный программный стек, чтобы управлять им. Это делает Ethernet как встроенный в чип блок немного более низким для микроконтроллера низкого уровня (некоторые из них предпочитают использовать внешний PHY). Однако его зрелость делает его доступным для крупных систем на кристалле.

Насколько мы приближаемся к пределу Шеннона? Подробнее здесь: https://pdfs.semanticscholar.org/482f/5afbf88a06d192f7cb052f543625c4b66290.pdf

hacktastical
источник
Ха, есть вуду: пре-акцент и де-акцент. Поэтому Ethernet не просто посылает квадратные импульсы или даже синусоиды по линии и молится о том, чтобы к тому времени, когда он достигнет пункта назначения, он не будет сильно искажен. Он формирует аналоговый сигнал и отправляет его по линии.
Нгуен
3
@DKNguyen Настоящий вуду для 100-мегабитного или более быстрого Ethernet находится в приемнике. Используются алгоритмы адаптивного выравнивания, в наши дни часто реализуемые в цифровой форме; полученный сигнал поступает на АЦП, за которым следует некоторое аппаратное обеспечение DSP (все внутри вашего PHY-устройства за $ 0,50). Технология более позднего высокоскоростного протокола снова значительно усложняется.
scary_jeff
Спасибо @scary_jeff об адаптивном уравнении. напоминание. Добавил это в мой ответ.
hacktastical
6

Передача - это больше, чем просто медный кабель. Вы видели аппаратное обеспечение Ethernet? Вероятно, нет, потому что чрезвычайно сложно найти какие-либо схемы базового уровня для того, что на самом деле происходит, поскольку кишки всегда скрыты в микросхеме. Самым близким, что я когда-либо нашел, является магнетизм, необходимый для Ethernet, который, очевидно, не является обязательным. Это просто намек на то, что происходит физически с оборудованием Ethernet.

Подумайте об этом так: воздух - это среда. Почему тип информации, которая может передаваться, когда собаки разговаривают друг с другом гораздо меньше, чем когда люди разговаривают друг с другом? Почему передача некоторых волн давления через воздух не дает более последовательных результатов в общении между этими двумя типами животных?

Вот лишь некоторые из ограничивающих факторов для I2C (и многих других протоколов):

  1. привод с открытым коллектором
  2. нет соответствия импеданса
  3. нет сбалансированной передачи
  4. нет проверки ошибок
  5. простая схема кодирования
  6. относительно высокие уровни напряжения (если шаг напряжения не должен быть таким большим, вы можете передавать быстрее, потому что ваши dV / dT не должны быть такими высокими для более высоких скоростей)
  7. нет изоляции
  8. униполярные напряжения (Ethernet передает при +/- 2,5 В, что, вероятно, помогает как-то)
  9. Передача ведомого устройства синхронизируется ведущим, поэтому в основном часы должны совершать круговую передачу быстрее, чем сигнал данных

Все это хорошо для упрощения вещей. Не очень хорошо для высоких скоростей передачи данных или передачи на большие расстояния.

Там также, вероятно, некоторые другие вуду происходит в аппаратных средствах, о которых я не знаю.

DKNguyen
источник
6

Несколько простых правил: нет такой вещи, как земля. Все провода антенны. Все провода являются линиями электропередачи. Там всегда шум.

Если провод короткий по сравнению со временем нарастания сигнала, вы можете игнорировать несоответствия и отражения импеданса линии передачи (в отличие от Ethernet, который требует сложных окончаний и формирования импульсов). Если провод длинный, то индуцированные напряжения на проводе и дифференциале заземления с большей вероятностью сделают уровни цифрового сигнала на дальнем конце неопределенными или неправильными. Но Ethernet использует дифференциальную сигнализацию по витой паре, значительно уменьшая проблемы с наведенным шумом и опорным заземлением. Приемник Ethernet также использует более чувствительные аналоговые входы, а не типичные цифровые входы, что позволяет увеличить потери в линии. Добавьте к этому Ethernet-кодирование и исправление ошибок, чтобы преодолеть статистику шума, и вы сможете более надежно идти быстрее и дальше.

hotpaw2
источник
5

I2C - это шина с открытым стоком , она активно понижается, но повышающие (по крайней мере, для обычных вариантов 100 кГц, 400 кГц) являются пассивными резисторами.

Из-за этого существует ограничение на то, как быстро устройство может работать, в зависимости от того, насколько быстро подтягивающие резисторы могут заряжать емкость шины, иногда вы можете получить еще большую скорость, снизив значения подтягивания, но это означает, что узлы должны затухать. больше тока, чтобы получить низкую логику .... Или вы можете пойти другим путем, замедляя шину, чтобы разрешить использование повышающих резисторов с более высоким значением для более низкого рассеивания мощности (см., например, шину PM).

Поучительно запустить прицел и заметить, что передний фронт на I2C НАМНОГО острее, чем нарастающий.

Для предполагаемого использования, в основном датчиков температуры и небольших устройств конфигурации на одной плате (или не более одного шасси), это оказывается в значительной степени удачным выбором между сложностью реализации, низким количеством выводов и простым аппаратным обеспечением. Целью проекта было не «Быстрые каналы передачи данных на большие расстояния», и, несмотря на то, что я считаю, что с SPI в целом легче работать, I2C очень хорошо подходит для предполагаемого варианта использования.

Как только расстояния растут, что-то еще становится более подходящим, но на плате со скромными интерфейсами конфигурации eeprom / температура / устройство это работает достаточно хорошо (стоит отметить, что интерфейс управления PHY выглядит ОЧЕНЬ похоже на I2C).

Дэн Миллс
источник
2

Разные результаты объясняются тем, что схема драйвера отличается для каждой технологии.

I2C 100 кГц обычно использует подтягивающий резистор, чтобы подавать сигнал на высокий уровень, и драйверы с открытым стоком, чтобы подавать сигнал на низкий уровень.

Подтягивающие резисторы обычно составляют несколько кОм. Чем длиннее кабель, тем больше его емкость. Время, необходимое для перехода линии от 0 до 1, будет пропорционально общей емкости линии и значению резистора. Где-то в диапазоне около T = 2 * R * C было бы примерно правильно.

Например, если у вас был кабель длиной 10 футов с емкостью 20 пФ на фут емкости, и вы использовали нагрузочный резистор 10 кОм, то для перехода с низкого уровня на высокий потребовалось бы T = 2 * 20 пФ / фут * 10 фут * 10 кОм = 3,6us.

В этом случае вы, очевидно, не можете иметь один бит после нулевого бита шириной менее 3,6 с, поэтому ваша скорость передачи будет ограничена 277 кГц.

В реальной системе I2C спецификация I2C дополнительно требует установки и удержания времени вокруг передачи данных и тактов. Те времена - или сотни наносекунд или микросекунд. Время было специально сделано очень медленным, чтобы устройства могли быть реализованы дешево (копейки) и потреблять очень мало энергии (милливатты).

Ethernet, с другой стороны, может работать быстрее, несмотря на емкость кабеля, потому что он не использует нагрузочный резистор. Он активно вбивает либо высоко, либо низко в кабель. Драйвер имеет низкий импеданс и может очень быстро зарядить любую емкость линии. Конечно, все это имеет цену. Ethernet, как правило, потребляет сотни мегаватт энергии и стоит не менее нескольких долларов на каждый порт для реализации.

Может, установка, аналогичная I2C, будет работать быстрее, конечно, просто измените нагрузку 10 кОм на 100 Ом, и теперь ваше время нарастания до 10 футов кабеля снизится с 3,6 до 36 нс. Тогда вы, вероятно, сможете работать на частоте около 10 МГц без особых проблем (за исключением того факта, что обычные микросхемы I2C не могут говорить так быстро).

user4574
источник