Протокол spi
Протокол SPI похож на протокол Microwire, но имеет несколько отличий.
Рис. 9. Запись данных в протоколе SPI.
SPI способен передавать данные со скоростью до 3 Мбит и секунду.Разрядность данных в SP1 пакете равна 8 бит.
Передатчик в SPI имеет возможность приостановить передачу данных.
Данные в SP1 могут передаваться в виде множества байтов, которые называются "блок" или "страница".
Как и в протоколе Microwire, в SPI сначала передается байт, который содержит команду для принимающего устройства. Затем идет необязательный 16-разрядный адрес, после чего следуют 8-разрядные данные. Протокол SP1 позволяет передавать несколько байтов (рис. 9). В протоколе SPI используется симметричный тактовый сигнал, который имеет одинаковую длительность высокого и низкого уровня. Выходные данные должны быть выданы на линию по крайней мере за 30нс до поступления переднею фронта тактового сигнала, а считывание должно происходить за 30нс до заднего фронта.
Рис.
10. Подключение входа "D1"
и выхода
–"DO"
к одной пинии.
Сети
Под микроконтроллерной сетью будем понимать отдельную линию связи (провод) и множество подключенных к ней устройств, которые могут инициировать передачу сообщений и посылать соответствующий отклик на полученное сообщение.
В таких сетях имеется «ведущий» («master») — интеллектуальное устройство, которое может инициировать передачу данных. Устройства, которые отвечают на запросы, но не могут их инициировать, называются «ведомые» («slaves»). Микроконтроллерная сеть может иметь несколько «ведущих» устройств, В этом случае сетевой протокол требует включения схемы арбитража, которая позволит различным «ведущим» устройствам передавать данные, не нарушая других сообщений.
Обычно в микроконтроллерной сети передается относительно мало данных, поэтому требуемая для них пропускная способность весьма скромна по сравнению с сетью Ethernet. Часто микроконтроллерная сеть имеет пропускную способность порядка нескольких байт в секунду, тогда как сеть персональных компьютеров может передавать несколько Мбайт в секунду.
Протокол i2c
Наиболее популярный протокол для сети микроконтроллеров - I2C, который предназначен для связи устройств в многопроцессорных системах. Этот стандарт был разработан компанией Philips в конце 70-х годов как метод реализации интерфейса между микропроцессорами и периферийными устройствами, который не требует прокладки многочисленных линий для передачи между устройствами всех разрядов адреса, данных и сигналов управления. Протокол I2C позволяет разделять сетевые ресурсы между несколькими ведущими процессорами ("multimastering").
Рис.
11. Пример I2C
сети.
Шина 12С для управления стереосистемой может иметь вид, показанный на рис 11.
Двухпроводная линия используется для определения начала передачи данных, а также для передачи самих данных. Чтобы начать передачу данных, шина переводится в стартовое состояние. При отсутствии передаваемых данных шина находится в ждущем (пассивном) состоянии («idle»). При этом на обе линии сигналы не поступают, и на них установлен высокий уровень сигнала (потенциал Vcc). Чтобы инициировать передачу данных, ведущее устройство, которое запрашивает управление шиной, устанавливает низкий уровень сначала на линии SDA, а затем на линии SCL (стартовое состояние). В процессе пересылки данных такое состояние шины является нерабочим, так как прием передаваемых данных производится только при высоком (активном) уровне синхросигнала на линии SCL. Чтобы закончить передачу данных выполняются обратные действия: на линии SCL устанавливается высокий уровень сигнала, а затем в такое же состояние переводится линия данных SDA (рис. 12).
Рис.
12. Форма
сигналов на шине I2C.
Рис.13.
Передача
байта по шине I2C
Существует две максимальные скорости передачи данных по типе I2C: "стандартный режим" - до 100 Кбит/ с и "быстрым режим" - до 400 Кбит/с (рис. 14)
Указана
минимальная длительность интервалов
времени в микросекундах.
Рис.
14. Временная
диаграмма сигналов на шине I2C
R/W
- Вид обмена (прием или передача)
Ack
- Бит подтверждения
Рис.
15. Формат передачи данных по шине I2C
0000 - Зарезервированный адрес
0010- Синтезатор голоса
0011- Аудио - интерфейс 0100 - Звуковой генератор
0111 — Жидкокристаллический или светодиодный дисплей
1000- Видео - интерфейс
1001— аналого-цифровой и цифро-аналоговый интерфейсы 1010 — Последовательная память
1100- Управление радиоприемником
1101- Часы/календарь
1111 — Зарезервировано для использования 10-разрядного адреса
В некоторых устройствах требуется повторная посылка стартового бита, чтобы сбросить принимающее устройство в исходное состояние для приема следующей команды. Например, при чтении из EEPROM-памяти с последовательной выборкой первая команда посылает адрес ячейки, из которой производится считывание, а вторая команда выполняет чтение данных по этому адресу.
Следует также обратить внимание на возможность инициирования процесса передачи данных несколькими ведущими микроконтроллерами. Это может привести к возникновению коллизий, когда два устройства пытаются управлять шиной одновременно. Если один микроконтроллер взял управление шиной, то есть установил стартовое состояние, до того, как другой попытается сделать тоже самое, то это не вызывает проблем. Проблема возникает, когда несколько устройств инициируют стартовое состояние одновременно, и требуется произвести арбитраж их запросов.
Во время передачи данных оба передатчика точно синхронизируют тактовые импульсы. Если при передаче адреса бит, который должен иметь значение I, на самом деле принимает значение 0, то это указывает на то, что шина занята другим устройством. В этом случае ведущее устройство отключается от шины и ждет, когда наступит состояние "конец передачи", после которого повторяет запрос.
Протокол I2C может быть легко реализован программным путем. Но при этом даже стандартный режим 100 Кбит/с может оказаться слишком быстрым для некоторых микроконтроллеров. Программная реализация наилучшим образом подходит тогда, когда в сети имеется только одно ведущее устройство. В этом случае нет необходимости синхронизироваться с другими устройствами или принимать сообщения от других ведущих устройств, работающих со слишком большой скоростью, которая не обеспечивается при программной реализации.
