Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МП устройства СУ / Конспект лекций (дополнительный, обновленный).doc
Скачиваний:
127
Добавлен:
19.03.2015
Размер:
552.45 Кб
Скачать

13.5.3. Интерфейс i2c.

Другим примером интерфейса, широко применяемым в цифровой микропроцессорной технике, является интерфейс I2C (часто встречается обозначение «I2C»). Этот интрефейс представляет собой шину, поддерживающую мультиплексный синхронный последовательный обмен данными. Название интерфейса расшифровывается как «Inter IC», т.е. «межмикросхемная шина». Интерфейс I2C был предложен фирмой Philips в начале 90-х годов прошлого века специально для связи различных цифровых микросхем между собой. Сегодня эта шина широко применяется для простой, не требующей большого количества выводов и сигнальных линий, стыковки микроконтроллеров с микросхемами памяти, АЦП, ЦАП, часами реального времени, таймерами, различными преобразователями, индикаторами и прочей периферией. В периферийных устройствах протокол шины I2C обычно реализуется аппаратно, в микроконтроллерах и микропроцессорах он может реализовываться как аппаратно, так и программно.

Шина I²C использует две двунаправленные линии, подтянутые к напряжению питания резисторами Rп (рис.13.7). На шину параллельно подключаются все микросхемы и функциональные блоки микропроцессорной системы. Выходы всех устройств, подключаемых к шине, должны быть организованы по схеме с открытым коллектором или открытым стоком. Одна линиия имеет обозначение SDA (Serial Data) и предназначена для последовательной передачи/приема данных, а вторая имет обозначение SCL (Serial Clock) и предназначена для последовательного тактирования. Поскольку в шине прием и передача данных организована по одной линии SDA в обоих направлениях, то выводы SDA и SCL микросхем должны быть как входами, так и выходами. Стандартные напряжения логических уровней соответствуют ТТЛ-уровням, однако допускаются и другие значения напряжений. Основной режим работы реализуется на скорости 100 кбит/с, режим с пониженной скоростью - 10 кбит/с. В более поздних спецификациях появились ускоренный режим со скоростью 400 кбит/с и режим повышенной скорости 3,4 Мбит/с. Стандарт шины допускает также приостановку тактирования для работы с медленными устройствами.

Рис.13.7. Организация шины I2C.

Устройства, подключаемые к шине, по своему назначению делятся на ведущие (Master) и ведомые (Slave). В шине должно быть как минимум одно ведущее устройство. Как правило, таким устройством является микроконтроллер. Он берет на себя функции управления шиной, вырабатывает тактовые сигналы SCL, инициирует сеансы приема/передачи. Информация может передаваться как от ведущего устройства к ведомому, так и в обратном направлении, но обязательно под управлением ведущего устройства. На рисунке показана внутренняя организация выводов SDA и SCL только для одного устройства. Такая же организация характерна для всех микросхем, подключаемых к шине.

В исходном состоянии на выходах SDA и SCL всех микросхем, подключенных к шине I2C, должны быть установлены логические единицы. Благодаря схеме с открытыми коллекторами, в которой транзисторные ключи выходов SDA и SCL оказываются закрытыми, через резисторы Rп потенциалы указанных выходов подтягиваются к напряжению питания. Внутренние сопротивления закрытых транзисторов выходов микросхем оказываются большими и все микросхемы находятся в режиме чтения. Если какое-либо устройство начнет процесс передачи, остальные устройства окажутся приемниками. Открывающиеся под управлением синхроимпульсов и импульсов передаваемых данных выходные транзисторы передающего устройства будут подсаживать потенциалы линий SDA и SCL шины на землю. Переданные сигналы данных и синхронизации поступят на входы всех остальных микросхем. Каждая микросхема, работающая в режиме приемника, считает переданный сигнал.

Кроме самих передаваемых данных, в каждой посылке закладывается адрес устройства, для которого эти данные предназначены. Каждое подключаемое к шине I2C периферийное устройство имеет свой уникальный адрес. В стандартном режиме для адресации периферийного устройства используется 7 бит информации с 16 зарезервированными адресами. Это означает, что к шине может быть подключено до 112 ведомых устройств. В более поздних спецификациях шины для адресации стали использовать 10 бит, что увеличило количество подключаемых устройств до 1008. Если передаваемый адрес совпадет с индивидуальным адресом микросхемы, то эта микросхема примет предназанченные для нее данные и обработает их. Остальные микросхемы текущую посылку проигнорируют. Адрес в ведомых микросхемах в зависимости от их типа может быть задан жестко производителем или может программироваться разработчиком устройства. Возможен случай, когда микросхема содержит неизменияемую честь адреса в старших разрядах и часть адреса в младших разрядах, доступную для программирования разработчиком. В этом случае упрощается адресация при подключении однотипных микросхем.

Информация по шине I2C передается побайтно, последовательно бит за битом. Передача каждого бита по линии SDA сопроводается синхроимпульсом на линии SCL. Процедура обмена начинается с того, что ведущий передатчик формирует состояние «СТАРТ», обозначаемое в спецификации шины символом «S». Для этого он генерирует переход сигнала линии SDA из высокого «отпущенного» состояния в низкое «подсаженное» при высоком уровне SCL (рис.13.8). Этот переход воспринимается всеми устройствами, подключенными к шине, как признак начала процедуры обмена. Генерация синхросигнала - всегда обязанность ведущего устройства. Каждый ведущий генерирует свой собственный сигнал синхронизации при пересылке данных по шине. Процедура обмена завершается тем, что ведущий формирует состояние «СТОП» (обозначаемое символом «P»), в котором осуществляет переход линии SDA из низкого уровня в высокое «отпущенное» при высоком уровне линии SCL. Состояния «СТАРТ» и «СТОП» всегда вырабатываются ведущим. Считается, что шина занята после фиксации состояния «СТАРТ» и свободна через некоторое время после фиксации состояния «СТОП». После формирования состояния «СТАРТ», ведущий опускает уровень линии SCL в низкое состояние и выставляет на линию SDA старший бит первого байта сообщения. Передача байта по спецификации шины I2C всегда происходит начиная со старшего бита. Количество байт в сообщении не ограничено. Спецификация шины I2C при передаче данных разрешает изменения на линии SDA только при низком уровне сигнала на линии SCL. Данные действительны и должны оставаться стабильными только во время высокого состояния синхроимпульса. Исключение составляют состояния «СТАРТ» и «СТОП», когда уровень линии SDA меняется при высоком уровне линии SCL. Для подтверждения приема байта от ведущего передатчика ведомым приемником в протоколе обмена по шине I2C вводится специальный бит подтверждения, выставляемый на шину SDA после приема последнего младшего бита данных. Для этого передатчик устанавливает логическую единицу на выходе SDA, тем самым «отпускает» эту линию, и передает девятый синхроимпульс по линии SCL. В ответ на этот синхроимпульс, приемник должен сам «подсадить» линию SDA. Если это произойдет, передатчик считает низкий уровень с линии SDA и продолжит или окончит передачу в зависимости от того, все ли байты переданы. Если от приемника подтверждения не последует, передача приостановится.

Рис.13.8. Временная диаграмма протокола интерфейса I2C.

Механизм передачи, когда ведущее устройство является приемником, а ведомое передатчиком, аналогичен описанному выше. В этом режиме формированием синхроимпольсов и состяний «СТАРТ» и «СТОП» также будет заниматься ведущее устройство. Но только в данном случае оно будет приемником. В ответ на состояние «СТАРТ» ведомый передатчик под управлением синхроимпульсов SCL с ведущего приемника будет выставлять побитно данные на линию SDA, которые будут считаны ведущим приемником. После передачи восьми бит данных ведомый передатчик приступит к ожиданию от ведущего приемника бита подтверждения. Если прием прошел без ошибок, ведущий приемник передаст этот бит путем подсаживания линии SDA и формирования синхроимпульса на линии SCL. В противном случае на линии SDA останется присутствовать высокий потенциал.

Процесс обмена информации начинается с того, что ведущее устройство выдает на I2C шину первый байт, в семи старших разрядах которого присутствует адрес активизируемого устройства, а в младшем бите отражается направление пересылки данных. При нуле в этом бите передача осуществляется от ведущего устройства к ведомому, а при единице – от ведомого к ведущему. Все ведомые устройства получат условие «СТАРТ» и примут первый байт. Только в одном устройстве адрес, закодированный первым байтом, совпадет с индивидуальным адресом этого устройства. И именно оно продолжит участвовать в пересылке. Остальные ведомые устройства останутся в режиме ожидания. Все они будут ждать новое условие «СТАРТ», после которого вновь первым передаваемым байтом будет адрес активизируемого устройства. Ведомое устройство, для которого адрес совпал, завершит процедуру приема первого байта, для чего оно выработает бит подтверждения. Получив подтверждение, ведущее устройство начнет в зависимости от направления пересылки, управлять приемом или передачей данных. Между этими пересылками условие «СТОП» формироваться не будет, а будет формироваться только бит подтверждения после пересылки очередного байта. Как только все байты данных будут пересланы, ведущее устройство сформирует условие «СТОП» и пересылка будет считаться завершенной.