При работе встроенного контроллера в ведущем режиме к выводу MOSI подключается выходная линия данных, а к MISO – входная. При работе в ведомом режиме выводы меняются ролями. Вывод SCK является выходом, если контроллер SPI работает в ведущем режиме, и входом, если в ведомом. В системах с несколькими ведущими устройствами все выводы SCK соединяются вместе. То же делается с выводами MOSI и MISO. На время отсутствия связи буферы выводов встроенного контроллера SPI переводятся в высокоимпедансное состояние. Последнее позволяет избежать конфликтов на шине SPI. В противном случае несколько выводов MISO ведомых устройств одновременно были бы активными, что не позволило бы ведущему устройству произвести прием достоверной информации.
Только одно из устройств системы в каждый момент времени может работать в ведущем режиме, остальные – только в ведомом. Ведущее устройство формирует сигналы на выводах MOSI и SCK, которые поступают на одноименные выводы ведомых устройств. Одно из выбранных ведомых устройств передает данные через вывод MISO на вывод MOSI ведущего устройства. Автоматическое управление направлением передачи выводов MOSI, MISO и SCK позволяет обойтись без изменений во внешних схемах управления, когда новое устройство начинает работать в ведущем режиме.
Вывод SS встроенного контроллера SPI используется в зависимости от того, в каком режиме работает данное устройство. При работе в ведомом режиме при подаче высокого уровня сигнала на вход SS устройство игнорирует сигналы SCK и удерживает вывод MISO в высокоимпедансном состоянии. Если же в ведомом режиме работы на входе SS установлен низкий логический уровень, то буферы линий MOSI и SCK разворачиваются на ввод, линия MISO – на вывод. При работе в ведущем режиме вывод SS может быть использован как обычная линия вывода. В системах со сложной логикой работы этот вывод может использоваться как вход сигнала обнаружения ошибки для индикации состояния шины в случаях, если более чем одно устройство пытается стать ведущим.
Схема управления контроллера SPI-интерфейса позволяет выбрать один из двух протоколов обмена и полярность импульсов синхронизации SCK. При работе в ведущем режиме возможно также программно выбрать частоту импульсов синхронизации.
Два бита регистра управления любого контроллера SPI-интерфейса определяют временную диаграмму обмена по шине SPI:
Бит СРНА назначает протокол обмена;
Бит CPOL определяет полярность сигнала синхронизации SCK.
В соответствии с комбинацией битов CPHA:CPOL принято различать четыре режима работы интерфейса SPI. Комбинации CPHA:CPOL = 00 соответствует режим 0, комбинации CPHA:CPOL = 11 – режим 3. Встроенный контроллер SPI МК позволяет программно настраивать режим SPI в процессе инициализации, в то время как периферийные ИС реализуют один или два режима SPI, которые определяются их техническим описанием. Наиболее часто это режимы 0 и 3.
Предусмотрено обнаружение двух системных ошибок в системах, использующих SPI-стандарт. Первая ошибка носит название "ошибка режима", вторая – "ошибка записи".
Ошибка режима. Эта ошибка возникает при работе SPI в ведущем режиме, если сигнал на выводе SS изменяется с 1 на 0. Это происходит, когда какое-то из ведомых устройств пытается стать ведущим. Для буферных устройств микроконтроллеров это может привести к катастрофическим последствиям.
В некоторых случаях защита не может быть осуществлена в полной мере. Например, если второе устройство перешло в ведущий режим, но не изменило сигнал SS сразу. Или два ведомых устройства пытаются одновременно использовать линию MISO. В этом случае может быть состязание их выходных буферов, но сигнала "ошибки системы" не будет и буферы останутся незащищенными. Можно дать несколько советов разработчику по предотвращению необратимых последствий.
Ошибка записи. Эта ошибка возникает при записи в регистр данных в процессе передачи данных и определяется особенностями логики встроенных систем, реализующих протокол связи в стандарте SPI. Поскольку регистр данных не имеет буфера для передаваемых данных, запись производится непосредственно в сдвиговый регистр. Для предотвращения искажения передаваемых данных предусматривается сигнал ошибки записи. Передача данных продолжается без нарушений, но новые данные в сдвиговый регистр не записываются. Эта ошибка обычно возникает в ведомых устройствах, так как они не располагают точной информацией о том, когда ведущее устройство выйдет на связь. Ведущее устройство само инициирует передачу и знает, когда работает его передатчик, поэтому ошибка такого рода для него маловероятна, хотя она обнаруживается так же, как и в ведомом устройстве.
Последовательный интерфейс RS-232C синхронной и асинхронной передачи данных пока остается наиболее распространенным интерфейсом периферийного оборудования микроконтроллерных систем. В персональных компьютерах на смену ему пришел интерфейс USB, однако для связи компьютера с микроконтроллерными системами интерфейс RS-232C по-прежнему востребован. Интерфейс RS-232C, определенный стандартом Ассоциации электронной промышленности (EIA) и рекомендациями V.24 CCITT, подразумевает наличие оборудования двух видов: терминального (DTE) и связного (DСЕ). В качестве терминального оборудования может быть использован персональный компьютер, способный производить прием или передачу данных по последовательному интерфейсу. Под связным оборудованием понимаются устройства, которые могут упростить последовательную передачу данных совместно с терминальным оборудованием. Наглядным примером связного оборудования служит модем. В настоящее время интерфейс используется в самых различных устройствах, в том числе для обеспечения коммуникаций между компьютером и встраиваемой МП-системой управления. Обмен данными производится по двум линиям: линия RxD используется для приема данных, линия TxD – для передачи данных. Линия передачи одного устройства соединяется с линией приема другого, и наоборот (полный дуплекс). Для управления соединенными устройствами используется программное подтверждение (введение в поток передаваемых данных соответствующих управляющих символов). Возможна организация аппаратного подтверждения путем организации дополнительных линий RS-232 для обеспечения функций определения статуса и управления. Максимальная скорость передачи данных по линиям шины RS-232C составляет 115 кбит/с. Максимальная протяженность линий связи, по которым может быть осуществлена передача данных, составляет 15 м.
Большинство систем используют асинхронный режим передачи данных интерфейса RS-232, несмотря на то что его спецификация предусматривает также синхронный режим. В асинхронном режиме каждый пакет содержит один символ кода ASCII (американский стандартный код для обмена информацией) или один байт произвольно закодированной информации. Символы кода ASCII представляются семью битами, например, буква А имеет код 1000001 (Рис. 10).
Рис. 10. Представление кода буквы А сигналами уровня ТТЛ
Наиболее широко распространен формат, включающий в себя один стартовый бит, один бит паритета и два стоповых бита. Сигнал с уровнями ТТЛ, формируемый на выходе TxD модуля контроллера последовательного приемопередатчика при передаче кода буквы А, показан на рис. 11. Начало пакета данных всегда отмечает низкий уровень стартового бита. После него следует 7 бит данных символа кода ASCII. Бит паритета содержит 1 или 0 так, чтобы общее число единиц в 8-битной группе было четным (четный паритет) или нечетным (нечетный паритет). Последними передаются два стоповых бита, представленных высоким уровнем напряжения.
Рис. 11. Вид кода буквы А на линиях связи TxD или RxD интерфейса RS-232C
Таким образом, полное асинхронно передаваемое слово данных состоит из 11 бит (фактически данные содержат только 7 бит, остальные биты выполняют служебные функции). Другой распространенный формат, часто используемый в МП-системах для произвольно закодированной информации: один стартовый бит, 8 бит данных, один стоповый бит.
* - количество ведомых узлов в системе.
Последовательный периферийный интерфейс SPI (Serial Peripheral Interface) предназначен для связи МК с периферийными устройствами МП-системы, основой которой он является. Наиболее часто эти устройства расположены на одной плате с МК, реже – это вынесенные пульты управления, индикаторные панели и т.п. В качестве периферийных устройств могут использоваться как простейшие сдвиговые регистры, так и сложные периферийные ИС со встроенными контроллерами управления, такие, как ЦАП, сигма-дельта АЦП с цифровой фильтрацией, последовательные запоминающие устройства типа FLASH или EEPROM, энергонезависимые ОЗУ и т.д. Рынок периферийных компонентов с интерфейсом, поддерживающим один из протоколов обмена SPI, чрезвычайно широк.
Рис. 12. Структурная схема сопряжения устройств с использованием интерфейса SPI
На рис. 12 представлена структурная схема сопряжения МК и двух периферийных ИС с использованием интерфейса SPI. В рассматриваемом примере МК является ведущим устройством, он инициирует обмен при передаче информации между МК и одной из периферийных ИС. Каждая из периферийных ИС является ведомым устройством. SPI-шина представлена тремя общими линиями связи (MISO, MOSI, SCK) и двумя линиями выбора ведомого устройства (SS1, SS2), которые индивидуальны для каждой периферийной ИС:
MOSI – линий передачи данных от ведущего к ведомому (Master Output Slave Input).
MISO – линия передачи данных от ведомого к ведущему (Master Input Slave Output).
SCK – линия сигнала стробирования данных.
SS1 и SS2 – линии сигналов выбора ведомого устройства.
Как видно из рис.12, образованная на основе интерфейса SPI минисеть относится к классу магистрально-радиальных. Линии передачи данных и линия синхронизации являются примером шинной организации, а линии выбора ведомого устройства – элементом системы радиального типа. Перед началом обмена ведущее устройство отмечает одно ведомое устройство, с которым будет производиться обмен. Для этого на линии выбора устройства SSi устанавливается низкий активный уровень сигнала. Затем ведущее устройство последовательно выставляет на линию MOSI восемь бит информации, сопровождая каждый бит сигналом синхронизации SCK. Ведомое устройство дешифрирует переданный байт информации и определяет, в каком направлении будет производиться дальнейший обмен. Если ведомое устройство должно принимать информацию, то ведущее устройство, не снимая сигнала выбора ведомого SSi, продолжит передачу по линии MOSI. Если ведомое устройство должно передавать информацию, то оно активизирует линию MISO и в ответ на каждый импульс синхронизации от ведущего будет выставлять один бит информации (Рис.13). Длина посылки обмена в общем случае не ограничена и может составлять даже не целое число байтов. Завершение обмена также инициируется ведущим посредством установки в неактивное состояние сигнала выбора ведомого SSi.
Рис. 13. Временные диаграммы, поясняющие принцип действия SPI-интерфейса
Значительно реже SPI-интерфейс используется для организации межпроцессорной связи.
Для подключения к SPI-шине встроенный контроллер SPI имеет четыре вывода: MOSI, MISO, SCK, SS. Встроенный контроллер SPI может работать как в ведущем, так и в ведомом режиме. Скорость приема и передачи определяется частотой тактирования: для большинства МК максимальная скорость обмена в ведущем режиме составляет 1 Мбит/с, в ведомом – 2 Мбит/с.
Сигналы интерфейса RS-232C делят на следующие классы:
1. Последовательные данные (например, TxD, RxD). Интерфейс RS-232C обеспечивает два независимых последовательных канала данных: первичный (главный) и вторичный (вспомогательный). Оба канала могут работать в дуплексном режиме, т.е. одновременно осуществлять передачу и прием информации.
2. Управляющие сигналы квитирования (например, RTS, CTS). Сигналы квитирования – это средство, с помощью которого обмен сигналами позволяет DTE начать диалог с DСЕ до фактических передачи или приема данных по последовательным линиям связи.
3. Сигналы синхронизации (например, ТС, RC). В синхронном режиме (в отличие от более распространенного асинхронного) между устройствами необходимо передавать сигналы синхронизации, которые осуществляют тактирование принимаемого сигнала в целях его декодирования.
На практике вспомогательный канал RS-232C применяется редко, и в асинхронном режиме из 25 сигнальных линий интерфейса обычно используются только девять.
Стандарт RS-232C использует несимметричные передатчики и приемники - сигнал передается относительно общего провода - схемной земли. Интерфейс не обеспечивает гальванической развязки устройств. Логической единице соответствует напряжение на входе приемника в диапазоне -12...-3В. Для линий управляющих сигналов это состояние называется ON ("включено"), для линий последовательных данных - MARK. Логическому нулю соответствует диапазон +3...+12В. Для линий управляющих сигналов состояние называется OFF ("выключено"), а для линий последовательных данных - SPACE. Диапазон -3..+3В - зона нечувствительности, обусловливающая гистерезис приемника: состояние линии будет считаться измененным только после пересечения порога. Уровни сигналов на выходах передатчиков должны быть в диапазонах -12..-5В и +5...+12В для представления единицы и нуля соответственно. Разность потенциалов между схемными землями (SG) соединяемых устройств должна быть менее 2В, при более высокой разности потенциалов возможно неверное восприятие сигналов. Интерфейс предполагает наличие защитного заземления для соединяемых устройств, если они оба питаются от сети переменного тока и имеют сетевые фильтры.
Подключение и отключение интерфейсных кабелей устройств с автономным питанием должно производиться при отключенном питании. Иначе разность невыровненных потенциалов устройств в момент коммутации может оказаться приложенной к выходным или входным (что опаснее) цепям интерфейса и вывести из строя микросхемы.
На физическом уровне последовательный интерфейс имеет различные реализации, различающиеся способом передачи электрических сигналов. Существует ряд родственных международных стандартов: RS-232C, RS-423A, RS-422A и RS-485. Несимметричные линии интерфейсов RS-232C и RS-423A имеют самую низкую защищенность от синфазной помехи, хотя дифференциальный вход приемника RS-423A несколько смягчает ситуацию. Лучшие параметры имеет двухточечный интерфейс RS-422A и его магистральный (шинный) аналог RS-485, работающие на симметричных линиях связи. В них для передачи каждого сигнала используются дифференциальные сигналы с отдельной (витой) парой проводов. Для связи на короткие расстояния приняты стандарты беспроводной инфракрасной связи. Наибольшее распространение в PC получил простейший из перечисленных - стандарт RS-232C, реализуемый СОМ-портами. В промышленной автоматике широко применяется RS-485, а также RS-422A, встречающийся и в некоторых принтерах. Существуют преобразователи сигналов для согласования этих родственных интерфейсов.