Основы протокола SPI

Когда вы подключаете микроконтроллер к датчику, дисплею или другому модулю, задумываетесь ли вы когда-нибудь о том, как эти два устройства общаются друг с другом? Что именно они говорят? Как они смогут понять друг друга?

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

К счастью для нас, существует всего несколько протоколов связи, которые нам нужно знать при создании большинства проектов электроники своими руками. Для начала мы рассмотрим основы трёх наиболее распространенных протоколов: последовательный периферийный интерфейс SPI, последовательная синхронная шина I2C и универсальная асинхронная связь, управляемая приемником/передатчиком UART.

SPI, I2C и UART немного медленнее, чем такие протоколы, как USB, Ethernet, Bluetooth и WiFi, но они намного проще и используют меньше аппаратных и системных ресурсов. SPI, I2C и UART идеально подходят для связи между микроконтроллерами, а также между микроконтроллерами и датчиками, когда не требуется передавать большие объемы высокоскоростных данных.

Последовательная и параллельная связь

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

В системе, работающей при напряжении +5В, бит 0 передается как короткий импульс , а бит 1 передается коротким импульсом +5В.

Биты данных могут передаваться как в параллельном, так и в последовательном виде. При параллельной передаче биты данных передаются одновременно, каждый по отдельному проводу. На следующей схеме показана параллельная передача буквы «R» в двоичном формате 01010010:

Параллельная передача данных
Рисунок 1. Условная параллельная передача символа «R»

При последовательной связи биты передаются один за другим по одному проводу. На следующей диаграмме показана последовательная передача буквы «R» в двоичном формате 01010010:

Последовательная передача данных
Рисунок 2. Последовательная передача символа «R»

Введение в SPI

SPI — это распространенный протокол связи, используемый многими устройствами. Например, модули чтения SD-карт, модули чтения RFID-меток, беспроводные передатчики/приемники используют SPI для связи с микроконтроллерами.

Одним из уникальных преимуществ SPI является тот факт, что данные могут передаваться без перерыва. Любое количество битов может быть отправлено или получено в непрерывном потоке. При использовании I2C и UART данные передаются пакетами, ограниченными определенным количеством бит. Условия запуска и остановки определяют начало и конец каждого пакета, поэтому передача данных прерывается во время передачи.

Устройства, обменивающиеся данными через SPI, находятся в отношениях «Master-Slave» (Ведущий-Ведомый).

Ведущее устройство — это управляющее устройство (обычно микроконтроллер), а ведомое устройство (обычно датчик, дисплей или микросхема памяти) получает инструкции от ведущего устройства. Простейшая конфигурация SPI — это система с одним ведущим устройством и одним ведомым устройством, но один ведущий может управлять более чем одним ведомым устройством (подробнее об этом ниже).

Ведущий (master) и Ведомый (Slave) протокола SPI
Рисунок 3. Схема подключения устройств для обмена по протоколу SPI

MOSI (Master Output / Slave Input) — выход ведущего, вход ведомого. Линия, по которой ведущий передает данные ведомому.

MISO (Master Input / Slave Output) – вход ведущего, выход ведомого. Линия, по которой ведомый передает данные ведущему.

SCLK (Clock) – линия для тактового сигнала.

SS/CS (Slave Select / Chip Select) – линия, позволяющая ведущему выбирать, на какое ведомое устройство отправлять данные.

Последовательный или параллельныйПоследовательный
Максимальное количество ведущих устройств1
Максимальное количество ведомых устройствВ теории, неограниченное количество*
Количество проводов4
Синхронный или асинхронныйСинхронный
Максимальная скорость передачиДо 10 Мбит/с
Таблица 1. Некоторые характеристики SPI
*На практике количество ведомых устройств ограничено емкостью нагрузки системы, что снижает способность ведущего переключать уровни напряжения.

Как работает SPI

Синхронизация (Clock)

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

Любой протокол связи, в котором устройства совместно используют тактовый сигнал, называется синхронным.

SPI — это протокол синхронной связи. Существуют также асинхронные методы, не использующие тактовый сигнал. Например, при передаче данных по UART обе стороны настроены на предварительно настроенную скорость передачи данных в бодах, которая определяет скорость и время передачи данных.

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

Выбор ведомого устройства (Select Slave)

Ведущий может выбрать, с каким ведомым устройством он хочет общаться, установив на линии CS/SS ведомого устройства низкий уровень напряжения. В режиме ожидания, в состоянии отсутствия передачи, линия выбора ведомого устройства поддерживается на высоком уровне напряжения.

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

Несколько ведомых устройств

SPI можно настроить для работы с одним ведущим и одним ведомым устройством. Также можно настроить для работы с несколькими ведомыми устройствами, управляемыми одним главным (ведущим) устройством.

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

Один мастер и 3 слэйва SPI параллельное подключение
Рисунок 4. Параллельное подключение трех ведомых устройств к одному мастеру

Если доступен только один контакт SS/CS выбора ведомого устройства, ведомые устройства можно подключить последовательно следующим образом:

Один мастер и 3 слэйва SPI последовательное подключение
Рисунок 5. Последовательное подключение трех ведомых устройств к одному мастеру

MOSI и MISO

Ведущий передает данные ведомому побитно, последовательно через линию MOSI. Ведомое устройство получает данные, отправленные от ведущего устройства, на вывод MOSI. Данные, передаваемые от ведущего устройства к ведомому, обычно передаются начиная со старшего бита.

Ведомое устройство также может отправлять данные обратно ведущему устройству через линию MISO в последовательном режиме. Данные, отправляемые от ведомого устройства обратно к ведущему, обычно передаются начиная с младшего бита.

Этапы передачи данных по SPI

  1. Ведущий (Master) выводит тактовый сигнал:
Передача тактового сигнала от мастера к слэйву в SPI
  1. Ведущий (Master) переключает вывод SS/CS в состояние низкого уровня напряжения, что активирует ведомое (Slave) устройство:
  1. Ведущий (Master) отправляет данные по одному биту за раз ведомому устройству по линии MOSI. Ведомое (Slave) устройство считывает биты по мере их поступления:
  1. Если требуется ответ, ведомое (Slave) устройство возвращает данные по одному биту за раз ведущему (Master) устройству по линии MISO. Ведущий считывает биты по мере их поступления:

Преимущества и недостатки SPI

У использования SPI есть некоторые преимущества и недостатки. Если у вас есть выбор между различными протоколами связи, вы должны знать, когда использовать SPI в соответствии с требованиями вашего проекта.

Преимущества

  • Нет стартовых и стоповых битов, поэтому данные могут передаваться непрерывно.
  • Нет сложной системы адресации ведомых устройств, такой как у I2C.
  • Более высокая скорость передачи данных, чем у I2C (почти в два раза быстрее).
  • Отдельные линии MISO и MOSI, поэтому данные можно отправлять и получать одновременно.

Недостатки

  • Использует четыре провода (I2C и UART используют два).
  • Нет подтверждения того, что данные были успешно получены (у I2C это есть).
  • Нет формы проверки ошибок, такой как бит четности в UART.
  • Допускается только один мастер.
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии