Назначение адреса I²C нескольким устройствам на одной шине

У меня есть пара АЦП на одной и той же шине I²C, которые по умолчанию имеют один и тот же адрес. Мой первый инстинкт подсказывает мне использовать мультиплексор I²C, такой как TCA9544A , но это потребует отправки байта в мультиплексор перед получением данных от АЦП, и я хотел бы избежать этого (поскольку мне нужно непрерывно считывать данные так же быстро, как и как умею).

АЦП поддерживают настраиваемое назначение адресов через I²C, поэтому мне просто нужно убедиться, что я отправлю байт конфигурации на один единственный АЦП. Я мог бы включить полевой транзистор в линию SDL к каждому АЦП, чтобы у меня был только один АЦП, подключенный во время назначения адреса, но, вероятно, есть гораздо более элегантное решение, поскольку должна быть куча людей, имеющих одну и ту же проблему. Мои условия поиска в Google недостаточно хороши, чтобы найти ответ :(

Здесь может быть уместным номер детали ADC.
О, извините, это MAX11617 ( maximintegrated.com/en/products/analog/data-converters/… )
Насколько я вижу в таблице данных, эта часть не имеет пользовательских подчиненных адресов.
@Прохожий, согласен. И это не та функция, которую я когда-либо слышал о ведомом устройстве I2C (кроме uC).
Ой, извините. Тогда мультиплексор I²C. :)
[Ваш вопрос теперь принадлежит нам, и мы еще не закончили, @Clayton.] Я хотел добавить, что конфликт адресов I²C является достаточной причиной для поиска другого эквивалентного аналого-цифрового чипа, который имел бы контакты выбора адреса. ).
Вы можете использовать что-то вроде cds.linear.com/docs/en/datasheet/4317fa.pdf , что позволяет прозрачно изменять адреса. Нет необходимости добавлять дополнительную транзакцию для переключения шины.
Как подключить несколько одинаковых устройств к Arduino с помощью I2C? есть хорошая информация и ссылки. Помимо того, что было упомянуто до сих пор, документ TI «Устранение неполадок протокола шины I2C» , раздел 3, предлагает буфер I²C в качестве еще одного варианта.
Большое спасибо, ребята! Я думаю, что LTC4317 выглядит как отличное решение, поэтому моя проблема...

Ответы (1)

Эта проблема, действительно, довольно распространена. Вот типичное решение...

(Все это предполагает, что у вас есть запасные штифты, которые могут сильно различаться.)

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

В качестве альтернативы подайте питание на микросхемы от контактов MCU, что будет иметь аналогичный эффект.


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

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


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