Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микроконтроллеры семейства MCS-51.doc
Скачиваний:
210
Добавлен:
02.05.2014
Размер:
1.05 Mб
Скачать

Протокол i2с

Наиболее популярный протокол для сети микроконтроллеров - I2C, кото­рый предназначен для связи устройств в многопроцессорных системах. Этот стандарт был разработан компанией Philips в конце 70-х годов как метод реализации интерфейса между микропроцессорами и периферийными уст­ройствами, который не требует прокладки многочисленных линий для передачи между устройствами всех разрядов адреса, данных и сигналов управле­ния. Протокол I2C позволяет разделять сетевые ресурсы между несколькими ведущими процессорами («multimastering»).

Шина I2C содержит две линии: линия SDA, которая служит для передачи данных, и линия SCL, по которой передается синхросигнал, используемый для стробирования данных. Обе линии подключены через резисторы к шине питания («подтянуты» к высокому уровню потенциала), что позволяет не­скольким устройствам управлять их состоянием путем соединения по схеме «монтажное И».

Шина I2C для управления стереосистемой может иметь вид, показанный на рис. 3.19.

Рис. 3.20 - Пример I2C сети.

Двухпроводная линия используется для определения начала передачи дан­ных, а также для передачи самих данных. Чтобы начать передачу данных, шина переводится в стартовое состояние. При отсутствии передаваемых данных шина находится в ждущем (пассивном) состоянии («idle»). При этом на обе линии сигналы не поступают, и на них установлен высокий уровень сигнала (потен­циал Vdd). Чтобы инициировать передачу данных, ведущее устройство, кото­рое запрашивает управление шиной, устанавливает низкий уровень сначала на линии SDA, а затем на линии SCL (стартовое состояние). В процессе пересыл­ки данных такое состояние шины является нерабочим, так как прием переда­ваемых данных производится только при высоком (активном) уровне синхро­сигнала на линии SCL. Чтобы закончить передачу данных выполняются обратные действия: на линии SCL устанавливается высокий уровень сигнала, а затем в такое же состояние переводится линия данных SDA (рис. 3.21).

Рис. 3.21 - Форма сигналов на шине I2С.

Данные передаются синхронным способом, причем первым посылается старший бит (рис. 3.22). После передачи 8 бит ведущее устройство переводит линию данных в «плавающее» состояние, ожидая подтверждения приема дан­ных от ведомого устройства. Таким подтверждением является установка ведо­мым устройством низкого уровня сигнала на линии SDA. После бита под­тверждения на обеих линиях устанавливается низкий уровень. Затем производится пересылка следующего байта, или шина переводится в состоя­ние конца передачи. Это означает, что передача завершена, и приемник мо­жет готовиться к следующему запросу данных.

Рис.3.22 - Передача байта по шине I2С .

Существует две максимальные скорости передачи данных по шине I2С: «стандартный режим» - до 100 Кбит/с и «быстрый режим» - до 400 Кбит/с (рис. 3.23).

Рис. 3.23 - Временная диаграмма сигналов на шине I2С.

Формат команды, поступающей от ведущего устройства к ведомому, по­казан на рис. 3.24. Адрес получателя содержит 7 бит. Существует неутвержден­ный («свободный»») стандарт, согласно которому четыре старших бита ис­пользуются для указания типа устройства, а следующие три бита используются для выбора одного из восьми устройств этого типа или служат для более точного определения типа устройства. Так как этот стандарт не является обя­зательным, то некоторые устройства требуют указания в качестве трех после­дних адресных бит определенных кодов, тогда как другие, например микро­схемы памяти EEPROM с последовательной выборкой, используют эти биты для выбора адресата внутри устройства. Существует также 10-разрядный стан­дарт для передачи адреса, в котором первые 4 бита содержат 1, следующий бит имеет значение 0. последние 2 бита являются старшими битами адреса, а завершающие 8 бит адреса передаются в следующем байте. Все это означа­ет, что очень важно распределить адреса между устройствами, подключен­ными к шине.

Первые четыре бита адреса обычно служат для определения типа выбира­емых устройств в соответствии со следующим соглашением:

0000 - Зарезервированный адрес

0010 - Синтезатор голоса

0011 - Аудио - интерфейс

0100 - Звуковой генератор

0111 - Жидкокристаллический или светодиодный дисплей

1000 - Видео - интерфейс

1001 - Аналого-цифровой и цифро-аналоговый интерфейсы

1010 - Последовательная память

1100 - Управление радиоприемником

1101 - Часы/календарь

1111 - Зарезервировано для использования 10-разрядного адреса

R/W - Вид обмена (прием или передача)

Ack - Бит подтверждения

Рис. 3.24 - Формат передачи данных по шине I2С

Прежде, чем закончить обсуждение протокола I2C, следует обратить вни­мание на следующие обстоятельства. В некоторых устройствах требуется по­вторная посылка стартового бита, чтобы сбросить принимающее устройство в исходное состояние для приема следующей команды. Например, при чте­нии из EEPROM-памяти с последовательной выборкой первая команда по­сылает адрес ячейки, из которой производится считывание, а вторая коман­да выполняет чтение данных по этому адресу.

Следует также обратить внимание на возможность инициирования про­цесса передачи данных несколькими ведущими микроконтроллерами («multimastering»). Это может привести к возникновению коллизий, когда два устройства пытаются управлять шиной одновременно. Если один микроконт­роллер взял управление шиной, то есть установил стартовое состояние, до того, как другой попытается сделать тоже самое, то это не вызывает проблем. Проблема возникает, когда несколько устройств инициируют стартовое со­стояние одновременно, и требуется произвести арбитраж их запросов.

На практике осуществить арбитраж в этом случае достаточно просто. Во вре­мя передачи данных оба передатчика точно синхронизируют тактовые импуль­сы. Если при передаче адреса бит, который должен иметь значение 1, на самом деле принимает значение 0, то это указывает на то что шина занята другим устройством. В этом случае ведущее устройство отключается от шины и ждет, когда наступит состояние «конец передачи», после которого повторяет запрос.

Протокол I2C может быть легко реализован программным путем. Но при этом быстрый режим не может быть реализован из-за перегрузки процессо­ра, даже стандартный режим 100 Кбит/с может оказаться слишком быстрым для некоторых микроконтроллеров. Программная реализация наилучшим об­разом подходит тогда, когда в сети имеется только одно ведущее устройство. В этом случае нет необходимости синхронизироваться с другими устройства­ми или принимать сообщения от других ведущих устройств, работающих со слишком большой скоростью, которая не обеспечивается при программной реализации.

Лекция № 2.