Перейти к содержанию

Адрес I²C

Адрес I²C — номер, по которому ведущий выбирает ведомое устройство на общей двухпроводной шине. Путаница между 7-битным адресом и байтом адреса — одна из самых частых причин, почему датчик «не отвечает».

Обновлено Редакция GAW

Адрес I²C (slave address) — номер ведомого устройства на шине I²C. В обычном режиме он 7-битный: от 0 до 127, из которых 16 зарезервированы спецификацией (две группы, 0000XXX и 1111XXX), и устройствам остаются 0x08–0x77. Ведущий начинает каждую транзакцию с условия START и байта адреса: семь старших бит — адрес ведомого, младший бит R/W — направление: 0 — запись, 1 — чтение. Ведомое, узнавшее свой адрес, отвечает подтверждением — прижимает SDA к нулю на девятом такте, и это возможно благодаря выходам с открытым стоком.

7-битный адрес и байт адреса

Адрес (7 бит)Байт для записиБайт для чтенияПример
0x270x4E0x4Fпереходник LCD на PCF8574, A2–A0 = 111
0x3F0x7E0x7Fто же на PCF8574A
0x760xEC0xEDдатчик с адресом 0x76

Байт адреса — это адрес, сдвинутый влево на один разряд, плюс бит R/W. Одни даташиты и библиотеки пишут 7-битный адрес, другие — байт адреса, и если перепутать, ведомое не ответит. Последовательность байтов транзакции с адресом, регистром и данными нарисует конструктор транзакции I²C.

Как выбирают адрес

У многих микросхем старшие биты адреса заданы на заводе, а младшие — выводами A0, A1, A2 или AD0, которые соединяют с землёй или питанием. Так на одну шину можно поставить несколько одинаковых микросхем. Адреса популярных датчиков и модулей, зарезервированные адреса, 10-битная адресация и разрешение конфликтов собраны в статье «Интерфейс I²C». Подтягивающие резисторы для шины рассчитает калькулятор подтяжек I²C.

Частые вопросы

Почему сканер нашёл адрес 0x27, а в даташите написано 0x4E?

Это одно и то же. 0x27 — 7-битный адрес, а 0x4E — байт адреса: адрес, сдвинутый на разряд влево, с битом записи в младшем разряде; 0x4F — тот же байт с битом чтения. Библиотеки вроде Wire в Arduino ожидают 7-битный адрес, а некоторые даташиты и драйверы пишут байт адреса.

Сколько устройств можно подключить к шине I2C?

При 7-битной адресации свободно 112 адресов: 16 из 128 зарезервированы спецификацией, устройствам остаются 0x08–0x77. Но обычно раньше кончается ёмкость линии — не больше 400 пФ на 100 и 400 кГц. Устройства с одинаковыми адресами разводят выводами адреса или коммутатором шины.

Что делать, если у двух устройств одинаковый адрес?

Если у микросхемы есть адресные выводы, подать на них разные уровни: у расширителя PCF8574 три вывода A0–A2 дают восемь адресов от 0x20 до 0x27, а у PCF8574A — от 0x38 до 0x3F. Если выводов нет, ставят коммутатор шины вроде TCA9548A, который подключает к ведущему одну из восьми ветвей, или используют второй интерфейс I2C микроконтроллера.

Источники

  1. NXP Semiconductors. UM10204: I2C-bus specification and user manual, Rev. 7.0, 2021 — п. 3.1 — протокол, байт адреса и бит R/W; табл. 4 — зарезервированные адреса; 10-битная адресация
  2. NXP Semiconductors. PCF8574; PCF8574A: Remote 8-bit I/O expander for I2C-bus with interrupt, Rev. 5, 2013 — табл. 4 и 5 — 7-битные адреса и байты адреса для записи и чтения, выводы A0–A2
  3. Texas Instruments. TCA9548A Low-Voltage 8-Channel I2C Switch with Reset, SCPS207G, 2019 — коммутатор шины на восемь каналов

Нашли ошибку?