Протоколы последовательного обменаПротокол SPI. Общие сведения. Интерфейс SPI (Serial Peripheral Inter­face), предложенный фирмой Motorola, поддерживает протокол синхронного об­мена в стандарте SPI. Модули SPI входят в состав многих микроконтроллеров се­мейств НС05, НС11 и НС08. Стандарт SPI предназначен для связи микроконт­роллера с периферийными устройствами, которые могут быть расположены с ним на одной плате.

В качестве периферийных устройств используются простейшие сдвиговые ре­гистры и сложные интегральные схемы со встроенными контроллерами управле­ния (ЦАП, АЦП с цифровой фильтрацией, последовательные запоминающие уст­ройства типа FLASH или EEPROM, энергонезависимые ОЗУ и др.). Интерфейс SPI может быть использован для обмена данными между несколькими микроконтрол­лерами системы. В микроконтроллерах других производителей протокол SPI обычно реализуется одним из контроллеров последовательного интерфейса в ка­честве альтернативного протокола.

В протоколе SPI используется симметричный тактовый сигнал, который имеет одинаковую длительность высокого и низкого уровня. Сначала передается байт, содержащий команду для принимающего устройства. Затем следует необяза­тельный 16–разрядный адрес, после чего — данные в виде множества байтов, ко­торые называются блоком или страницей. Передатчик имеет возможность приос­тановить передачу данных. Бит данных выставляется на линию до поступления переднего фронта тактового импульса, а считывается до появления заднего фронта. Временной интервал должен составлять не менее 30 нс.

рис. 4.6.1

Организация обмена. На рис. 4.6.1 приведена схема подключения пери­ферийных устройств к микроконтроллеру, в которой контроллер является веду­щим устройством, а каждое периферийное устройство ПУ — ведомым. Для обме­на данными используется шина с тремя общими линиями связи и индивидуаль­ными линиями (SS1, ..., SSN) для выбора ведомого устройства, при этом:

    MOSI (Master Output Slave Input) — линия передачи данных от ведущего МК к ведомому устройству с входом данных DI;

●     MISO (Master Input Slave Output) — линия передачи данных от ведомого уст­ройства с выходом DO к ведущему МК;

●     SCK — линия сигнала стробирования (тактирования) данных.

Представленная на рис. 4.6.1 сеть относится к классу магистрально–радиальных: линии передачи данных и синхронизации относятся к магистральному типу, а линии выбора ведомого устройства — к радиальному.

Обмен данными по протоколу SPI протекает в такой последовательности:

●     ведущее устройство перед началом обмена выбирает одно из ведомых уст­ройств, устанавливая на его входе SSn# (n = 1...N; # — знак инверсии) низ­кий активный уровень сигнала, а затем последовательно выставляет на ли­нию MOSI восемь бит данных, сопровождая каждый бит импульсом синхрони­зации SCK;

●     ведомое устройство дешифрирует переданный байт данных и определяет на­правление обмена:

•      если ведомое устройство ПУn должно принимать информацию, то ведущее устройство, не снимая сигнала выбора ведомого SCn#, продолжит пере­дачу по линии MOSI;

•      если ведомое устройство должно передавать информацию, то оно активи­зирует линию MISO, и в ответ на каждый импульс синхронизации от веду­щего устройства будет выставлять один бит данных;

●     ведущее устройство инициирует завершение обмена установкой на входе SCn# ведомого устройства высокого уровня сигнала. Длина посылки обмена должна составлять целое число байтов.

табл. 4.6.1

Встроенные в МК фирмы Motorola модули SPI–контроллеров могут работать как в ведущем, так и в ведомом режимах. Режим назначается путем установки бита регистра управления. Назначение выводов в обоих режимах приведено в табл. 4.6.1. Скорость приема и передачи определяется частотой тактирования межмодульных магистралей МК fBUS:

●     в ведущем режиме скорость обмена не может превышать fBUS/2;

    в ведомом режиме максимальная скорость обмена равна fBUS.

В системах с несколькими ведущими устройствами все выводы MOSI, MISO и SCK соединяются вместе. Чтобы избежать конфликтов на шине SPI, буферы выводов контроллера на время отсутствия связи переводятся в высокоомное со­стояние.

табл. 4.6.2

Устройство управления SPI–контроллера с помощью двух бит СРНА (назначает протокол обмена), CPOL (определяет полярность сигнала синхронизации SCK) обеспечивает работу в четырех режимах (табл. 4.6.2), из которых наибольшее распространение получили режимы 0 и 3, поскольку режимы 0 и 1, 2 и 3 отлича­ются лишь полярностью тактируемых импульсов.

рис. 4.6.2

На рис. 4.6.2 приведены временные диаграммы для всех четырех режимов. Диаграммы относятся как к ведущему, так и к ведомому устройству, поскольку полагаем, что в качестве ПУ используется МК и выводы MISO и MOSI ведущего МК соединены с аналогичными выводами ведомого. Сигнал SS# подается только на ведомое устройство. Вывод SS у ведущего устройства не задействован, что соответствует его неактивному состоянию (его диаграмма не представлена). Длина посылки составляет один байт. Рассмотрим особенности протоколов.

Протокол СРНА = 0. Начало обмена инициируется переводом ведомого устройства в активное состояние установкой сигнала выбора ведомого SS# = 0 (рис. 4.6.2).

При передаче по линии MOSI (от ведущего к ведомому) первый и все нечетные перепады SCK, т. е. фронты тактовых импульсов, используются ведомым устрой­ством для записи текущего бита во внутренний сдвиговый регистр. Ведущее уст­ройство по каждому второму перепаду (по срезу) синхроимпульсов SCK заканчи­вает передачу текущего бита и выставляет на линию очередной бит данных.

При передаче по линии MISO (от ведомого к ведущему) бит D7 передаваемого байта должен быть выставлен ведомым устройством на линию сразу после изме­нения уровня сигнала SS# из 1 в 0. По первому и всем последующим нечетным перепадам (фронтам) тактовых импульсов SCK бит принимаемых данных записы­вается в младший разряд сдвигающего регистра ведущего устройства.

Так как принимаемые биты данных заносятся в регистры приемников по фрон­ту тактовых импульсов, сигнал на линии SS выбора ведущего должен быть воз­вращен в неактивное состояние SS# = 1 после передачи каждого байта в любом направлении. Поэтому передача каждого нового байта сопровождается предва­рительной установкой SS в «0» (рис. 4.6.3).

рис. 4.6.3

Протокол СРНА = 1. Начало обмена также инициируется переводом ведо­мого устройства в активное состояние установкой сигнала выбора ведомого SS# = 0 (рис. 4.6.2).

При передаче данных по линиям MOSI и MISO (в обоих направлениях):

●     выдвижение очередного бита данных из сдвигающего регистра передатчиков в линию происходит по фронту тактовых импульсов SCK;

●     запись переданного бита в сдвигающий регистр приемников осуществляется по срезу синхроимпульсов SCK.

Сигнал выбора ведомого может оставаться в активном состоянии SS# = 0 в течение передачи нескольких байт информации (рис. 4.6.3).

Протокол I2С. Общие сведения. Протокол, или стандарт PC, разработан­ный компанией Philips в конце 70–х годов для сети микроконтроллеров, реализует последовательный синхронный интерфейс между микропроцессорами и перифе­рийными устройствами, не требующий многочисленных линий для передачи раз­рядов адреса, данных и сигналов управления.

Основные особенности интерфейса I2C:

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

● возможность разделения сетевых ресурсов между несколькими ведущими процессорами;

    арбитраж одновременно передающих устройств без разрушения целостности передаваемых данных;

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

рис. 4.6.4

Структура интерфейса. Последовательный интерфейс I2C представляет собой шину, к которой подсоединены контроллеры и периферийные устройства (рис. 4.6.4). Шина содержит две линии:

●     линию SDA для двунаправленной передачи данных;

●     линию SCL, по которой передаются синхроимпульсы для стробирования данных.

Обе линии подключены через резисторы R к шине питания Vdd, или, как гово­рят, «подтянуты» к высокому уровню потенциала. Все устройства соединены с ли­ниями по схеме «монтажное И». Такое схемное решение позволяет устройствам управлять линиями, переводя их в состояние высокого или низкого уровня. Двух­проводная линия используется для определения начала передачи данных, а также для передачи самих данных.

Формат команды. Согласно протоколу интерфейса I2С каждое устройство имеет свой адрес. Все подключенные к шине устройства следят за выставляемым на шину адресом и сравнивают его с собственным адресом. Поэтому для иниции­рования обмена данными с требуемым ведомым устройством ведущее устрой­ство должно выставить на шину его адрес. Адрес получателя содержит 7 бит. Первые четыре бита адреса обычно служат для определения типа выбираемого устройства в соответствии со следующим соглашением:

●     0000 — зарезервированный адрес;

●     0010 — синтезатор голоса;

●     0011 — аудио – интерфейс;

    0100 — звуковой генератор;

●     0111 — жидкокристаллический или светодиодный дисплей;

●     1000 — видео – интерфейс;

●     1001 — аналого–цифровой и цифро–аналоговый интерфейсы;

●     1010 — последовательная память;

●     1100 — управление радиоприемником;

●     1101 — часы/календарь;

●     1111 — зарезервировано для использования 10–разрядного адреса.

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

Существует также 10–разрядный стандарт для передачи адреса. Вместе с адресом передается бит направления передачи R/W:

●     при R/W = 0 реализуется режим записи, в котором данные поступают из ве­дущего устройства в ведомое;

●     при R/W = 1 осуществляется режим чтения, в котором данные передаются в обратном направлении — из ведомого устройства в ведущее. Для завершения приема байта в формате команды предусмотрен бит под­тверждения АСК#.

Формат сообщения, поступающего от ведущего устройства к ведомому, по­казан на рис. 4.6.5.

рис. 4.6.5

Принцип функционирования. Ведущее (главное) устройство генерирует все последовательные синхроимпульсы и сигналы START и STOP, определяющие условия начала и конца передачи данных. Режимы обмена данными зависят от сигналов START, STOP и от бит SCL, SDA (табл. 4.6.3).

табл. 4.6.3

При отсутствии передаваемых данных шина находится в ждущем состоянии (режиме ожидания). На линиях SDA и SCL установлен высокий логический уро­вень — потенциал Vcc. Для инициирования передачи данных ведущее устрой­ство, запрашивающее управление шиной, устанавливает низкий уровень сначала на линии SDA, а затем на линии SCL. Переход в стартовое состояние START про­исходит в момент изменения SDA из высокого уровня в низкий при высоком уров­не SCL (рис. 4.6.6). В процессе пересылки данных такое состояние шины являет­ся нерабочим, так как прием передаваемых данных производится только при вы­соком (активном) уровне синхросигнала на линии SCL.

рис. 4.6.6

Адрес и данные передаются синхронным способом, начиная со старшего бита. После передачи 8 бит ведущее устройство переводит линию данных SDA в ждущее состояние, до появления на ней сигнала подтверждения приема данных АSК# = 0 от ведомого устройства, после получения которого на обеих линиях устанавливается низкий уровень. Затем производится пересылка следующего байта или шина переводится в состояние завершения передачи STOP.

Для завершения передачи данных выполняются обратные действия: сначала устанавливается высокий уровень сигнала на линии SCL, а затем — на линии дан­ных SDA. Переход в состояние STOP происходит в момент изменения SDA из низ­кого уровня в высокий при высоком уровне SCL (рис. 4.6.6). По завершении пере­дачи приемник может готовиться к следующему запросу данных.

Отметим, что в некоторых устройствах требуется повторная посылка стартово­го бита, чтобы сбросить принимающее устройство в исходное состояние для при­ема следующей команды. Например, при чтений EEPROМ–памяти с последова­тельной выборкой первая команда посылает адрес ячейки, из которой произво­дится считывание, а вторая команда выполняет чтение данных по этому адресу.

Арбитраж. Протокол I2C предоставляет возможность инициирования про­цесса передачи данных несколькими ведущими микроконтроллерами (Multimastering). Если один микроконтроллер установил стартовое состояние и взял управление шиной на себя до того, как другой попытался сделать то же самое, то это не вызывает никаких проблем. Проблема возникает, когда несколько уст­ройств одновременно инициируют стартовое состояние. В этом случае возникают столкновения, или коллизии, которые разрешаются путем арбитража их запро­сов. Для реализации арбитража используется подключение устройств по схеме «монтажное И». Поэтому, если один из передатчиков выставляет бит адреса Аn = 0, то другой передатчик не может выставить Аk = 1. Он отключается от шины и ждет, когда наступит состояние STOP — конец передачи, после чего повторяет свой запрос. Таким образом, арбитраж выигрывает ведущее устройство, которое обращается к ведомому устройству с меньшим значением текущего бита адреса.

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

Виды обмена. В зависимости от направления передачи возможны два вида обмена данными для I2C–шины:

●     передача данных от главного (ведущего) передатчика к подчиненному (ведо­мому) приемнику, при которой:

•      первый байт, передаваемый главным передатчиком, является адресом под­чиненного приемника;

•      последующие посылки являются байтами данных;

•      после каждого принятого байта подчиненный приемник возвращает бит подтверждения (АСК# = 0);

●     передача данных от подчиненного (ведомого) передатчика к главному (веду­щему) приемнику, при которой:

•      первый байт, передаваемый главным приемником, является адресом под­чиненного передатчика;

•      подчиненный передатчик возвращает бит подтверждения АСК#;

•      следующие байты данных передаются подчиненным передатчиком главно­му приемнику;

•      главный приемник возвращает бит подтверждения АСК# после каждого принятого байта, кроме последнего. В конце последнего принятого байта главный приемник возвращает НЕТ ПОДТВЕРЖДЕНИЯ.

Модуль контроллера интерфейса I2C, который удовлетворяет спецификации I2C–шины и поддерживает два вышеперечисленных типа передачи данных, может работать в следующих четырех режимах.

Режим главного передатчика. В этом режиме из главного передатчика (ведущего устройства) в приемник (подчиненное, или ведомое устройство) осу­ществляется:

    по линии SDA последовательный вывод данных. Первый переданный байт со­держит адрес подчиненного приемного устройства (7 бит) и бит направления данных R/W = 0. Последующие байты являются данными. После отправки каждого байта главный передатчик ожидает от подчиненного устройства бит подтверждения ASK (пунктир на рис. 4.6.6). Формируемые главным передат­чиком сигналы START и STOP служат для указания начала и конца сеанса по­следовательного обмена;

    по линии SCL передача последовательности синхроимпульсов для стробирования передаваемых данных в приемнике.

Режим главного приемника. В этом режиме:

●     инициатором обмена является главный приемник — ведущее устройство. Он передает первый байт, содержащий адрес (7 бит) передатчика (подчиненно­го, или ведомого устройства) и бит направления данных R/W = 1;

●     последовательные данные (по 8 бит) передаются по линии SDA от передатчи­ка к главному приемнику,

●     после каждого принятого байта приемник выставляет сигнал подтверждения приема (ASK# = 0);

●     сигналы START и STOP формируются передатчиком и передаются по линии данных SDA;

●     импульсы синхронизации формируются главным приемником и передаются по линии SCL.

Режим подчиненного приемника. В этом режиме сигналы START и STOP, адрес и последовательные данные, бит направления R/W = 0, бит под­тверждения ASK = 0 и синхроимпульсы формируются передатчиком и передаются по линиям SDA и SCL на входы подчиненного приемника. Распознавание адреса выполняется аппаратными средствами приемника после получения адреса под­чиненного устройства и бита направления.

Режим подчиненного передатчика. В этом режиме:

●     инициатором обмена и ведущим устройством является главный приемник. Он формирует и передает по линии SDA сигналы START и STOP, биты подтверж­дения ASK и только первый байт данных, содержащий адрес (7 бит) подчи­ненного передатчика и бит направления передачи данных R/W = 1, а по линии SCL — синхроимпульсы;

    в принятом первом байте подчиненный передатчик изменяет на обратное на­правление обмена (R/W = 0) и начинает передавать последовательные данные по линии SDA к приемнику. После каждого переданного байта передатчик вы­являет наличие на линии бита подтверждения ASK и анализирует его.

Протокол CAN. Общие сведения. Протокол CAN (Controller Area Network — сеть контроллеров) разработан компанией Bosch как сетевое решение для связи компьютерных систем, применяемых в автомобилях. До его появления не суще­ствовало единого стандарта и для связи различных электронных устройств авто­мобиля использовалось около трех миль проводов весом свыше 90 кг. По за­мыслу разработчиков протокол CAN должен был обеспечить:

●     простоту и небольшое количество разъемных контактов для повышения меха­нической надежности;

●     легкость подключения и удаления устройств;

●     низкую чувствительность к электромагнитным помехам;

●     высокоскоростную надежную передачу данных в широковещательном (broad­cast) режиме в мультимастерной среде (без выделения ведущих и ведомых устройств).

Положения стандарта соответствуют двум начальным уровням (физическому и канальному) семиуровневой модели взаимодействия открытых систем ISO/OSI. Они закреплены в спецификации 2.0А/В фирмы «Bosch» и международном стан­дарте ISO 11898.

Физическая среда передачи данных — витая пара, плоский кабель, оптово­локно, радио– и инфракрасные каналы и даже линии электропередач. Струк­тура CAN–сети представлена на рис. 4.6.7. Максимальная протяженность сети при использовании стандартных трансиверов (приемопередатчиков) и быстро действующих оптопар для гальванической развязки при скорости передачи 1М бит/с составляет девять метров. Протяженность сети увеличивается при снижении скорости передачи.

рис. 4.6.7

В документах приведены следующие по­лученные практическим путем соотношения «скорость–протяженность» для проводной сети без гальванической развязки: 1М бит/с — 30 м; 500К бит/с — 100 м; 125К бит/с — 500 м; 20К бит/с — 2500 м, 10К бит/с — 5000 м.

Достоинством CAN–технологии является сочетание низкой стоимости подключения, простоты и надежности с доступностью эле­ментной базы и инструментальных средств разработки. Ряд производителей применяют CAN–интерфейс в выпускаемых ими контроллерах. Модуль контроллера CAN имеется в микроконтроллерах семейств НС08 фирмы «Motorola», С500 фирмы «lnfineon», 89 фирмы «Pfilips». Кроме того, существует несколько серийно выпускаемых микросхем (например, Intel 82527), которые эффективно и с минимальными дополнительными затратами способны выполнить функции CAN интерфейса.

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

В CAN–протоколе устройства не имеют собственного имени или адреса. Пере­даваемое сообщение несет в себе отличительную метку — идентификатор (ID). Сообщение принимается всеми устройствами. Каждое устройство на основании идентификатора из совокупности сообщений, транслируемых в данный момент, выделяет «свои». Такой способ адресации обеспечивает гибкий обмен сообщени­ями, простую возможность добавления устройств в сеть и их отключения.

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

Когда выходной сигнал контроллера не совпадает с уровнем сигнала на линии передачи данных (например, при выдаче 1 на линии оказывается 0), то контроллер останавливает передачу данных до тех пор, пока не завершится пересылка теку­щего сообщения. Этот простой и эффективный способ арбитража исключает необ­ходимость повторной посылки сообщения при возникновении коллизий на шине.

Типы кадров. В зависимости от инициатора передачи и ее цели существуют четыре типа кадров:

●     кадр данных (Data Frame), предназначенный для непосредственной передачи от 0 до 8 байтов данных. Кадр данных имеет стандартный и расширенный форматы;

●     кадр запроса данных (Remote Frame) от удаленного узла, имеющий также стандартный и расширенный форматы. Его отличия от кадра данных проявляют­ся в том, что в формате кадра отсутствует поле данных и бит RTR = 1 (см. ниже). При получении кадра запроса данных запрашиваемый узел отвечает передачей кадра данных;

●     кадр ошибки (Error Frame), сигнализирующий об ошибке. Он инициируется любым узлом, обнаружившим ошибку, так как по протоколу CAN правильность передачи контролируется каждым узлом;

●     кадр перегрузки (Overload Frame), используемый для задержки передачи дан­ных или посылки кадра запроса данных (при неготовности приемника или на­личии доминантных бит в промежутке между фреймами). В отличие от фрей­ма ошибки он не влияет на счетчик ошибок и не вызывает повторной переда­чи сообщения.

рис. 4.6.8

Формат кадра передачи данных с использованием 11–битного идентифи­катора показан на рис. 4.6.8. Ниже приведено назначение отдельных полей кадра:

●     SOF (Start Of Frame) — начало кадра, доминантный бит;

●     ID — идентификатор, 11– или 19–битный идентификатор сообщения;

●     RTR (Remote Transmission Request — запрос передачи данных) — бит, указы­вающий, что ведущее устройство является передатчиком (при RTR= 1) или приемником (при RTR = 0) данных. В расширенном формате фрейма вместо RTR используется бит SRR (Substitute Remote Request) с рецессивным уровнем;

●     IDE (ID Extension) — указатель формата: IDE = 0 для стандартного формата; IDE = 1 для расширенного формата;

●     r1 / r0 — зарезервированные (доминантные) биты;

●     DLC (Data Lenght Code — участок кода данных) — 4 бита, указывающие коли­чество передаваемых байт;

●     Data — от 0 до 8 передаваемых байт в данных, где старший бит идет первым;

●     CRC — 15–битный код контрольной суммы, за которым следует рецессивный бит;

●     АСК (Acknowledgement) — 2–битное поле подтверждения готовности (доми­нантный и рецессивный биты);

●     EOF (End Of Frame) — конец кадра (7 рецессивных бит), за которым следует 3 единичных бита, разделяющие кадры.

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

Арбитраж. Попытка передачи сообщений одновременно несколькими узла­ми сети вызывает коллизии, или столкновения в сети. Для арбитража используется идентификатор сообщения в сочетании со схемой подключения к шине типа МОНТАЖНОЕ ИЛИ. Узел, выставляющий на шину доминантный уровень (0), по­давляет рецессивный уровень (1), выставленный другим узлом. Арбитраж выигрывает узел с наивысшим приоритетом, которому соответствует наименьшее численное значение идентификатора. Этот узел продолжает передачу данных, остальным — доступ закрыт. Рассмотренный режим доступа к шине для передачи сообщений сразу выявляет победителя, не позволяя спорившим узлам устраи­вать столкновение на шине.

 

Обнаружение ошибок. CAN–протокол обладает эффективными средства­ми обнаружения ошибок, так как разработан для систем управления узлами авто­мобилей, критичных к уровню безопасности и степени достоверности передавае­мых данных. В CAN все узлы участвуют в проверке передаваемых по сети сооб­щений на наличие ошибок. При обнаружении ошибки хотя бы одним узлом со ста­тусом Error Active текущая передача прерывается генерацией кадра ошибки. Передатчик, сообщение которого было прервано, повторяет передачу.


Рекомендуйте эту статью другим!