Максимальная длина шины I2C?

38

Какова максимальная длина кабеля, который можно использовать для подключения двух устройств I2C (I2C master-> I2C slave)?

Да, я знаю, что I2C действительно предназначен для внутриплатной связи. Передо мной была поставлена ​​«цель разработки» - использовать общую шину I2C для нескольких подчиненных I2C для поддержки демонстрации.

Для ясности предположим, что стандартная частота шины I2C составляет 100 кГц.

Nate
источник
1
Максимальная длина приходит I, чтобы играть с емкостью, введенной длиной. Слишком большая емкость, и это может повлиять на вашу скорость. Так что, как всегда, это зависит.
Густаво Литовский
@GustavoLitovsky Вы правы насчет емкости. Это также зависит от типа используемых кабелей (экранированный или неэкранированный). Меня больше всего интересует общее руководство.
Nate
2
@Nate Guideline: максимальная чистая емкость шины 400 пФ. (Отчасти связано с вопросом: мемуары заросшего автобуса I2C .)
Ник Алексеев
1
I2C = шина между интегральными схемами. Он не рассчитан на большие расстояния между коробками и, конечно, не на частоте 400 кГц.
Спехро Пефхани
1
Просто хотел добавить некоторый личный опыт помимо расчетов. Я сделал демонстрацию перехода от платы разработчика к конвертеру I2C в USB с неэкранированным проводом около 3 футов. Не выглядел красиво, но это работало в 90% случаев.
mcmiln

Ответы:

16

Для быстрого режима и подтягивания резистора емкость должна быть меньше 200 пФ, в соответствии с этим документом NXP, спецификацией шины I2C и руководством пользователя .

С подтягиванием источника тока вы можете перейти на 400 пФ, но не с резисторами.

Если ваш провод 20 пФ / 30 см и у вас есть еще 50 пФ рассеянной и входной емкости, длина кабеля ограничена 2,25 м. Различные предположения приведут к различным числам.

Спехро Пефхани
источник
1
@KrunalDesai Это специально упомянуто в документе NXP, связанном выше. Спецификация шины I2C и руководство пользователя
Spehro Pefhany
1
В качестве примера из реальной жизни "Wiimote" Nintendo Wii использует I2C на 400 кГц ( wiibrew.org/wiki/Wiimote/Extension_Controllers ) для связи с периферийными устройствами, такими как Nunchuk ( wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck ), которые, как Вы можете видеть, есть кабель, который составляет около 1 м. Пассивные удлинители продаются, чтобы дать дополнительно 1 м ( amazon.com/Extension-Cable-Wii-Nunchuck-Nintendo/dp/B0039OEV9K ), поэтому они толкают, но остаются в пределах этого ограничения в 2,25 м.
Роб Старлинг
16

Безумные длины звучания, такие как 10, 25 и 100 м, вполне возможны, и я часто использую этот метод (с UART, а не с I2C, но метод стоит), когда мне нужно быстро собрать вещи. Хотя это не совсем лучший способ.

Ключ должен знать ваш порог входного напряжения. Убедитесь, что падение напряжения в заземляющем проводе намного ниже этого, иначе передатчик с высоким потенциалом земли не сможет снизить напряжение достаточно низко. Отсутствие допустимого отклонения для наземных смещений ИМХО является основной причиной использования RS485 или приемопередатчиков (возможно, I2C через CAN упоминается в нескольких заметках по применению).

В идеале все устройства должны иметь собственные настенные бородавки и аккумулятор, и между устройствами не будет передаваться питание по заземляющему проводу.

Но, давайте возьмем CAT5 для примера. CAT5 не может быть выше 52pf / m, или это не CAT5.

100-метровый кабель 52pf имеет емкость 5200pf или 5.2nf.

5,2n раз 20 кОм (подтягивание) дает постоянную времени около 104 микросекунд. Это ограничивает скорость до 10 кГц или около того.

Используя подтягивания 2,2 кОм, вы, вероятно, сможете достичь 100 кГц.

Я слышал, что устройства должны иметь резистор на SDL и SCK из-за большой емкостной нагрузки, которую они приводят, около 180 или 200 Ом.

Но, честно говоря, I2C вовсе не способ идти на большие расстояния. Приемопередатчики CAN или RS485, используемые с обычным UART, представляют собой надежное решение с очень хорошей защитой от сбоев, устойчивостью к электростатическим разрядам, скоростью, расстоянием и т. Д., Стоимостью около доллара за чип или около того, смещения заземления не так важны, так что вы свободно носить власть вместе с данными.

Единственным недостатком является то, что приемопередатчик может достигать 70 мА при передаче и 1 или 2 мА при простом прослушивании, поэтому I2C или прямой TTL UART могут быть полезны в экстремальных ситуациях с низким энергопотреблением, но подумайте, сколько времени вы на самом деле тратите на отправку.

EternityForest
источник
7

Я работаю в компании, производящей USB-датчики. Большинство из них основаны на сенсорных микросхемах I2C, эти устройства могут быть разделены на две части, поэтому вы можете установить часть процессора в одном месте, а часть датчика - в другом. Мы провели довольно много тестов на соединение I2C между процессором устройства и датчиками I2C. На частоте 100 кГц с хорошим протоколом восстановления после ошибок можно легко добраться до 25 м с помощью основных проводов. Мы даже смогли достичь 100 метров один раз с кабелем CAT5.

martinm
источник
Похоже, вы говорите о длине кабеля USB . ОП спрашивает о кабельном сырье I2C. Это совершенно другая тема. Если я не прав, отредактируйте свой ответ, и я уберу свое понижение.
DoxyLover
1
25 м это довольно много даже для USB ...
Владимир Краверо
3
Нет, я действительно говорю о соединении I2C между процессором устройства и микросхемами сенсора I2C, а не о соединении USB между хостом и процессором. Вот пример: yoctopuce.com/EN/products/yocto-meteo/doc/…
март
1
Если бы вы хотели использовать витую пару для I2C и питания, какую пару вы бы скрутили вместе? (SDA, SCL), (VCC, GND) или (SDA, GND), (SCL, VCC)?
Cano64
4
В идеале вы не используете витую пару вообще. Витая пара полезна для сбалансированных сигналов. Если у вас нет другого кабеля, поверните сигнал с землей. Если у вас на самом деле только четыре провода, подумайте о том, сколько энергии потребляет удаленный конец - вы можете закончить с более чем допустимым смещением заземления - прежде чем использовать только один провод для заземления. Я обычно использую старый кабель Cat5 (не выше! Двойной экран добавляет емкость, которая вам не нужна) с одной парой заземления, одной парой + 5 В и парами SDA + GND и SCL + GND.
Матиас
5

Что-то вроде P82B96 от NXP можно использовать для изменения уровней напряжения на шине, что позволяет значительно увеличить расстояния.

Техническое описание содержит примеры для I2C кабеля длиной 3 м, 25 м, 100 м и 250 м.

Есть и другие чипы, которые имеют схожую функциональность.

Джеффри Николс
источник
Проблема с чипом NXP заключается в том, что вам понадобится вдвое больше проводов. Есть другие идеи? обнаруженные мной двунаправленные микросхемы не превышают + 5В.
Матиас
4

IIC является синхронным протоколом, и, как таковой, он может запускаться произвольно медленно, чтобы соответствовать системным требованиям в отношении расстояния и шума.

Есть много примеров использования IIC по кабелю, начиная с ACCESS.bus еще в 1990-х годах и заканчивая тем, как он используется сегодня для получения информации EDID с видеодисплеев.

Дэйв Твид
источник
Другим примером является Wii Nunchuck, который подключен к Wii Remote через I²C с помощью 4-футового экранированного кабеля.
tcrosley