Существует ли максимальное количество ведомых устройств i2c, которое может управлять ведущим устройством i2c? Каковы физические ограничивающие факторы?
Существует ли максимальное количество ведомых устройств i2c, которое может управлять ведущим устройством i2c? Каковы физические ограничивающие факторы?
Ответы:
Программным ограничивающим фактором является размер адреса, используемого для ведомых устройств: 7-разрядный или 10-разрядный, которые поддерживают 127 и 1023 устройства соответственно. Физически есть два ограничения. Во-первых, физический размер шины, потому что шина предназначена только для коротких пробегов (часть IC). Если шина слишком велика, то необходимо учитывать эффекты емкостной нагрузки и задержки распространения. Во-вторых, некоторые устройства не могут поддерживать полный диапазон адресов I2C. Например, гироскоп MPU6050 поддерживает только два адреса, а некоторые устройства резервируют определенные адреса для специальных целей.
Адресация ограничивает количество устройств - некоторые могут использовать 10-битную адресацию (довольно редко используется), что ограничивает количество адресов до 1024. Существует несколько «зарезервированных» адресов.
I2C (в отличие от «двухпроводной шины» или того, что другие хотят называть подобными шинами), должен соответствовать стандарту NXP (ранее Philips), спецификации шины I2C UM10204 и руководству пользователя. . Это должен быть ваш основной справочный документ, а не различные интерпретации и подмножества, которые существуют где-либо еще.
Максимальное количество устройств будет зависеть от возможностей привода самого слабого выхода (который, в свою очередь, определяет минимальный нагрузочный резистор), проводной и входной емкости, а также рабочего режима / частоты. См. Раздел 7.2 « Работа над максимально допустимой емкостью шины, если максимальная емкость должна быть превышена:
Шина i2c ограничена главным образом емкостью шины (и, следовательно, скоростью) и доступными адресами устройств. И физическое пространство доски.
Но нет реального верхнего предела, когда вы учитываете шинные буферы, расширители, повторители, концентраторы, мультиплексоры, коммутаторы (или любое другое имя для устройства, которое может переключаться между несколькими шинами). Они добавляют некоторые накладные расходы i2c, которые могут быть доступны через ту же шину i2c. Например, PCA9548A - это 8-битный шинный коммутатор.
Эта единичная микросхема теоретически может в четыре раза увеличить количество ведомых i2c (127 * 8), доступных в других случаях. А PCA9548A может быть настроен на 8 адресов на одной шине, то есть на 8 * 8 * 127 устройств. (математика может быть выключена). И это только с этим устройством и не более.
Честно говоря, нет теоретического предела, если вы отрегулируете емкость.
I2C задает 2 длины адреса, 7 и 10 бит , что дает теоретический максимум 128 и 1024 отдельных адресов соответственно.
Однако есть несколько зарезервированных адресов, таких как 0x00 (общий вызов). Это дополнительно ограничивает адресное пространство.
Если вы создаете систему, в которой у вас есть прямой контроль над устройствами I2C, вы можете использовать зарезервированные адреса для своего собственного использования, но система больше не будет соответствовать стандарту I2C.
Помимо адресации, существуют физические ограничения шины. Каждое устройство в шине должно иметь возможность тянуть шину на низкий уровень в течение определенного промежутка времени (в зависимости от скорости шины). Если шина имеет большую емкость, устройства могут быть не в состоянии достаточно быстро вывести SDA на низкий уровень, а подтягивания могут не привести к быстрому восстановлению SDA.
Теперь проблемы с оборудованием можно преодолеть с помощью небольшого количества драйверов. Сейчас я работаю над проектом, который использует I2C для связи с устройствами на нескольких десятках метров. Основная шина использует 24 В, и на каждой плате есть драйвер, который понижает ее до 3,3 В.
В ореховой скорлупе физическое ограничение I2C может быть преодолено. Адресация может быть преодолена, но только если у вас есть прямой контроль над устройством.
Основное ограничение на количество ведомых устройств, которыми может управлять ведущий, обычно обусловлено электрическими факторами, такими как емкость шины, утечка, мощность привода и т. Д. Если можно построить ведомых с нулевой паразитной емкостью и нулевой утечкой, и если можно подключить их. с трассировкой платы нулевой емкости емкость шины не будет иметь значения, но на практике ни одно из предположений не будет выполнено.
С другой стороны, адресация устройств, которые «знают» друг о друге, не является проблемой. Было бы тривиально спроектировать периферийное устройство, которое позволяло бы соединять миллиарды микросхем с использованием одного адреса чтения и одного адреса записи. Просто укажите, что каждое устройство должно иметь уникальный четырехбайтовый идентификатор и должно постоянно прослушивать адрес записи, но должно выпадать из каждой транзакции, первые четыре байта данных которой не соответствуют их идентификатору. Далее укажите, что устройства могут отвечать на адрес чтения только в том случае, если последняя транзакция записи, которую они услышали, соответствовала их адресу.
Если кто-то хочет добавить возможность, чтобы мастер определял идентификаторы всех подключенных подчиненных, можно было бы зарезервировать некоторые специальные диапазоны идентификаторов для таких целей. Например, можно сказать, что если первый байт идентификатора является FF, то следующие четыре байта будут маской, а четыре после этого идентификатором; устройство должно оставаться подключенным (и подтверждать последний байт идентификатора), если часть его идентификатора, указанная маской, совпадает с той, что указана в команде. Это позволило бы мастеру идентифицировать по меньшей мере одно устройство, использующее 64 транзакции, и дополнительные устройства, использующие 62 или меньше транзакций каждое. Возможно, не самое быстрое средство идентификации устройства, но неплохо, учитывая пространство поиска миллиардов идентификаторов устройств.
Краткий ответ: это зависит
Если у вас есть (общие) устройства с 7-битными адресами до 104 устройств (128 адресов - зарезервированные адреса (0x00-0x07 и 0xF0-0xFF зарезервированы)) (применяются определенные ограничения) Если у вас есть (менее распространенные) устройства, которые поддерживают 10-битные адресация до 1024 устройств (можно смешивать 7-битные и 10-битные устройства и таким образом подключать до 1136 устройств)
Теперь об ограничениях: большинство простых устройств можно настроить только на два-восемь разных адресов. Вы можете преодолеть это путем индивидуального заказа устройств с разными базовыми адресами (но обычно это означает, что вы заказываете минимальное количество устройств). Существуют также аппаратные ограничения (в основном, емкость шины), но это можно решить с помощью специальных драйверов i2c.
Если вы хотите подключить множество устройств на большие расстояния, я бы предложил использовать полевую шину в любом случае! I2C предназначен для связи внутри устройства (например, телевизора). Я сам использую I2C с RaspberyPi с внешними кабелями длиной до 50 см (даже с Т-образными сечениями, которые вы никогда не должны иметь в шинной системе). Он работает на удивление хорошо.
Количество устройств, подключенных к шине, ограничено только общей допустимой емкостью шины 400 пФ. Поскольку в большинстве микросхем с интерфейсом I²C используется технология CMOS с низким энергопотреблением и высоким сопротивлением, многие микросхемы могут быть подключены к шине I²C до того, как будет достигнута максимальная емкость.
С добавлением микросхем мультиплексора (например, TCA9544A) или буферов (например, PCA9515B) вы можете преодолеть все ограничения - как емкость шины, так и адресацию.
Вы можете разместить 3 устройства с одинаковыми адресами позади мультиплексора и выбрать только одно из них, связаться с ним и затем выбрать другое. Конечно, программное обеспечение становится более сложным.
Если у вас длинная проводка, вы можете разместить буфер посередине и преодолеть ограничение емкости.