I2C в Linux - краткое руководство
Что такое I2C
I2C (Inter-Integrated Circuit) - двухпроводная шина для связи между микросхемами. На одной шине может висеть несколько устройств: датчики, RTC, EEPROM, дисплеи. Каждое устройство имеет свой 7-битный адрес (от 0x03 до 0x77).
В Linux каждая I2C-шина представлена файлом устройства /dev/i2c-N, где N — номер шины.
Подготовка
Armbian / Debian
Установить пакет i2c-tools и загрузить модуль ядра:
sudo apt install i2c-tools
sudo modprobe i2c-dev
OpenWrt
apk update
apk add i2c-tools kmod-i2c-core kmod-i2c-dev
Проверка
После загрузки модулей должны появиться файлы устройств:
ls /dev/i2c-*
Если вывод пустой - шина не настроена в device tree или модули не загружены.
Сканирование шины утилитой i2cdetect
i2cdetect — основной инструмент из пакета i2c-tools. Он перебирает все адреса на шине и показывает, какие устройства отвечают.
Посмотреть список шин
i2cdetect -l
Пример вывода:
i2c-0 i2c rk3x-i2c I2C adapter
i2c-1 i2c rk3x-i2c I2C adapter
i2c-3 i2c rk3x-i2c I2C adapter
Просканировать конкретную шину
i2cdetect -y 1
Флаг -y отключает подтверждение (без него утилита спросит «Continue? [Y/n]»). Цифра 1 — номер шины.
Пример вывода:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Здесь найдены два устройства: на адресе 0x50 (скорее всего EEPROM) и 0x68 (может быть RTC DS3231 или акселерометр MPU6050).