m09-04 теория 6 мин

Почему I2C не работает: три причины

I2C не работает чаще всего по трём причинам, и все три проверяются за минуту.

Первая: нет подтяжек. Линии SDA и SCL должны быть подтянуты к питанию (4.7 кОм). На некоторых модулях они уже стоят, на других — нет, и тогда на шине «висит воздух». Проверка: мультиметром в покое на SDA и SCL должно быть напряжение питания (3.3 или 5 В). Если 0 или плавает — подтяжек нет.

Вторая: неверный адрес. Сканер адресов покажет, что реально на шине. Часто адрес сдвинут (0x3C против 0x3D), зависит от перемычки на модуле, или указан 8-битный вместо 7-битного (0x78 против 0x3C). Проверка: i2c_scanner, потом сверка с даташитом.

Третья: шина «залипла». Одно из устройств удерживает SDA в нуле (после сброса, сбоя питания или помехи), и обмен стоит. Проверка: посмотреть уровни; если SDA в нуле при отпущенных линиях — залипло. Лечение: 9 тактов на SCL вручную или передёрнуть питание.

Дополнительно:

— Нет общей земли между платами — обмен не пойдёт.
— Разные напряжения: 5 В датчик и 3.3 В микроконтроллер без сдвигателя.
— Слишком длинные провода: ёмкость шины растёт, фронты заваливаются. Больше 30–50 см — уже проблема.
— Слишком быстрая скорость для конкретного устройства (попробуй 100 кГц).
— Два устройства с одинаковым адресом.

Порядок отладки: питание → подтяжки → адрес → земля → скорость. Не начинай с кода.

Зачем

Три причины покрывают почти все случаи, и проверяются они мультиметром, а не чтением драйвера.

Сделай сейчас

Когда I2C не работает, первым делом измерь напряжение на SDA и SCL. Если не 3.3 В — ищи подтяжки, а не ошибку в коде.

Проверь себя

Сканер не находит устройство, хотя оно подключено. С чего начать?

С питания и земли: есть ли 3.3 В на модуле, общая ли земля. Потом проверить подтяжки на линиях и только затем — адрес и скорость.

Пройти тест 5 заданий
0 из 102 · 0%
Источники
  1. Спецификация I²C-bus (NXP UM10204) на i2c-bus.org
    подтяжки и адресация
  2. SparkFun: I2C
    типичные ошибки
Сначала прочитать
I2C: две линии и адреса
Входит в маршруты
Датчик на экран
Теги
i2c отладка подтяжка