Я исследовал различные способы подключения датчиков к Arduino, и i2c кажется популярным методом. Я читал, что он надежен только на коротких расстояниях (максимум несколько метров) со скоростью передачи данных 400 или 100 кбит / с. Мне трудно понять, почему ограничения этого протокола так низки по сравнению с другими передачами данных по меди, такими как гигабитный Ethernet. Я видел такие причины, как емкость, падение напряжения и приведенное сопротивление, но разве Ethernet через cat5 / 6 не подвержен всем тем же проблемам? По сути, я хочу знать, почему пульсация некоторого напряжения по медному проводу не дает более последовательных результатов (пропускная способность, расстояние) при сравнении этих различных методологий.
wire
transmission-line
user3629081
источник
источник
Ответы:
Теорема Шеннона устанавливает максимальный предел пропускной способности информации по кабелю. Вот еще немного информации об этом: https://www.gaussianwaves.com/2008/04/channel-capacity/
ТЛ; д-р версия: уравнение Шеннона-Хартли:
ГдеВ - пропускная способность в Гц, SN - отношение сигнал / шум.
Очевидно, что I2C не подходит близко к пределу Шеннона для кабеля. Вместо этого это упрощенный протокол с преднамеренно медленной синхронизацией (100/400 кбит / с), использующей шину с открытым коллектором, чтобы упростить его реализацию для сети небольших устройств со скромными потребностями ввода-вывода и управления. Медленная работа, указанная I2C, позволяет избежать большинства проблем с целостностью сигнала.
Существуют более быстрые варианты I2C, которые используют скорости 1 Мбит и 3,2 Мбит / с. Они требуют большего внимания к компоновке и завершению, чем обычный I2C, и, конечно, имеют более жесткие и требовательные сроки.
Продвигаясь по пищевой цепочке по Шеннону, Gbit Ethernet использует несколько методов для достижения своей пропускной способности:
Эти методы требуют много кремния, включая быстрый, большой блок АЦП / ЦАП со смешанными сигналами для связи с кабелем и некоторую довольно сложную обработку сигналов для управления им. Добавьте к этому гораздо более сложный программный стек, чтобы управлять им. Это делает Ethernet как встроенный в чип блок немного более низким для микроконтроллера низкого уровня (некоторые из них предпочитают использовать внешний PHY). Однако его зрелость делает его доступным для крупных систем на кристалле.
Насколько мы приближаемся к пределу Шеннона? Подробнее здесь: https://pdfs.semanticscholar.org/482f/5afbf88a06d192f7cb052f543625c4b66290.pdf
источник
Передача - это больше, чем просто медный кабель. Вы видели аппаратное обеспечение Ethernet? Вероятно, нет, потому что чрезвычайно сложно найти какие-либо схемы базового уровня для того, что на самом деле происходит, поскольку кишки всегда скрыты в микросхеме. Самым близким, что я когда-либо нашел, является магнетизм, необходимый для Ethernet, который, очевидно, не является обязательным. Это просто намек на то, что происходит физически с оборудованием Ethernet.
Подумайте об этом так: воздух - это среда. Почему тип информации, которая может передаваться, когда собаки разговаривают друг с другом гораздо меньше, чем когда люди разговаривают друг с другом? Почему передача некоторых волн давления через воздух не дает более последовательных результатов в общении между этими двумя типами животных?
Вот лишь некоторые из ограничивающих факторов для I2C (и многих других протоколов):
Все это хорошо для упрощения вещей. Не очень хорошо для высоких скоростей передачи данных или передачи на большие расстояния.
Там также, вероятно, некоторые другие вуду происходит в аппаратных средствах, о которых я не знаю.
источник
Несколько простых правил: нет такой вещи, как земля. Все провода антенны. Все провода являются линиями электропередачи. Там всегда шум.
Если провод короткий по сравнению со временем нарастания сигнала, вы можете игнорировать несоответствия и отражения импеданса линии передачи (в отличие от Ethernet, который требует сложных окончаний и формирования импульсов). Если провод длинный, то индуцированные напряжения на проводе и дифференциале заземления с большей вероятностью сделают уровни цифрового сигнала на дальнем конце неопределенными или неправильными. Но Ethernet использует дифференциальную сигнализацию по витой паре, значительно уменьшая проблемы с наведенным шумом и опорным заземлением. Приемник Ethernet также использует более чувствительные аналоговые входы, а не типичные цифровые входы, что позволяет увеличить потери в линии. Добавьте к этому Ethernet-кодирование и исправление ошибок, чтобы преодолеть статистику шума, и вы сможете более надежно идти быстрее и дальше.
источник
I2C - это шина с открытым стоком , она активно понижается, но повышающие (по крайней мере, для обычных вариантов 100 кГц, 400 кГц) являются пассивными резисторами.
Из-за этого существует ограничение на то, как быстро устройство может работать, в зависимости от того, насколько быстро подтягивающие резисторы могут заряжать емкость шины, иногда вы можете получить еще большую скорость, снизив значения подтягивания, но это означает, что узлы должны затухать. больше тока, чтобы получить низкую логику .... Или вы можете пойти другим путем, замедляя шину, чтобы разрешить использование повышающих резисторов с более высоким значением для более низкого рассеивания мощности (см., например, шину PM).
Поучительно запустить прицел и заметить, что передний фронт на I2C НАМНОГО острее, чем нарастающий.
Для предполагаемого использования, в основном датчиков температуры и небольших устройств конфигурации на одной плате (или не более одного шасси), это оказывается в значительной степени удачным выбором между сложностью реализации, низким количеством выводов и простым аппаратным обеспечением. Целью проекта было не «Быстрые каналы передачи данных на большие расстояния», и, несмотря на то, что я считаю, что с SPI в целом легче работать, I2C очень хорошо подходит для предполагаемого варианта использования.
Как только расстояния растут, что-то еще становится более подходящим, но на плате со скромными интерфейсами конфигурации eeprom / температура / устройство это работает достаточно хорошо (стоит отметить, что интерфейс управления PHY выглядит ОЧЕНЬ похоже на I2C).
источник
Разные результаты объясняются тем, что схема драйвера отличается для каждой технологии.
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 не могут говорить так быстро).
источник