Я только что столкнулся с этой проблемой с несколькими устройствами I2C с фиксированным адресом. Наше решение состояло в том, чтобы использовать линии ввода / вывода на микроконтроллере, чтобы заставить линии SDA располагаться высоко на устройствах, к которым мы не хотим обращаться, в то время как линия ввода / вывода для устройства, на которое мы нацелены, задается как вход (высокий импеданс ). Это означает, что только целевое устройство соответствует его адресу I2C, а другие игнорируют любые последующие данные.
Резисторы на линии SDA для неактивных устройств в конечном итоге действуют как подтягивания для шины, поэтому точное значение будет зависеть от того, сколько у вас устройств и какое подтягивание вам нужно для вашей шины. Таким образом, если вы выбираете резисторы 10К, то 3 неактивных устройства дают подтягивание 3К3.
Диоды Шоттки гарантируют, что устройство все еще может тянуть линию SDA достаточно низко при передаче данных обратно на хост.