Плохая связь с несколькими устройствами I2C

i2c

У меня есть Arduino Micro, подключенный к двум устройствам I2C. MPU-6050 с питанием от 5 В (хотя у него есть собственный регулятор напряжения) и высотомер с питанием от 3,3 В. Они оба подключены к SDA и SCL.

Я заметил, что когда у меня включен MPU, но не подается питание на высотомер 3,3 В, MPU не взаимодействует с Arduino. Мне нужно включить питание 3,3 В, чтобы просто общаться с MPU через I2C. Почему это происходит?

Тогда, к сожалению, я думаю, что мог закоротить линию 3,3 В и сломать высотомер. Когда я удаляю MPU из уравнения и пытаюсь просто связаться с альтиметром, я ничего не получаю. Означает ли это, что я закоротил устройство, или с I2C происходит что-то еще, чего я не понимаю?

Ниже я прикрепил схему подключения устройств.

, 👍0

Обсуждение

итак... вы подключаете scl/sda на "датчике давления" к MPU6050 с помощью резисторов 1 кОм? почему? и как эти два компонента подключены к ардуино? как схема, которая оставляет много вопросов без ответов, @Jaromanda X

Они подключены к контактам SCL и SDA Arduino Micros. У меня оба устройства работали до того, как я замкнул устройство. Я хотел бы знать, почему, когда одно устройство неисправно (или не питается) по I2C, оно портит другие устройства., @M.Schindler

потому что они связаны, @Jaromanda X

Все ли устройства используют 3,3 В или все 5 В для связи I2C? У вас возникнут проблемы при подключении устройства 3,3 В к шине 5 В или наоборот. В этот момент вам понадобится переключатель уровня., @chrisl


2 ответа


Лучший ответ:

1

Я хотел бы знать, почему, когда одно устройство неисправно (или не включается) I2C портит другие устройства.

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

Предположим, что переключатели a и b находятся внутри устройства I2C. Когда переключатель А разомкнут, в точке А будет напряжение 5 В. Когда переключатель А замкнут, точка А будет находиться под напряжением 0 В.

Теперь, если у вас есть второй набор резисторов R на той же линии, но он питается от собственного источника питания 5 В, те же напряжения будут видны на А, когда переключатель А разомкнут (5 В), а переключатель А замкнут. (0 вольт).

Но теперь, если мы отключим питание второго набора резисторов R (извините, что я не могу показать их на рисунке) вместо того, чтобы поднимать напряжение до 5 В (потому что мы отключили 5 В), резисторы будут тянуть вниз из- за любых других нагрузок на отключенном источнике питания 5 В. И просто ради аргумента, предположим, что отключенное питание 5 Вольт было на уровне 0 Вольт.

Итак, если один набор резисторов тянет до 5 В (пара, которая еще находится под напряжением), а другой — вниз (неактивная пара), то напряжение в точках A и B не будет таким высоким, как 5 В, которые мы могли бы увидеть. когда выключатели разомкнуты. Если бы все резисторы R были одинакового номинала, а отключенное питание было бы при 0 В, то самое высокое напряжение на А или В было бы 2,5 В. И это не очень хороший максимум.

Таким образом, дополнительное устройство, на которое не подается питание, нарушило связь, предотвратив получение истинного максимума. Низкие значения не затрагиваются, так как переключатель потянет линию на низкий уровень.

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

И резистор — не единственное, что может отвратить высокие частоты. Микросхема без питания может обеспечивать неожиданные пути прохождения тока. Большинство контактов порта имеют внутренний диод для Vcc. А поскольку у чипа нет питания на Vcc, ток в линиях I2C может следовать по этому пути к земле.

Кроме того, я думаю, что вы неправильно нарисовали резисторы. Если бы они были включены последовательно с выводами SDA и SCL, связи не было бы, потому что резисторы 1 кОм не позволяют линии SDA подтягиваться достаточно низко. Я думаю, что эти резисторы являются подтягивающими резисторами. Возможно, вы сможете еще раз взглянуть и подтвердить соединение.

,

Спасибо за ответ!! Таким образом, подтягивающие резисторы для линии I2C находятся на коммутационной плате MPU. Это резисторы сопротивлением 4,7 кОм, которые поднимаются до уровня 3,3 В., @M.Schindler


1

Когда устройство обесточено, любое напряжение, подаваемое на вывод IO, снимается и подается на вывод VCC через внутренние диоды защиты от электростатического разряда. На такой шине, как I2C, это приводит к повреждению шины. (Примечание: даже если нет преднамеренных защитных диодов, полевые МОП-транзисторы, управляющие линиями, имеют встроенные диоды, которые действуют как защитные диоды, но они очень слабые и их можно легко сломать).

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

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

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

,