МК

Протоколы для МК сетей (Тема)

 

Применительно к микроконтроллерам, термин «сеть» означает набор проводов (шины), которые используются для подключения дополнительных устройств или для связи с другими микроконтроллерами. То есть сеть МК отличается от локальной сети, например, такой, как EtherNet. Далее под микроконтроллерной сетью будем понимать отдельную линию связи (провод) и множество подключённых к ней устройств, которые могут и инициировать передачу сообщений, и посылать соответствующий отклик на полученное сообщение – то есть могут выступать в роли передатчика или приёмника.

В таких сетях имеется интеллектуальное устройство, которое может инициировать передачу данных – носит название ведущий (master). Устройства, которые только отвечают на запросы, но не могут их инициировать, называются «ведомые» (slaves). Микроконтроллерная сеть может иметь несколько ведущих устройств, и в этом случае сетевой протокол требует введения схемы арбитража, которая позволит различным ведущим устройствам передавать данные, не нарушая передачу других сообщений.

Обычно в микроконтроллерной сети передаётся небольшой объём данных в отличие от локальных сетей ЭВМ, и их пропускная способность довольно мала. Типовая оценка скорости – это несколько байт в секунду.

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

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

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

 

Рис. Пример организации шины I2C

 

Двухпроводная линия используется для определения начала передачи данных, а также для передачи самих данных. Чтобы начать передачу данных, шина переводится в стартовое состояние, так как при отсутствии передаваемых данных шина находится в пассивном ждущем состоянии (idle). При этом на обе линии сигналы не поступают, и на них установлен высокий уровень сигнала, равный напряжению питания.

Чтобы инициировать передачу данных, ведущее устройство, которое запрашивает управление шиной, устанавливает низкий уровень сначала на линии SDA, а затем на линии SCL (стартовое состояние). В процессе пересылки данных такое состояние шины является нерабочим, так как приём передаваемых данных производится только при высоком (активном) уровне синхросигнала на линии SCL.

Чтобы закончить передачу данных, выполняются обратные действия: на линии SCL устанавливается высокий уровень сигнала, а затем в такое же состояние переводится линия данных SDA.

 

Рис. Форма сигналов на шине I2C

 

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

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

Есть две максимальные скорости передачи данных по шине I2C: стандартный режим – до 100 Кбит/с и быстрый режим – до 400 Кбит/с. Временные диаграммы для этих режимов работы с указанием минимально допустимых длительностей интервалов времени приведены на рисунке далее.

 

Рис. Передача байта по шине I2C

 

Формат команды, передаваемой ведущим устройством ведомому, показан на рисунке. Адрес получателя содержит 7 бит. Обычно (но не обязательно) четыре старших бита адреса используются для указания типа устройства, а следующие три бита используются для выбора одного из 8 устройств этого типа или служат для более точного определения типа устройства. Иногда некоторые устройства требуют указания в качестве трёх последних адресных бит определённых кодов, а другие (например, микросхемы памяти EEPROM с последовательной выборкой) используют эти биты для выбора адресата внутри устройства.

 

Рис. Формат передачи данных по шине I2C:
R/W – вид обмена (приём или передача); Ack – бит подтверждения.

 

Существует также стандарт, в котором 10-разрядный адрес передаётся двумя байтами: в первом байте первые 4 бита содержат «1», следующий бит имеет значение «0», последние 2 бита являются старшими битами адреса, а завершающие 8 бит адреса передаются в следующем байте. Следует внимательно относиться к распределению адресов между устройствами, подключёнными к шине.

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

0000 – «Зарезервированный адрес»;

0010 – «Синтезатор голоса»;

0011 – «Аудио-интерфейс»;

0100 – «Звуковой генератор»;

0111 – «Жидкокристаллический или светодиодный дисплей»;

1000 – «Видео-интерфейс»;

1001 – «АЦП и ЦАП-интерфейсы»;

1010 – «Последовательная память»;

1100 – «Управление радиоприёмником»;

1101 – «Часы или календарь»;

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

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

Когда два устройства пытаются управлять шиной одновременно – инициировать процесс передачи данных несколькими ведущими МК multimastering – это может привести к возникновению коллизий. Если один МК уже взял управление шиной, установив на ней стартовое состояние, то попытка управления шиной со стороны другого МК будет блокирована. А если несколько МК инициирует стартовое состояние одновременно, то требуется произвести арбитраж их запросов.

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

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