Назад к основам: SPI (последовательный периферийный интерфейс)

Добавлено 8 марта 2017 в 15:00

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

Три наиболее распространенных многопроводных форматов последовательной передачи данных, которые использовались в течение десятилетий, это I2C, UART и SPI. В данной статье рассматривается шина SPI (Serial Peripheral Interface, последовательный периферийный интерфейс), которая избегает явной стандартизации, поэтому всегда проверяйте спецификацию интегральной микросхемы, с которой работаете, прежде чем реализовывать протокол.

Возможности и характеристики

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

Базовая конфигурация ведущий-ведомый

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

Анимация 1 показывает данные, перемещаемые из микросхемы A в микросхему B, и из микросхемы B в микросхему A
Анимация 1 показывает данные, перемещаемые из микросхемы A в микросхему B, и из микросхемы B в микросхему A
Анимация 2 показывает диаграмму виртуального 4-канального осциллографа, отображающую SPI передачу между двумя микросхемами
Анимация 2 показывает диаграмму виртуального 4-канального осциллографа, отображающую SPI передачу между двумя микросхемами

Так как SPI не стандартизирован, можно столкнуться с ситуациями, когда сначала передается старший значащий бит (MSB, Most Significant Bit) или младший значащий бит (LSB, Least Significant Bit). Проверьте техническое описание вашего устройства и настройте соответствующим образом ваши функции обработки данных. Если вы используете Arduino, то можете обраться к описанию библиотеки SPI о настройке SPI порта.

Полярность и фаза тактового сигнала

Переходы тактового сигнала регулируют сдвиг и выборку данных. SPI имеет четыре режима (0, 1, 2, 3), которые соответствуют четырем возможным конфигурациям синхронизации.

Биты, которые выбираются при нарастающем фронте тактового сигнала, сдвигаются при спадающем фронте тактового сигнала, и наоборот.
Биты, которые выбираются при нарастающем фронте тактового сигнала, сдвигаются при спадающем фронте тактового сигнала, и наоборот.

Каждая передача начинается, когда линия выбора ведомого приводится уровню логического нуля (выбор ведомого обычно является сигналом с активным низким уровнем). Точная взаимосвязь между линиями выбора ведомого, данных и тактового сигнала зависит от конфигурации полярности тактового сигнала (CPOL) и фазы тактового сигнала (CPHA).

При неинвертированной полярности тактового сигнала (то есть, тактовый сигнал находится в состоянии низкого логического уровня, когда выбор ведомого переходит на низкий логический уровень):

  • Режим 0: Фаза тактового сигнала сконфигурирована таким образом, что данные выбираются по нарастающему фронту тактового импульса и сдвигаются по спадающему фронту тактового импульса. Это соответствует первой синей диаграмме тактового сигнала на рисунке выше. Обратите внимание, что данные должны быть доступны до первого нарастающего фронта тактового сигнала.
  • Режим 1: Фаза тактового сигнала сконфигурирована таким образом, что данные выбираются по спадающему фронту тактового импульса и сдвигаются по нарастающему фронту тактового импульса. Это соответствует второй синей диаграмме тактового сигнала на рисунке выше.

При инвертированной полярности тактового сигнала (то есть, тактовый сигнал находится в состояние высокого логического уровня, когда выбор ведомого переходит в низкий логический уровень):

  • Режим 2: Фаза тактового сигнала сконфигурирована таким образом, что данные выбираются по спадающему фронту тактового импульса и сдвигаются по нарастающему фронту тактового импульса. Это соответствует первой оранжевой диаграмме тактового сигнала на рисунке выше. Обратите внимание, что данные должны быть доступны до первого спадающего фронта тактового сигнала.
  • Режим 3: Фаза тактового сигнала сконфигурирована таким образом, что данные выбираются по нарастающему фронту тактового импульса и сдвигаются по спадающему фронту тактового импульса. Это соответствует второй оранжевой диаграмме тактового сигнала на рисунке выше.

Ключевые термины

CLK
Последовательный тактовый сигнал. Управляется ведущим устройством. Новый бит данных сдвигается с каждым периодом тактового сигнала.
SSN
Выбор ведомого (Slave Select) ("N" указывает, что это сигнал с активным низким уровнем). Управляется ведущим устройством. Активная линия выбора ведомого указывает, что ведущее устройство (мастер) передает данные или запрашивает данные от соответствующего ведомого устройства.
MOSI
Выход ведущего ⇒ вход ведомого (Master Out ⇒ Slave In). Данные выходят из ведущего устройства и поступают в ведомое устройство. Линии MOSI микросхемы A подключаются к линиям MOSI микросхемы B.
MISO
Вход ведущего ⇐ выход ведомого (Master In ⇐ Slave Out). Данные выходят из ведомого устройства и поступают в ведущее устройство (или в другое ведомое устройство в кольцевой схеме; смотрите следующий параграф). Линии MISO микросхемы A подключаются к линиям MISO микросхемы B.
CPOL
Полярность тактового сигнала. Определяет начальное логическое состояние тактового сигнала. Для более подробной информации смотрите предыдущий параграф.
CPHA
Фаза тактового сигнала. Определяет взаимосвязь между переходами на линиях данных и переходами на линии тактового сигнала. Для более подробной информации смотрите предыдущий параграф.

Выбор ведомого и последовательная схема

Схема с несколькими линиями выбора ведомых устройств

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

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

В схеме с несколькими ведомыми устройствами каждое ведомое устройство требует отдельной линии выбора ведомого, идущей от ведущего устройства. Если у ведущего устройства недостаточно выводов ввода/вывода для требуемого количества ведомых устройств, расширение ввода/вывода может быть реализовано путем включения декодера/демультиплексора, например, 74HC(T)238 (PDF) (декодер/демультиплексор линий 3→8).

Последовательная схема

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

Кольцевая схема включения устройств SPI
Последовательная схема включения устройств SPI

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

Эта схема хорошо подходит для индивидуально адресуемых светодиодных лент, которые популярны во время праздников.

Заключение

SPI (последовательный периферийный интерфейс) существует уже десятки лет, и нет основания ожидать, что он уйдет в ближайшее время. Хотя I2C и UART могут пользоваться большей популярностью, SPI – это универсальный и простой интерфейс последовательной связи, который отлично подходит для определенных приложений.

Теги

MCUSPI (последовательный периферийный интерфейс)МикроконтроллерПолярность тактового сигналаПоследовательная связьФаза тактового сигналаЦифровая связь

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.