I²C (Inter-Integrated Circuit Bus)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:57, 30 июня 2016.
Open book.svg Авторство
Портнова А.С.
Согласовано: 15.04.2016
I²C
Джипег.jpg
Type Bus
Designer Philips Semiconductor, known today as NXP Semiconductors
Designed 1982; 37 years ago (1982)
Data signal Open-Drain
Width 1 bit (SDA) + clock (SCL)
Bitrate 0.1 / 0.4 / 1.0 / 3.4 / 5.0 Mbit/s
(depending on mode)
Protocol Serial, Half Duplex

I²C (англ. Inter-Integrated Circuit Bus) – последовательная шина данных для связи интегральных схем, использующая две двунаправленные линии связи (SDA и SCL). Используется для соединения низкоскоростных периферийных компонентов с материнской платой, встраиваемыми системами и мобильными телефонами. Двухпроводной последовательный интерфейс, разработанный корпорацией Philips.

Шина I2C широко используется в бытовой электронике, передаче данных и промышленной электронике. Простая двунаправленная 2-проводная шина для эффективного управления и взаимодействия различных блоков телевизоров, она стала применяться для связи между собой однокристальных микроконтроллеров, ЖКИ-индикаторов, портов ввода-вывода, микросхем памяти (особенно энергонезависимой), аналого-цифровых и цифро-аналоговых преобразователях, цепях цифровой настройки, DTMF кодеров и декодеров, часов реального времени и т.д

История

История шины I²C в том виде, в котором она представлена сейчас, началась в 1992 году, когда фирмой Pilips была выпущена её первая спецификация версии 1.0. Эта спецификация исключила возможность задания адреса slave-устройства программным способом как наиболее сложную процедуру. Наряду со стандартным режимом скорости передачи данных 100 кбит/с (low-speed) был введен режим быстрой передачи со скоростью 400 кбит/с (fast-speed) . Появился также режим 10-разрядной адресации. Версия 2.0, выпущенная в 1998 году, ввела в спецификацию шины быстродействующий режим (HS-mode) со скоростью передачи до 3,4 Мбит/c. Причем требования предписали вводить обязательную возможность совместимости с режимами low-speed и fast-speed. К моменту появления версии 2.0 шина I²C распространилась по всему миру, став международным стандартом. Было разработано более 1000 интегральных схем, лицензия на официальное использование спецификации приобретена более чем 50 фирмами. Версия 2.1, датируемая 2000 годом, включает себя не значительные модификации.

Введение в спецификацию I²C

Обычно для многих приборов выдвигаются следующие критерии:

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

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

Концепция шины

Все операции по шине I²C осуществляются при помощи двух проводов:

  • линия последовательных данных (SDA):
  • линия синхронизации (SCL).

Каждый элемент определяется своим уникальным адресом, в который входит группа приборов и номер конкретного прибора. Группа определяет, является ли это микроконтроллером, LCD-индикатором, памятью или чем-то еще. Например, все устройства памяти имеют код 0Ah, таймеры и часы реального времени - 0Dh, устройства телетекста - 02h и т.д. Любой элемент, инициирующий передачу, является мастером, любой адресуемый элемент является подчиненным. В системах с несколькими мастерами, один и тот же элемент может в разное время выступать или как мастер или как подчиненный.

Терминология шины I²C

  • Передатчик - элемент, который посылает данные в шину.
  • Приемник - элемент, который получает данные из шины.
  • Master - элемент, который инициализирует передачу, генерирует сигналы синхронизации, и завершает передачу.
  • Slave (подчиненный) - элемент, адресованный мастером
  • Multi-master - система с более чем одним мастером.
  • Арбитраж - процедура, гарантирующая, что, если больше чем один мастер одновременно пробуют управлять шиной, только один из них получит полное управление шиной и обеспечит передачу данных без ошибок.
  • Синхронизация - синхронизация передачи данных между элементами.

I²C является многопрофильным master шины. Это означает, что еще одно устройство, способное контролировать шину можно подключить к нему. Так как в качестве master обычно являются микроконтроллеры, давайте рассмотрим случай передачи данных между двумя микроконтроллерами, подключенных к I²C.

Рис.1_Пример конфигурации шины I²C, использующей два микроконтроллера

Данные передаются по двум проводам — проводу данных и проводу тактов. Есть ведущий (master) и ведомый (slave), такты генерирует master, ведомый лишь «поддакивает» при приёме байта. Всего на одной двупроводной шине может быть до 127 устройств.

Общие характеристики

SDA и SCL - двунаправленные линии с открытым стоком (коллектором), соединенные с положительным питающим напряжением через резистор (рис.2). Когда шина свободна, обе линии находятся в состоянии “1”. Данные могут передаваться по шине I2 C со скоростью до 100 kbit/s в стандартном режиме, или до 400 kbit/s в быстром режиме. Число интерфейсов, соединенных с шиной исключительно зависит от емкости шины, максимальное значение которой - 400pF.

Рис.2_Соединение I²C устройств

Принцип работы

I²C использует две двунаправленные линии, подтянутые к напряжению питания и управляемые через открытый коллектор или открытый сток — последовательная линия данных (SDA, англ. Serial DAta) и последовательная линия тактирования (SCL, англ. Serial CLock). Стандартные напряжения +5 В или +3,3 В, однако допускаются и другие.

Классическая адресация включает 7-битное адресное пространство с 16 зарезервированными адресами. Это означает, что разработчикам доступно до 112 свободных адресов для подключения периферии на одну шину.

Основной режим работы — 100 кбит/с; 10 кбит/с в режиме работы с пониженной скоростью. Также немаловажно, что стандарт допускает приостановку тактирования для работы с медленными устройствами.

Рис.3_Тактировка последовательности передачи данных

ПЕРЕДАЧА БИТА

Из-за разнообразия различных технологий (CMOS, NMOS,биполярные приборы) которые могут быть использованы с шиной I²C, уровни логического “0” и “1” не установлены и зависят от величины питающего напряжения VDD. Для передачи одного бита данных используется один импульс сигнала синхронизации, при этом уровень на линии SDA должен быть неизменным в течение высокого уровня на линии SCL, и может изменяться только при низком уровне на SCL. Исключениями служат два особых состояния - START и STOP.

Рис.4_Передача бита

START и STOP

Существуют два особых состояния шины I²C - start и stop, которые служат для индикации начала и конца передачи и соответственно перехода шины в неактивное состояние. Следует отметить, что до тех пор, пока не установлено состояние start, сигналы на линиях SDA и SCL могут быть совершенно произвольными . Это позволяет, в частности, использовать одну линию SDA и несколько линий SLC (например, при нехватке, адресов на одной шине). Состояние START - переход от “1” к “0” на линии SDA при “1” на линии SCL. Состояние STOP - переход от “0” к “1” на линии SDA при “1” на линии SCL. Эти два состояния всегда генерируются мастером. Детектирование состояний start и stop в специализированных элементах обычно производится аппаратно. При полностью программной реализации шины I²C в микроконтроллерах без аппаратной I²C-части необходимо как минимум 2 раза проверять состояние линии SDA.

Рис.5_START и STOP состояния

ПЕРЕДАЧА ДАННЫХ

Все передачи производятся 8-разрядными байтами. Число байтов, которые могут быть переданы за одну передачу не ограничено. Каждый байт должен сопровождаться битом подтверждения (ACK). Данные передаются начиная со старшего бита (MSB). (Рис.6) Если приемник не может получать другой полный байт данных, он не выдает сигнал ACK, который используется передатчиком для синхронизации или сигнализации о неисправности приемника (или его отсутствии).

Рис.6

ПОДТВЕРЖДЕНИЕ

Для подтверждения передачи байта передатчик устанавливает линию SDA в “1” в течение синхронизирующего импульса. (Рис.7) Приемник при этом должен выставить “0” на SDA. Естественно при этом должны бить выдержаны определенные временные соотношения. Обычно, приемник, который был адресован, должен генерировать сигнал ACK после того, как каждый байт был получен, за исключением того, когда сообщение начинается с адресом CBUS. Когда подчиненный приемник не подтверждает подчиненный адрес (например, устройство не готово, потому что это выполняет некоторую внутреннюю функцию), линия SDA данных должна быть оставлена в “1”. Мастер затем может выдать состояние STOP, чтобы прервать передачу. Если подчиненный приемник подтверждает подчиненный адрес, но, некоторое время позднее не может получать больше байты данных, мастер должен приостановить передачу. При приеме последнего байта в серии, вместо сигнала ACK мастер может выставить состояние STOP, при этом подчиненный передатчик должен освободить линию данных.

Рис.7

СИНРОНИЗАЦИЯ

Каждое мастер-устройство генерирует собственные сигналы синхронизации на линии SCL. Данные на линии SDA действительны только течение ВЫСОКОГО уровня SCL. Синхронизация осуществляется благодаря “монтажному-И” на линии SCL. Это означает, что состояние “0” на линии SCL будет длиться до тех пор, пока все мастер-устройства не освободят линию синхронизации. Линия SCL будет, следовательно, задержана в уровне “0” элементом с самым длинным уровнем “0”. Элементы с более коротким уровнем “0” при этом входят в состояние ожидания.

Рис.8_Синхронизация в течение процедуры арбитража

АРБИТРАЖ

Мастер может начинать передачу только, если шина свободна. Два или больше мастера могут генерировать состояние START практически одновременно, поэтому необходим арбитраж между ними, для того чтобы выяснить, кто же их них все-таки был первым. Для этого используется линия SDA - благодаря тому, что она, как и SCL выполнена по схеме “монтажное-И”.

Рис.9_Процедура арбитража двух мастеров

ЛОГИЧЕСКИЙ УРОВЕНЬ

Данные шлются пакетами, каждый пакет состоит из девяти бит. 8 данных и 1 бит подтверждения/не подтверждения приема. Первый пакет шлется от ведущего к ведомому это физический адрес устройства и бит направления. Служебныйпакет.png

Сам адрес состоит из семи бит (вот почему до 127 устройств на шине), а восьмой бит означает что будет делать Slave на следующем байте — принимать или передавать данные. Девятым битом идет бит подтверждения ACK. Если Slave услышал свой адрес и считал полностью, то на девятом такте он придавит линию SDA в 0, сгенерировав ACK — то есть Понял! Мастер, заметя это, понимает, что все идет по плану и можно продолжать. Если Slave не обнаружился, прозевал адрес, неправильно принял байт, сгорел или еще что с ним случилось, то, соответственно, SDA на девятом такте будет прижать некому и ACK не получится. Будет NACK.

После адресного пакета идут пакеты с данными в ту или другую сторону, в зависимости от бита RW в заголовочном пакете. Вот, например, Запись. В квадратиках идут номера битов. W=0

Служебныйпакет1.png

Чтение практически также, но есть одна тонкость. При приеме последнего байта надо дать ведомому понять, что в его услугах больше не нуждаемся и отослать NACK на последнем байте. Если отослать ACK то после стопа Master не отпустит линию — такой уж там конечный автомат. Так что прием двух байтов будет выглядеть так (R=1):

Служебныйпакет2.png

Есть еще одно состояние, как повторный старт. Это когда мы не объявляя STOP вкатываем на шину еще один START. После него мы можем обратиться к другому устройству не освобождая шину. Но чаще идет обращение к тому же самому устройству и это связано с особенностями организации памяти.

Применение

I²C находит применение в устройствах, предусматривающих простоту разработки и низкую себестоимость изготовления при относительно неплохой скорости работы.

Список возможных применений:

  • доступ к модулям памяти NVRAM;
  • доступ к низкоскоростным ЦАП/АЦП;
  • регулировка контрастности, насыщенности и цветового баланса мониторов;
  • регулировка звука в динамиках;
  • управление светодиодами, в том числе в мобильных телефонах;
  • чтение информации с датчиков мониторинга и диагностики оборудования, например, термостат центрального процессора или скорость вращения вентилятора охлаждения;
  • чтение информации с часов реального времени (кварцевых генераторов);
  • управление включением/выключением питания системных компонент;
  • информационный обмен между микроконтроллерами;

Пример системы с шиной I²C На рисунке: (a) Высокоинтегрированный телевизор

  1. Микроконтроллер
  2. ФАПЧ-синтезатор
  3. Флеш-память
  4. Мультисистемный декодер сигналов цветности
  5. Стереодекодер звука
  6. Улучшитель сигнала картинки
  7. Hi-Fi аудиопроцессор
  8. Аналоговый видеопроцессор
  9. Декодер телетекста
  10. ИМС сигналов OSD

(b) базовая станция радиотелефона стандарта DECT

  1. Генератор DTMF
  2. Интерфейс телефонной линии
  3. Кодек АДИКМ
  4. Пакетный контроллер
  5. Микроконтроллер
Рис.10_Схема системы с шиной I²C

Преимущества

  • необходим всего один микроконтроллер для управления набором устройств;
  • используется всего два проводника для подключения многих устройств;
  • возможна одновременная работа нескольких ведущих (master) устройств, подключенных к одной шине I²C;
  • стандарт предусматривает «горячее» подключение и отключение устройств в процессе работы системы;
  • встроенный в микросхемы фильтр подавляет всплески, обеспечивая целостность данных.

Недостатки

  • ограничение на ёмкость линии — 400 пФ;
  • несмотря на простоту протокола, программирование контроллера I²C затруднено из-за изобилия возможных нештатных ситуаций на шине. По этой причине большинство систем используют I²C c единственным ведущим (Master) устройством, и распространённые *драйверы поддерживают только монопольный режим обмена по I²C;
  • Трудность локализации неисправности, если одно из подключенных устройств ошибочно устанавливает на шине состояние низкого уровня.

Преимущества для конструкторов

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

Разработка

Каждая электронная система включает в себя 3 различных типа узлов:

  • Узел управления
  • Узлы общего назначения, такие, как буферы ЖКИ, порты ввода-вывода, ОЗУ, ЭСПЗУ или преобразователи данных.
  • Специфические узлы, такие, как схемы цифровой настройки и обработки сигнала для радио- и видеосистем, или генераторы тонального набора для телефонии.

В настоящее время ассортимент продукции Philips включает более 150 КМОП и биполярных I²C-совместимых устройств, функционально предназначенных для работы во всех трёх вышеперечисленных категориях электронного оборудования. Все I²C-совместимые устройства имеют встроенный интерфейс, который позволяет им связываться друг с другом по шине I²C. Это конструкторское решение разрешает множество проблем сопряжения различных устройств, которые обычно возникают при разработке цифровых систем.

На дешевых устройствах часто I²C эмулируется программно с использованием технологии Bit-banging.

Поддержка операционными системами

  • В Linux поддержка I²C обеспечивается специальным модулем для каждого устройства, совместимого с этим стандартом. Файл заголовков для написания клиента I²C — /usr/include/linux/i2c.h. В OpenBSD также добавлена поддержка основных микроконтроллеров и сенсоров I²C;
  • В Sinclair QDOS и Minerva QL поддержка осуществляется через набор расширений фирмы TF Services;
  • В AmigaOS доступ к устройствам I²C осуществляется с помощью библиотеки i2c.library, написанной Вильгельмом Нойкером;
  • eCos поддерживает I²C для нескольких архитектур.
  • Материнские платы EPIA-M поддерживают I²C на уровне форм-фактора Mini-ITX.

Производные технологии

I²C является основой ACCESS.bus, дисплейного интерфейсного канала данных (DDC) VESA, шины управления системными функциями SMBus. В этих технологиях возможно использование различных напряжений, частоты обмена и наличия отдельных линий прерываний.

Шина IPMB, основанная на использовании двух I²C с целью резервирования и являющаяся основой интерфейса IPMI, применяется в высоконадёжных системах стандартов AdvancedTCA и MicroTCA.

TWI (Two Wire Interface) или TWSI (Two Wire Serial Interface), по сути, та же самая шина I²C, но использует другое название по лицензионным причинам (патенты на I²C уже отменены, 1 октября 2006 года отменены лицензионные отчисления за использование протокола I²C. Однако отчисления сохраняются для выделения эксклюзивного подчинённого адреса на шине I²C.)

Источники

Ссылки

Примечания