В мире микроэлектроники существует понятие шины данных. Если в двух словах, то со стороны пользователя, шина данных — это несколько проводов которые соединяют группу устройств вместе. По этим проводам между ними происходит обмен данными.
Со стороны микроконтроллера, шина данных — это не просто провода, это ещё и аппаратный интерфейс, который берёт на себя работу по передаче данных, на нагружая сам микроконтроллер. А ещё для шины данных нужно как то организовать обмен сообщениями, чтобы самые разные устройства могли общаться на одном языке. Это называется протоколом.
Одна из самых известных шин, которые активно используются почти во всей бытовой электронике и разного рода гаджетах — это I2C (Inter-Integrated Circuit). Об этой шине и поговорим.
Как устроена шина I2C
Обмен осуществляется с помощью двух сигнальных линий: SDA — данные, и SCL — синхроимпульс. То есть фактически, данные идут только по одному проводу, а второй нужен для правильной работы шины.
Инициатор у обмена данными только один — ведущий (он же master). Все остальные — ведомые (slave).
Когда ведущий желает что-то сообщить ведомому, он инициирует обмен и передаёт в шину адрес целевого устройства. Ведомый проверяет, с ним ли желает пообщаться ведущий, и в случае положительного решения начинает обмен данными с ведущим.
Причем данные могут идти по шине в обоих направлениях. То есть не только ведущий может передавать кому-то данные, но и ведомые могут ему отвечать.
Особенности подключения
Есть два основных момента, которые нужно знать собирая систему на I2C шине.
Первый момент: сигнальные линии SDA и SCL должны быть подтянуты к плюсу резисторами от 2кОм до 10кОм. Это нужно сделать только в одном месте на всей линии. То есть нужно проверить все устройства на предмет наличия такой подтяжки, она не должна дублироваться.
Второй момент: если к шине нужно подключить устройства с разным напряжением: 3,3В и 5В, то следует их согласовать. Либо в большую, либо в меньшую сторону. Для этого некоторые из устройств потребуется подключить через преобразователь уровней.
Адресация
Стандартный вариант шины I2C, который можно встретиться в большинстве производимых микросхем, имеет адресное пространство 7 бит и поддерживает подключение к шине 112 устройств с разными адресами. Есть и расширенный вариант с 10 разрядной адресацией, но пока он встречается редко. Существует даже список адресов, который производители назначают своим изделиям.
https://i2cdevices.org/addresses
А что делать, если хочется к одной шине подключить несколько одинаковых микросхем? Для этой ситуации разработчики стараются предусмотреть возможность смены I2C адреса. Как правило, несколько ножек микросхемы выделяют под настройку адреса. Например, на модуле светодиодной матрицы с контроллером HT16K33 эти ножки соединены с перемычками, которые можно спаять и тем самым сменить адрес устройства.
Где применяется
Множество датчиков имеют I2C интерфейс, например, всем известные датчики давления, влажности, акселерометры и гироскопы фирмы Bosch: BMP180, BMP280, BME280, BMI160.
Дисплеи, например, OLED с контроллером SSD1306.
Существуют микросхемы, которые могут добавить обычному устройству возможность обмена по I2C — так называемые GPIO-расширители. Самый известный в DIY-среде такой гибрид — символьный ЖК дисплей LCD1602 с модулем I2C. На этом модуле как раз установлен GPIO-расширитель с I2C интерфейсом.
Микросхемы АЦП и ЦАП, память, драйверы светодиодов, часы реального времени и прочее. Всё это можно найти с I2C.
Разумеется, у большинства микроконтроллеров есть I2C интерфейс, порой даже несколько.
Что такое QIIC
Поскольку I2C поддерживается множеством микросхем, возникает ситуация, когда можно собрать полноценное устройство используя только шину I2C. Раз так, то и никакие дополнительные контакты соединять не потребуется. Исключение составляет «шина» питания, ведь питать нужно каждый модуль в системе. К тому же, чтобы I2C работала, у всех модулей должна быть общая земля.
Логичным будет объединить сигнальные линии I2C и питание в одно целое. Именно так мы и поступили в RobotClass, сделав шину QIIC для наших модулей.
На каждом модулей из линейки QIIC имеется один или два миниатюрных разъёма SH с шагом контактов 1 мм. Ниже представлен модуль OLED дисплея 128×32 с QIIC.
Соединять модули можно кабелем, на обеих сторонах которого есть соответствующие штекеры.
Есть и служебные модули, которые необходимы для совместимости с уже существующими платами или для распределения сигнала.
На каждой плате с поддержкой QIIC имеется перемычка для включения подтяжки. Вспомним, что подтягивать шину нужно только в одном месте.
А вот пример подключения ведущего и ведомого. Микроконтроллер STM32F030 управляет OLED дисплеем.
На момент написания этой статьи линейка QIIC находится на стадии активной разработки. Появляются новые полезные модули и контроллеры с поддержкой QIIC.
Если появилась какая-то идея, какой модуль необходим для типовых проектов, оставляйте пожелания в комментариях!