Шина I2C кажется простой: две линии, несколько микросхем, подтягивающие резисторы и стандартный обмен данными. На практике эта простота скрывается большое количество ошибок. На отладочном столе интерфейс может работать стабильно, а в промышленном устройстве с длинными дорожками, несколькими платами и разными уровнями питания начинают появляться зависания и ошибки адресации.
Основа шины I2C — открытый сток. Устройства не формируют высокий уровень активно, а только подтягивают линию к земле. Возврат в логическую единицу обеспечивают подтягивающие (pull-up) резисторы. Если сопротивление слишком велико, фронт сигнала становится медленным из-за ёмкости шины. Если сопротивление слишком мало, растет ток через выходные каскады микросхем и увеличивается нагрузка на устройства. Поэтому расчет pull-up для I2C должен учитывать не только напряжение питания, но и суммарную ёмкость дорожек, входов микросхем, разъёмов и кабелей.
Ёмкость шины особенно важна при увеличении скорости обмена. На частоте 100 кГц запас обычно выше, но на 400 кГц и выше медленные фронты быстро превращаются в источник ошибок. Логический анализатор показывает обмен, но уровни уже находятся на границе допустимого диапазона. Контроллер может воспринимать данные нестабильно, а ведомое устройство периодически не подтверждает байт, формируя сигнал отсутствия подтверждения NACK.

Причины NACK не ограничиваются неправильным адресом. Часто проблема связана с питанием микросхем, несогласованными уровнями 1,8 В, 3,3 В и 5 В, некорректным сигналом сброса, задержкой готовности датчика, растягиванием тактового сигнала или ошибкой в разводке. В многоплатных системах добавляются паразитные ёмкости кабеля, отражения, слабая земля и наводки от силовых цепей. Иногда помогает не снижение скорости, а установка I2C-буфера, преобразователя уровней или разделение длины шины на несколько локальных участков.
При проектировании промышленной электроники важно закладывать устойчивость I2C шины заранее. Pull-up резисторы должны иметь корректный номинал, буферы и преобразователь уровней — соответствовать режиму работы, а линии SDA и SCL — быть разведены с учетом помех и ёмкостной нагрузки. Нельзя относиться к I2C как к универсальной кабельной шине: это прежде всего интерфейс для связи микросхем на плате или внутри компактного узла.
Грамотный подбор микросхем, резисторов, преобразователей уровней и интерфейсных компонентов позволяет снизить риск нестабильного обмена. Для поставщика электронных компонентов экспертность проявляется именно в таких деталях: важно понимать, как выбранные радиодетали будут работать в реальной схеме.
Похожие статьи
В блогМощные резисторы в тормозных, разрядных и пусковых цепях
Варикап в ВЧ-узле
Компаратор с гистерезисом: как задать пороги и убрать дребезг