Современные устройства радиоэлектронной техники используют большое число микросхем, что требует много линий для адресации, выбора и управления их работой. Для увеличения эффективности, упрощения схемотехнических решений фирма Philips разработала простую шину для «межмикросхемного управления» (inter-IC). Шина получила название I2C или I2C. Для эффективного использования все присоединенные к ней устройства должны иметь встроенный интерфейс, который позволяет связываться друг с другом по шине I2C. Фирма Philips разработала и изготавливает более 200 интегральных микросхем и других устройств с различной технологией (n-МОП, КМОП, ТТЛ и др.), имеющих встроенный интерфейс I2C. Благодаря своим качествам интерфейс I2C стал стандартом «де-факто», и многие ведущие электронные фирмы (Atmel, Motorola, Microchip, Texas Instruments и др.) также выпускают микросхемы с интерфейсом I2C.
Основные характеристики шины I2C:
· скорость обмена – до 100 кбит/с для стандартного режима, до 400 кбит/с в скоростном и до 3,4 Мбит/с в высокоскоростном режимах работы;
· максимальное количество микросхем, присоединенных к шине, ограничивается только суммарной емкостью нагрузки, которая не должна быть больше 400 пФ;
· максимальная длина линий шины – 2 метра для стандартного режима.
Шина I2C – двунаправленная асинхронная с последовательной передачей данных. Она использует 2 сигнальные линии:
SDA (Serial DAta) – двунаправленная шина данных;
SCL (Serial Clock) – линия синхронизации (тактового сигнала).
Для управления линиями применяются выходные каскады с открытым стоком или открытым коллектором, чтобы устройства можно было соединять по схеме «монтажного И». Типовая конфигурация шины I2C показана на рис. 1.
Для обеспечения высокого уровня при отсутствии на шине активного устройства используются внешние подтягивающие резисторы RPU сопротивлением 1…10 кОм, в зависимости от длины линии и скорости передачи данных. На одной линии могут работать устройства стандартного и скоростного режимов.
Рис. 1. Подключение устройств к шине I2C
Вследствие различных технологий микросхем (n-МОП, КМОП, ТТЛ), которые могут быть подключены к шине, уровни логических 0 и 1 не фиксированы определенными значениями, а зависят от напряжения питания UCC. Наиболее часто величина UCC равна +5 В.
Все устройства, подключаемые к шине, делятся на два класса: “Master” (ведущий) и “Slave” (ведомый). Устройство “Master” генерирует тактовый сигнал SCL и, как следствие, является ведущим. Оно может самостоятельно выходить на шину и адресовать любое ведомое устройство с целью передачи или приема из него информации. В протоколе I2C каждое устройство имеет свой адрес. Обычно в качестве ведущего выступает микроконтроллер.
Когда ведущий желает инициировать передачу данных, он сначала передает адрес устройства, с которым будет производить обмен. Все устройства на шине следят за выставленным адресом и сравнивают его с собственным. Вместе с адресом передается бит направления передачи R/W, который определяет, будет ли ведущий читать из ведомого или записывать в него. При R/W = 0 реализуется режим записи в ведомое устройство, при R/W = 1 – режим чтения. Во время обмена всегда один из абонентов – передатчик, а другой – приемник. Таким образом, ведущий и ведомый могут работать в одном из двух режимов обмена:
· ведущий передает, а ведомый принимает;
· ведущий принимает, а ведомый передает.
Условия START и STOP. Когда нет передачи данных по шине I2C, реализуется режим ожидания: на линиях SDA и SCL будут высокие уровни напряжения (логические 1) за счет подтягивающих резисторов. Процедура обмена начинается с того, что ведущий формирует условие START: он генерирует переход сигнала на линии SDA из высокого уровня в низкий при высоком уровне на линии SCL, как показано на рис. 2. Этот переход воспринимается всеми устройствами, подключенными к шине, как признак начала процедуры обмена. Сеанс обмена завершается тем, что ведущий формирует условие STOP – переход сигнала на линии SDA из низкого уровня в высокий при высоком уровне на линии SCL. Условия START и STOP всегда вырабатываются ведущим. Считается, что шина занята после фиксации условия START. Шина считается освободившейся через некоторое время после фиксации условия STOP.
После формирования условия START ведущий выставляет на линии SCL низкий уровень, а на линии SDA – старший бит первого байта сообщения. Спецификация шины I2C разрешает изменение сигнала на линии SDA только при низком уровне на линии SCL. Данные действительны и должны оставаться стабильными только во время высокого уровня синхроимпульса SCL, как показано на рис. 2.
Рис. 2. Временные диаграммы сигналов в условиях START и STOP
Подтверждение. Для подтверждения приема байта сообщения в спецификации протокола шины I2C вводится специальный бит подтверждения ACK, выставляемый приемником на линию SDA после приема 8 бит данных. Для этой цели ведущий формирует 9-й тактовый импульс на линии SCL, при котором приемник выставляет низкий уровень на линии SDA, как признак успешного приема байта. Подтверждение при передаче данных обязательно. На время синхроимпульса подтверждения передатчик отпускает линию SDA, путем вывода сигнала DATA_OUT = 1, при котором выходной транзистор передатчика закрывается. Приемник должен удерживать линию SDA в течение высокого состояния синхроимпульса в стабильном низком состоянии. В том случае, когда ведомый-приемник не может подтвердить прием байта, линия данных должна быть оставлена в высоком состоянии. Это является признаком отсутствия приема байта и оценивается ведущим как отсутствие подтверждения. После этого ведущий может выдать условие STOP для прерывания пересылки данных.
Если в пересылке участвует ведущий-приемник, то он должен сообщить об окончании обмена ведомому-передатчику путем неподтверждения приема последнего байта. После этого ведомый-передатчик должен освободить линию SDA для того, чтобы позволить ведущему выдать условие STOP или повторить START.
Адресация в шине I2C. Для адресации устройств используется два формата адреса: 7-разрядный и 10-разрядный. На рис. 3 приведен формат 7-разрядного адреса.
Рис. 3. Формат 7-разрядного адреса (ST-START;
R/W – бит направления «чтение/запись»; АСК - подтверждение)
Адрес передается в первом байте ведущим после формирования условия START. Первые семь битов байта образуют адрес ведомого, причем сначала передается старший разряд адреса A6. Восьмой бит передаваемого байта R/W определяет направление пересылки данных. Если «0», то ведущий будет записывать информацию в ведомый-приемник. Если «1», то ведущий будет читать информацию из ведомого-передатчика. После того, как адрес послан, все устройства на шине сравнивают первые семь бит после условия START со своим адресом. При совпадении устройство полагает себя выбранным как ведомый-приемник или как ведомый-передатчик, в зависимости от бита направления. Выбранное устройство посылает на линию SDA бит подтверждения ACK низкого уровня во время 9-го синхроимпульса на линии SCL. Формат 7-разрядной адресации используется в обычном режиме работы шины I2C. Теоретически он позволяет обращаться к 128 устройствам, однако часть адресов используется для служебных целей, что сокращает размер адресного пространства. Адрес ведомого устройства состоит из фиксированной и программируемой частей. Фиксированные адреса строго постоянны и выдаются комитетом I2C (фирмой Philips).
Передача данных. Все передачи по шине I2C производятся байтами. Число байтов, которые могут быть переданы за один сеанс обмена, не ограничено. Каждый байт должен сопровождаться битом подтверждения. Данные передаются, начиная со старшего бита.
Достоинства интерфейса I2C следующие: не нужно разрабатывать схемы сопряжения с интерфейсом, так как они уже интегрированы в микросхемы; большое количество типов микросхем, которые могут быть присоединены к интерфейсу; очень низкое энергопотребление; высокая помехоустойчивость; широкий диапазон питающего напряжения.
К недостаткам I2C можно отнести небольшую длину линий интерфейса. Обычно они должны располагаться в пределах одной печатной платы.