Сколько ведомых устройств i2c может поддерживать мастер i2c?

17

Существует ли максимальное количество ведомых устройств i2c, которое может управлять ведущим устройством i2c? Каковы физические ограничивающие факторы?

user768421
источник
1
У вас есть 7-битный адрес. Это означает, что вы можете адресовать до 127 рабов.
Ботник
Благодарю. Существуют ли физические ограничивающие факторы, такие как привод тока, емкость или что-то подобное, что мешает количеству ведомых устройств достигать 127?
user768421
1
@Botnic полностью игнорирует коммутаторы, концентраторы, буферы, ретрансляторы i2c и любое устройство i2c, позволяющее расширить шину.
Прохожий

Ответы:

22

Программным ограничивающим фактором является размер адреса, используемого для ведомых устройств: 7-разрядный или 10-разрядный, которые поддерживают 127 и 1023 устройства соответственно. Физически есть два ограничения. Во-первых, физический размер шины, потому что шина предназначена только для коротких пробегов (часть IC). Если шина слишком велика, то необходимо учитывать эффекты емкостной нагрузки и задержки распространения. Во-вторых, некоторые устройства не могут поддерживать полный диапазон адресов I2C. Например, гироскоп MPU6050 поддерживает только два адреса, а некоторые устройства резервируют определенные адреса для специальных целей.

vini_i
источник
2
У вас есть ошибка "один за другим". 7-битная адресация поддерживает 128 адресов (от 0 до 127). 10-битная адресация поддерживает 1024 адреса (от 0 до 1023).
CurtisHx
3
Это не одна ошибка. Это ошибка «off by 6», потому что есть 7 зарезервированных адресов, а не один.
Круеми
Схема адресации диктуется устройствами на шине, ведущем или ведомом. Некоторые устройства имеют предустановленные диапазоны адресов и зарезервированные адреса. Другие устройства, например, многие микроконтроллеры, не имеют зарезервированных адресов и могут использовать любой адрес в данной битовой схеме.
vini_i
Эти цифры несколько верны, однако необходимо соблюдать осторожность. Есть несколько зарезервированных адресов, таких как 1111 XXX и 0000 XXX. Это означает, что 7-битный = 2 ^ 7 - 16 = 112 используемых адресов, 10-битный - полный 2 ^ 10 1024. 8-битный (не должно быть), обычно он включает в себя бит R / W на 7-битном. nxp.com/docs/en/user-guide/UM10204.pdf
ошибка
@ busfault Я признаю, что 8-битные адреса - это не вещь. Я удалил их из своего ответа. Большинство микроконтроллеров могут игнорировать некоторые или все зарезервированные адреса и использовать полный диапазон адресов. В своем ответе отмечу, что это зависит от устройства.
vini_i
10

Максимальное количество узлов ограничено адресным пространством, а также общей емкостью шины 400 пФ, что ограничивает практические расстояния связи до нескольких метров.

Узнайте больше на I²C

юниор
источник
9

Адресация ограничивает количество устройств - некоторые могут использовать 10-битную адресацию (довольно редко используется), что ограничивает количество адресов до 1024. Существует несколько «зарезервированных» адресов.

I2C (в отличие от «двухпроводной шины» или того, что другие хотят называть подобными шинами), должен соответствовать стандарту NXP (ранее Philips), спецификации шины I2C UM10204 и руководству пользователя. . Это должен быть ваш основной справочный документ, а не различные интерпретации и подмножества, которые существуют где-либо еще.

Максимальное количество устройств будет зависеть от возможностей привода самого слабого выхода (который, в свою очередь, определяет минимальный нагрузочный резистор), проводной и входной емкости, а также рабочего режима / частоты. См. Раздел 7.2 « Работа над максимально допустимой емкостью шины, если максимальная емкость должна быть превышена:

введите описание изображения здесь

Спехро Пефхани
источник
7

Шина i2c ограничена главным образом емкостью шины (и, следовательно, скоростью) и доступными адресами устройств. И физическое пространство доски.

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

Эта единичная микросхема теоретически может в четыре раза увеличить количество ведомых i2c (127 * 8), доступных в других случаях. А PCA9548A может быть настроен на 8 адресов на одной шине, то есть на 8 * 8 * 127 устройств. (математика может быть выключена). И это только с этим устройством и не более.

Честно говоря, нет теоретического предела, если вы отрегулируете емкость.

проезжий
источник
5

I2C задает 2 длины адреса, 7 и 10 бит , что дает теоретический максимум 128 и 1024 отдельных адресов соответственно.

Однако есть несколько зарезервированных адресов, таких как 0x00 (общий вызов). Это дополнительно ограничивает адресное пространство.

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

Помимо адресации, существуют физические ограничения шины. Каждое устройство в шине должно иметь возможность тянуть шину на низкий уровень в течение определенного промежутка времени (в зависимости от скорости шины). Если шина имеет большую емкость, устройства могут быть не в состоянии достаточно быстро вывести SDA на низкий уровень, а подтягивания могут не привести к быстрому восстановлению SDA.

Теперь проблемы с оборудованием можно преодолеть с помощью небольшого количества драйверов. Сейчас я работаю над проектом, который использует I2C для связи с устройствами на нескольких десятках метров. Основная шина использует 24 В, и на каждой плате есть драйвер, который понижает ее до 3,3 В.

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

CurtisHx
источник
Прошло почти три года с тех пор, как вы работали на очень длинных автобусах i2c. Они работали хорошо?
Wallyk
1
@wallyk Я покинул эту компанию вскоре после публикации этого ответа. Я скажу, что при правильном оборудовании вы можете заставить I2C общаться на больших расстояниях. Тем не менее, существуют другие протоколы связи, которые рассчитаны на большие расстояния и, вероятно, будут лучшим выбором, чем I2C.
CurtisHx
5

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

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

Если кто-то хочет добавить возможность, чтобы мастер определял идентификаторы всех подключенных подчиненных, можно было бы зарезервировать некоторые специальные диапазоны идентификаторов для таких целей. Например, можно сказать, что если первый байт идентификатора является FF, то следующие четыре байта будут маской, а четыре после этого идентификатором; устройство должно оставаться подключенным (и подтверждать последний байт идентификатора), если часть его идентификатора, указанная маской, совпадает с той, что указана в команде. Это позволило бы мастеру идентифицировать по меньшей мере одно устройство, использующее 64 транзакции, и дополнительные устройства, использующие 62 или меньше транзакций каждое. Возможно, не самое быстрое средство идентификации устройства, но неплохо, учитывая пространство поиска миллиардов идентификаторов устройств.

Supercat
источник
2

Краткий ответ: это зависит

Если у вас есть (общие) устройства с 7-битными адресами до 104 устройств (128 адресов - зарезервированные адреса (0x00-0x07 и 0xF0-0xFF зарезервированы)) (применяются определенные ограничения) Если у вас есть (менее распространенные) устройства, которые поддерживают 10-битные адресация до 1024 устройств (можно смешивать 7-битные и 10-битные устройства и таким образом подключать до 1136 устройств)

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

Если вы хотите подключить множество устройств на большие расстояния, я бы предложил использовать полевую шину в любом случае! I2C предназначен для связи внутри устройства (например, телевизора). Я сам использую I2C с RaspberyPi с внешними кабелями длиной до 50 см (даже с Т-образными сечениями, которые вы никогда не должны иметь в шинной системе). Он работает на удивление хорошо.

kruemi
источник
0

Количество устройств, подключенных к шине, ограничено только общей допустимой емкостью шины 400 пФ. Поскольку в большинстве микросхем с интерфейсом I²C используется технология CMOS с низким энергопотреблением и высоким сопротивлением, многие микросхемы могут быть подключены к шине I²C до того, как будет достигнута максимальная емкость.

Равиндра Праджапати
источник
1
Это не отвечает на вопрос ОП в полном поместье. Попробуйте ответить на все аспекты вопроса, даже если используете приблизительные значения. Укажите и / или оставьте ссылку на ваш источник информации.
Sparky256
0

С добавлением микросхем мультиплексора (например, TCA9544A) или буферов (например, PCA9515B) вы можете преодолеть все ограничения - как емкость шины, так и адресацию.

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

Если у вас длинная проводка, вы можете разместить буфер посередине и преодолеть ограничение емкости.

фило
источник
Нет, вы все равно будете ограничены: 4 канала / мультиплексора, на каждый канал у вас есть 4 субканала, затем у вас есть субканалы, субканалы и многое другое. У вас есть 3 адресные линии на каждый переключатель каналов: Is 4 ^ (2 ^ 3) = 65536 каналов. На канал у вас есть 2 ^ 8 - 7 - 8 + 2 ^ 10 = 1265 устройств / каналов (когда вы также используете буферы) (-7 для зарезервированных адресов и -8 для мультиплексных адресов). 1265 * 65536 = 82903040 Максимальное количество устройств.
12431234123412341234123
Изменить: Извините, произошла ошибка: это 2 ^ 7 - 7 - 8 + 2 ^ 10 = 1137 устройств / канал => 1137 * 65536 = 74514432 устройств. Но может быть больше возможностей, когда вы используете IO-Expander для включения и выключения некоторых буферов (что далеко от практического использования, но теоретическая возможность).
12431234123412341234123