Интерфейсы. Шина I2C

В цифровой электронике очень широко применяются различные интерфейсы для обмена данными между устройствами и/или блоками одного устройства. Например, хорошо знакомый интерфейс USB применяется для связи компьютера с периферийным устройством. Интерфейс HDMI применяется для обмена данными между компьютером и монитором. Интерфейс RS485 применяется для обмена данными между устройствами промышленной автоматизации. Различных интерфейсов очень много.

Интерфейсы различаются по назначению, скорости передачи данных. Они бывают последовательные и параллельные. Различаются они и топологией — количеством ведущих и ведомых устройств, их ролями в протоколе обмена.

Интерфейсы нужны в первую очередь для стандартизации и унификации. Несколько различных производителей устройств, которые никогда не слышали о существовании друг друга, могут производить устройства, которые успешно работают вместе, благодаря тому, что поддерживают один и тот же стандартный интерфейс.

Микроконтроллеры обычно включают в себя в качестве периферийных устройств контрóллеры различных интерфейсов. Мы будем использовать интерфейс I2C для работы с LCD дисплеем нашего конструктора.

I2C — последовательная асимметричная шина для связи между интегральными схемами внутри электронных приборов. Использует две двунаправленные линии связи (SDA и SCL), применяется для соединения низкоскоростных периферийных компонентов с процессорами и микроконтроллерами (например, на материнских платах, во встраиваемых системах, в мобильных телефонах). Разработана фирмой Philips Semiconductors в начале 1980-х как простая 8-битная шина внутренней связи для создания управляющей электроники. Была рассчитана на частоту 100 кГц. Стандартизована в 1992 году, в первой версии к стандартному режиму 100 кбит/с добавлен скоростной режим 400 кбит/с (Fast-mode, Fm); за счёт 10-битной адресации становится возможным подключение на одну шину более 1000 устройств.

Протокол обмена данными по шине I2C достаточно сложен, рассматривать его сейчас мы не будем. Для нас работа с ним будет заключаться в вызове функций стандартной библиотеки Python.

Для нас важно то, что

  • для обмена данными шина I2C использует две линии связи, грубо говоря два провода
  • интерфейс подразумевает деление устройств на ведущих и ведомых
  • ведущее устройство может быть только одно, ведомых несколько
  • обменом управляет ведущее устройство
  • только ведущее устройство может быть инициатором обмена данными
  • для того, чтобы ведомые устройства поняли к кому из них обращается ведущий, используется адрессация. У каждого ведомого устройства есть свой адрес