Что такое SPI-интерфейс. Учебный курс AVR. Работа с SPI модулем. Чтение и запись данных. Ч2 Протокол spi

SPI (Serial Peripheral Interface) – последовательный синхронный стандарт передачи данных в режиме полного дуплекса, разработанный компанией Motorola для обеспечения простого и недорогого сопряжения микроконтроллеров и периферии. SPI также иногда называют четырехпроводным (англ. four-wire) интерфейсом.SPI является синхронным протоколом, в котором любая передача синхронизирована с общим тактовым сигналом, генерируемым ведущим устройством (процессором). Принимающая периферия (ведомая) синхронизирует получение битовой последовательности с тактовым сигналом. К одному последовательному периферийному интерфейсу ведущего устройства-микросхемы может присоединяться несколько микросхем. Ведущее устройство выбирает ведомое для передачи, активируя сигнал «выбор кристалла» (chip select) на ведомой микросхеме. Периферия, не выбранная процессором, не принимает участие в передаче по SPI.
В SPI используются четыре цифровых сигнала:

  • MOSI или SI – выход ведущего, вход ведомого (англ. Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому;
  • MISO или SO – вход ведущего, выход ведомого (англ. Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.
  • SCK или SCLK – последовательный тактовый сигнал (англ. Serial CLocK). Служит для передачи тактового сигнала для ведомых устройств.
  • CS или SS – выбор микросхемы, выбор ведомого (англ. Chip Select, Slave Select).Как правило, выбор микросхемы производится низким логическим уровнем.

В зависимости от комбинаций полярности и фазы синхроимпульсов возможны четыре режима работы SPI.

Режим SPI Временная диаграмма
Режим SPI0

Режим SPI1
Активные уровень импульсов — высокий.

Режим SPI2

Сначала защёлкивание, затем сдвиг.

Режим SPI3
Активные уровень импульсов — низкий.
Сначала сдвиг, затем защёлкивание.

В таблице принято:

  • MSB — старший бит;
  • LSB — младший бит.

Мастеру приходится настраиваться на тот режим, который используется ведомым.
При обмене данными по интерфейсу SPI микроконтроллер может работать как ведущий (режим Master) либо как ведомый (режим Slave). При этом пользователь может задавать следующие параметры:

  • режим работы в соответствии с таблицей;
  • скорость передачи;
  • формат передачи (от младшего бита к старшему или наоборот).

Соединение двух микроконтроллеров по структуре ведущий – ведомый по интерфейсу SPI осуществляется по следующей схеме.

Выводы SCK, CS для ведущего микроконтроллера являются выходами, а ведомого микроконтроллера – входами.

Передача данных осуществляется следующим образом. При записи в регистр данных SPI ведущего микроконтроллера запускается генератор тактового сигнала модуля SPI, и данные начинают побитно выдаваться на вывод MOSI и соответственно поступать на вывод MOSI ведомого микроконтроллера. После выдачи последнего бита текущего байта генератор тактового сигнала останавливается с одновременной установкой в «1» флага «Конец передачи». Если поддерживаются и разрешены прерывания от модуля SPI, то генерируется запрос на прерывание. После этого ведущий микроконтроллер может начать передачу следующего байта либо, подав на вход SS ведомого напряжение уровня логической «1», перевести его в состояние ожидания.

Одновременно с передачей данных от ведущего к ведомому происходит передача и в обратном направлении, при условии, что на входе SS ведомого присутствует напряжение низкого уровня. Таким образом, в каждом цикле сдвига происходит обмен данными между устройствами. В конце каждого цикла флаг прерывания устанавливается в «1» как в ведущем микроконтроллере, так и в ведомом. Принятые байты сохраняются в приемных буферах для дальнейшего использования.

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

Вывод SS предназначен для выбора активного ведомого устройства и в режиме Slave всегда является входом. Каждый раз, когда на вывод SS подается напряжение уровня логической «1», происходит сброс модуля SPI. Если изменение состояния этого вывода произойдет во время передачи данных, и прием, и передача немедленно прекратятся, а передаваемый и принимаемый байты будут потеряны.

Если микроконтроллер находится в режиме Master, направление передачи данных через вывод SS определяется пользователем. Если вывод сконфигурирован как выход, он работает как линия вывода общего назначения и не влияет на работу модуля SPI. Как правило, в этом случае он используется для управления выводом SS микроконтроллера, работающего в режиме Slave.

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

Пример использования интерфейса SPI для микроконтроллеров STM32 хорошо описан в

Доброго времени суток! Сегодняшняя статья – небольшое теоретическое отступление, которое поможет нам при освоении курса «Программирование Ардуино» . Речь пойдёт об интерфейсе SPI. Что это такое и с чём его едят, мы постараемся разобраться в данной статье.

Для начала определение . SPI (Serial Peripheral Interface — последовательный периферийный интерфейс ) – это последовательный синхронный стандарт передачи данных, который предназначен для связи контроллера с различной периферией. Этот интерфейс простой и удобный. Под Аrduino написана специальная библиотека для работы с SPI.

Связь строится по принципу «ведущий-ведомый». В качестве ведущего устройства обычно выступает контроллер. Все остальные устройства, что подключаются в систему — ведомыми. Данные от ведущего устройства по шине данных передаются к одному из выбранных ведомых или наоборот от ведомого устройства к ведущему синхронно, по тактирующему сигналу ведущего.

Распиновка шины данных SPI состоит из 4-х линий: MOSI, MISO, CS и SCLK:

  • MOSI (Master Out Slave In — Ведущий-выход, Ведомый-вход ) или просто SI – передача данных происходит от ведущего устройства к ведомому.
  • MISO (Master In Slave Out — Ведущий-вход, Ведомый-выход ) или просто SO – передача данных происходит от ведомого устройства к ведущему.
  • CS (Chip Select — Выбор чипа ) или SS (Slave Select — Выбор ведомого ) – выбор ведомого устройства.
  • SCLK (Serial CLocK ) или просто SCK – передача тактового сигнала от ведущего устройства к ведомому.

Для того, чтобы передать данные от ведущего устройства к ведомому необходимо, чтобы ведущий выставил низкий уровень сигнала на линии CS ведомого, с которым собирается настроить связь. После этого биты передаются по линии MOSI. Для прекращения передачи данных ведущий как бы «отпускает» линию CS – выставляя на ней высокий уровень сигнала.

Для подключения нескольких ведомых устройств к шине данных SPI нужно на каждое из них завести свою индивидуальную линию CS. После того, как это будет выполнено, ведущее устройство сможет поочерёдно «дергать» линиями, переключаясь между ведомыми устройствами. Несколько ведомых можно подключать по разному: параллельно или последовательно.

Параллельное подключение ведомых устройств по шине данных SPI

Особенность параллельного подключения нескольких ведомых устройств заключается в том, что для создания связи используются общие линии SCLK, MOSI и MISO. При этом каждое ведомое устройство имеет свою линию SS(CS). Ведущее устройство определяет с каким «текущим ведомым» наладить обмен данными, путем формирования низкого уровня сигнала на соответствующей линии SSn (где n – 1,2…).

Для подключения к контроллеру n-числа ведомых устройств по интерфейсу SPI нужно выделить для данной цели n+3 выводов микроконтроллера.

Последовательное подключение ведомых устройств к шине SPI

Что же касается последовательного подключения ведомых устройств, то они используют общие линии SCLK и SS, а выход одного подключается ко вход другого. Линия MOSI ведущего устройству подключается к первому ведомому, а линия MISO — к последнему. Если смотреть на это подключение с точки зрения ведущего устройства, то по шине данных SPI, как бы подключено одно ведомое устройство.

Следует отметить преимущество такого типа подключения: можно подключать n-ое число устройств задействовав для этой цели всего 4 вывода микроконтроллере.

На этом пока всё, продолжение следует…

Синхронный последовательный интерфейс SPI предназначен для ввода- вывода данных в интерфейсах "точка-точка" с одним ведущим (SPI-master) и одним ведомым (SPI-slave) устройством (рис. 1.24). Схема управления SPI- master формирует тактовые импульсы SCK, по которым одновременно производится передача сигналов на выходе MOSI и прием сигналов на входе MISO. Эти же тактовые импульсы SCK, поступая в SPI-slave, управляют приемом сигналов на его входе MOSI и формированием сигналов на его выходе MISO. Раздельные сигнальные цепи MOSI и MISO позволяют легко реализовать полнодуплексный режим обмена данными.

Форматы данных, параметры сигналов, временные характеристики и т.п. в интерфейсе не регламентируются, например, скорость обмена данными определяется только частотой тактовых импульсов SCK, формируемых SPI- master. Максимальное расстояние зависит от уровня искажения сигналов в линиях связи, предполагается, что надежный обмен данными возможен при расстояниях до нескольких метров.

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

Например, микроконтроллеры семейства AVR фирмы ATMEL поддерживают ввод-вывод данных в режиме и SPI-master, и SPI-slave. Стандартный цикл обмена предполагает одновременную передачу в обоих направлениях по одному байту данных (рис. 1.24). При передаче многобайтовых сообщений SPI-slave должен содержать регистр сдвига соответствующей разрядности, а SPI-master должен производить управление обменом требуемой последовательности байтов данных, обрабатывая каждый байт после очередного стандартного цикла работы интерфейса и обеспечивая запуск следующего стандартного цикла обмена.

применяется не только для обмена данными между микроконтроллерами, но и для сопряжения микроконтроллеров с внешними АЦП (ADC) и ЦАП (DAC), микросхемами памяти – SRAM, FRAM, SEERAM и многими другими устройствами. Благодаря последовательному формату данных и простой логической организации интерфейса SPI эти микросхемы производятся в компактных 8 – 16 выводных корпусах. В табл. 1.6 приведены примеры микросхем различного функционального назначения и разных производителей с интерфейсом SPI. Эти примеры показывают, что последовательный формат интерфейса позволяет существенно сократить требуемое число линий ввода-вывода.

Таблица 1.6

Тип микросхемы

Основные параметры

Тип корпуса

Производитель

24-Bit, Delta-Sigma, 15 Гц

24-Bit, Delta-Sigma, 41 кГц

16-Bit, SAR, 100 кГц

16-Bit, PulSAR, 500 кГц

12-Bit, U-out, 2.5 мкс

16-Bit, U-out, 10 мкс

14-Bit, I-out, 0.04 мкс

12-Bit, I-out, 0.6 мкс

16-Bit, U-out, 1 мкс

www.maxim- ic.com

Тип микросхемы

Основные параметры

Тип корпуса

Производитель

16 кБит, 1 трлн

4 кБит, неогр.

64 кБит, неогр.

256K, 32768×8, 0.1млн Cycles

8К, 1024×8, 0.1млн Cycles

16K, 8192×8, 0.1млн Cycles

128K, 16384×8, 0.1млн Cycles

256K, 32768×8, 0.1млн Cycles

Termosensor

13-bit, -40 to +150 C o (±0.5C o)

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

Например, интерфейс SPI может оказаться полезным для считывания информации о состоянии большого числа двухпозиционных датчиков или для ввода многобитовых данных, поступающих в параллельном формате. Для этих целей удобно использовать отдельные регистры с параллельной записью и последовательным считыванием (8-Bit Parallel-In/Serial-Out Shift Register), например CD74HCT166 (рис. 1.25).

Схема подключения шестнадцати двухпозиционных датчиков (S1 – S16) через SPI-интерфейс микроконтроллера показана на рис. 1.26. Следует отметить, что перед стартом работы SPI-интерфейса необходимо сформировать сигнал записи информации в регистры с параллельных входов D0-D7. Для 38 этого можно использовать один из выходов микроконтроллера, в данном примере PC0.

Рис. 1.25. Функциональная схема регистра CD74HCT166

Рис. 1.26. Подключение двухпозиционных датчиков к SPI-интерфейсу

Рис. 1.27. Подключение шестиразрядного индикатора к SPI-интерфейсу

Применяя регистры с последовательной записью и параллельной выдачей информации (8-Bit Serial-In, Parallel-Out Shift Register) – SN74HC595 , SPI-интерфейс можно использовать и для многобайтовой параллельной выдачи информации. В качестве примера на рис. 1.27 приведена схема подключения шестиразрядного семисегментного индикатора к микроконтроллеру. В отличие от предыдущей схемы, сигнал параллельного вывода (PB1) необходимо сформировать после окончания передачи данных интерфейсом SPI средствами, выходящими за рамки интерфейса. Например, алгоритм взаимодействия с интерфейсом должен предусматривать контроль количества переданных байтов данных, а после завершения передачи последнего байта необходимо дополнительно передать сигнал параллельного вывода.

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

SPI – это широко применяемый протокол передачи данных между микроконтроллером (Master) и периферийными устройствами (Slave). В наших проекта в качестве Master чаще всего используется плата Arduino. Интерфейс SPI был придуман и использовался компанией Motorola, но со временем стал отраслевым стандартом. Основным плюсом работы с этим интерфейсом считается высокая скорость и возможность подключения нескольких устройств на одной шине данных.

Выводы и контакты SPI

Связь по интерфейсу SPI arduino происходит между несколькими устройствами, которые расположены близко друг к другу. Платы Ардуино оснащены отдельными выводами для SPI. Сопряжение происходит при помощи четырех контактов:

  • MOSI – по этой линии передается информация к Slave от Master.
  • MISO – используется для передачи информации к Master от Slave.
  • SCLK – создание тактовых импульсов для синхронной передачи данных.
  • SS – выбор ведомого устройства.

Взаимодействие SPI устройств

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

Перед началом работы нужно определить:

  • С какого бита должен начинаться сдвиг – со старшего или с младшего. Регулируется порядок при помощи функции PI.setBitOrder().
  • Определить уровень, на котором должна находиться линия SCK при отсутствии тактового импульса. Регулируется функцией SPI.setDataMode().
  • Выбрать скорость передачи данных. Определяется функцией SPI.setClockDivider().

Следующим шагом будет определение, в каком режиме будет происходить передача информации. Выбор режима определяется такими показателями, как полярность и фаза тактового импульса. Если уровень низкий, записывается 0, высокий – 1. Всего существует 4 режима:

  • Режим 0 – SPI_MODE0: полярность (CPOL) 0, фаза (CPHA) 0.
  • Режим 1: полярность 0, фаза 1.
  • Режим 2:полярность 1, фаза 0.
  • Режим 3: полярность 1, фаза 1.

Изначально в Ардуино заложено, что данные передаются старшим битом вперед, но перед началом нужно уточнить это в документации. Продемонстрировать режимы можно на картинке.

Возможно два вида подключения в интерфейсе SPI: независимое и каскадное. В первом случае при подключении Master обращается к каждому Slave индивидуально, во втором случае подключение происходит по очереди, т.е. каскадно.

Подключение SPI к Ардуино

Для каждой модели Ардуино существую свои выводы для SPI. Эти выводы:

  • Uno: MOSI соответствует вывод 11 или ICSP-4, MISO – 12 или ICSP-1, SCK – 13 или ICSP-3, SS (slave) – 10.
  • Mega1280 или Mega2560: MOSI – 51 или ICSP-4, MISO – 50 или ICSP-1, SCK – 52 или ICSP-3, SS (slave) – 53.
  • Leonardo: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3.
  • Due: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3, SS (master) – 4, 10, 52.

Последний контроллер Arduino Due расширяет возможности пользователя и позволяет реализовать больше задач, чем на остальных микроконтроллерах. Например, можно автоматически управлять ведомым устройством и автоматически выбирать различные конфигурации (тактовая частота, режим и другие).

Библиотека SPI Arduino

Для работы на Ардуино создана отдельная библиотека, которая реализует SPI. Перед началом кода нужно добавить #include , чтобы включить библиотеку.

Основные функции:

  • begin() и end() – включение и выключение работы. При инициализации на выход настраиваются линии SCLK, MOSI и SS, подавая низкий уровень на SCLK, MOSI и высокий на SS. Функция end() не меняет уровни линий, она нужна для выключения блока, связанного с интерфейсом, на плате Ардуино.
  • setBitOrder(order) – установка порядка отправки битов информации (MSBFIRST – приоритет старшего бита, LSBFIRST – приоритет младшего бита).
  • setClockDivider(divider) – установка делителей тактов основной частоты. Можно поставить делители 2, 4, 8, 16, 32, 64 и 128. Записывается следующим образом – SPI_CLOCK_DIVn, где n – выбранный делитель.
  • setDataMode(mode) – выбор одного из четырех рабочих режимов.
  • transfer(value) – осуществление передачи байта от ведущего устройства и возвращение байта, который принят от ведомого устройства.
  • shiftIn(miso_pin, sclk_pin, bit_order) и shiftOut(mosi_pin, sclk_pin, order, value) – принятие и отправка данных, можно подключать к любым цифровым пинам, но перед этим нужно самостоятельно их настроить.

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

Преимущества интерфейса SPI:

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

Недостатки:

  • Большое количество выводов по сравнению с I2C.
  • Slave не может управлять потоком информации.
  • Отсутствие стандартного протокола обнаружения ошибок.
  • Большое количество способов реализации интерфейса.
  • Отсутствие подтверждения приема информации.

Пример использования SPI Ардуино в проекте с датчиком давления

Для реализации проекта нам нужны Ардуино, датчик давления макетная плата и провода. Пример подключения датчика изображен на рисунке.

При помощи датчика SCP1000 возможно узнавать такие параметры как давление и температура и передать эти значения через SPI.

Основные элементы скетча программы

В первую очередь в коде прописываются регистры датчика при помощи setup(). С устройства возвращаются несколько значений – одно в 19 бит для полученного давления, другое в 16 бит – для температуры. После этого происходит считывание двух температурных байтов и считывание давления в два этапа. Сначала программа берет три старших бита, затем следующие 16 бит, после чего при помощи побитового сдвига происходит объединение этих двух значений в одно. Настоящее давление – это 19-тиразрядное значение, деленное на 4.

const int PRESSURE = 0x1F; // первый этап определения давления (выявляются три старших бита)

const int PRESSURE_LSB = 0x20; // второй этап, в котором определяются 16 бит для давления

const int TEMPERATURE = 0x21; //16 бит для температуры

Для чтения данных температуры и преобразования ее в градусы Цельсия используется следующий элемент кода:

int tempData = readRegister(0x21, 2);

float realTemp = (float)tempData / 20.0; // чтобы определить реальное значение температуры в Цельсиях, нужно полученное число разделить на 20

Serial.print(“Temp

Serial.print(realTemp);

Считывание битов давления и объединение их:

byte pressure_data_high = readRegister(0x1F, 1);

pressure_data_high &= 0b00000111;

unsigned int pressure_data_low = readRegister(0x20, 2);

long pressure = ((pressure_data_high << 16) | pressure_data_low) / 4; //определение давления в Паскалях.

Краткие выводы о SPI

Экраны и датчики SPI часто встречаются в проектах ардуино, поэтому нужно знать, как работает этот протокол. В принципе, ничего сложного в подключении SPI устройств нет. Главное, правильно подсоединить провода и использовать методы стандартной библиотеки в нужной последовательности. Для некоторых устройств, например, SD карты или OLED - экранов, альтернатив, в принципе, не существует.

Введение

SPI (3-wire) - популярный интерфейс для последовательного обмена данными между микросхемами. Интерфейс SPI, наряду с I 2 C, относится к самым широко-используемым интерфейсам для соединения микросхем. Изначально он был придуман компанией Motorola, а в настоящее время используется в продукции многих производителей. Его наименование является аббревиатурой от "Serial Peripheral Bus", что отражает его предназначение - шина для подключения внешних устройств. Шина SPI организована по принципу "ведущий-подчиненный". В качестве ведущего шины обычно выступает микроконтроллер, но им также может быть программируемая логика, DSP-контроллер или специализированная ИС. Подключенные к ведущему шины внешние устройства образуют подчиненных шины. В их роли выступают различного рода микросхемы, в т.ч. запоминающие устройства (EEPROM, Flash-память, SRAM), часы реального времени (RTC), АЦП/ЦАП, цифровые потенциометры, специализированные контроллеры и др.

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

Электрическое подключение

Существует три типа подключения к шине SPI, в каждом из которых участвуют четыре сигнала (их основное и альтернативные обозначения см. в табл. 1). Самое простое подключение, в котором участвуют только две микросхемы, показано на рисунке 1. Здесь, ведущий шины передает данные по линии MOSI синхронно со сгенерированным им же сигналом SCLK, а подчиненный захватывает переданные биты данных по определенным фронтам принятого сигнала синхронизации. Одновременно с этим подчиненный отправляет свою посылку данных. Представленную схему можно упростить исключением линии MISO, если используемая подчиненная ИС не предусматривает ответную передачу данных или в ней нет потребности. Одностороннюю передачу данных можно встретить у таких микросхем как ЦАП, цифровые потенциометры, программируемые усилители и драйверы. Таким образом, рассматриваемый вариант подключения подчиненной ИС требует 3 или 4 линии связи. Чтобы подчиненная ИС принимала и передавала данные, помимо наличия сигнала синхронизации, необходимо также, чтобы линия SS была переведена в низкое состояние. В противном случае, подчиненная ИС будет неактивна. Когда используется только одна внешняя ИС, может возникнуть соблазн исключения и линии SS за счет жесткой установки низкого уровня на входе выбора подчиненной микросхемы. Такое решение крайне нежелательно и может привести к сбоям или вообще невозможности передачи данных, т.к. вход выбора микросхемы служит для перевода ИС в её исходное состояние и иногда инициирует вывод первого бита данных.


Рис. 1. Простейшее подключение к шине SPI

При необходимости подключения к шине SPI нескольких микросхем используется либо независимое (параллельное) подключение (рис. 2), либо каскадное (последовательное) (рис. 3). Независимое подключение более распространенное, т.к. достигается при использовании любых SPI-совместимых микросхем. Здесь, все сигналы, кроме выбора микросхем, соединены параллельно, а ведущий шины, переводом того или иного сигнала SS в низкое состояние, задает, с какой подчиненной ИС он будет обмениваться данными. Главным недостатком такого подключения является необходимость в дополнительных линиях для адресации подчиненных микросхем (общее число линий связи равно 3+n, где n-количество подчиненных микросхем). Каскадное включение избавлено от этого недостатка, т.к. здесь из нескольких микросхем образуется один большой сдвиговый регистр. Для этого выход передачи данных одной ИС соединяется со входом приема данных другой, как показано на рисунке 3. Входы выбора микросхем здесь соединены параллельно и, таким образом, общее число линий связи сохранено равным 4. Однако использование каскадного подключения возможно только в том случае, если его поддержка указана в документации на используемые микросхемы. Чтобы выяснить это, важно знать, что такое подключение по-английски называется "daisy-chaining".


Рис. 2. Независимое подключение к шине SPI


Рис. 3. Каскадное подключение к шине SPI

Протокол передачи

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

  • CPOL - исходный уровень сигнала синхронизации (если CPOL=0, то линия синхронизации до начала цикла передачи и после его окончания имеет низкий уровень (т.е. первый фронт нарастающий, а последний - падающий), иначе, если CPOL=1, - высокий (т.е. первый фронт падающий, а последний - нарастающий));
  • CPHA - фаза синхронизации; от этого параметра зависит, в какой последовательности выполняется установка и выборка данных (если CPHA=0, то по переднему фронту в цикле синхронизации будет выполняться выборка данных, а затем, по заднему фронту, - установка данных; если же CPHA=1, то установка данных будет выполняться по переднему фронту в цикле синхронизации, а выборка - по заднему). Информация по режимам SPI обобщена в таблице 2.

Ведущая и подчиненная микросхемы, работающие в различных режимах SPI, являются несовместимыми, поэтому, перед выбором подчиненных микросхем важно уточнить, какие режимы поддерживаются ведущим шины. Аппаратные модули SPI, интегрированные в микроконтроллеры, в большинстве случаев поддерживают возможность выбора любого режима SPI и, поэтому, к ним возможно подключение любых подчиненных SPI-микросхем (относится только к независимому варианту подключения). Кроме того, протокол SPI в любом из режимов легко реализуется программно.

Cравнение с шиной I 2 C

Как уже упоминалось, для стыковки микросхем не меньшей популярностью пользуется 2-проводная последовательная шина I 2 C . Ниже можно ознакомиться с преимуществами, которая дает та или иная последовательная шина.

Преимущества шины SPI Преимущества шины I2C
Предельная простота протокола передачи на физическом уровне обуславливает высокую надежность и быстродействие передачи. Предельное быстродействие шины SPI измеряется десятками мегагерц и, поэтому, она идеальна для потоковой передачи больших объемов данных и широко используется в высокоскоростных ЦАП/АЦП, драйверах светодиодных дисплеев и микросхемах памяти Шина I 2 C остается двухпроводной, независимо от количества подключенной к ней микросхем.
Все линии шины SPI являются однонаправленными, что существенно упрощает решение задачи преобразования уровней и гальванической изоляции микросхем Возможность мультимастерной работы, когда к шине подключено несколько ведущих микросхем.
Простота программной реализации протокола SPI. Протокол I2C является более стандартизованным, поэтому, пользователь I2C-микросхем более защищен от проблем несовместимости выбранных компонентов.

Производные и совместимые протоколы

  • MICROWIRE.

    Протокол MICROWIRE компании National Semiconductor полностью идентичен протоколу SPI в режиме 0 (CPOL = 0, CPHA = 0).

  • 3-проводной интерфейс компании Maxim

    Отличие этого интерфейса состоит в том, что вместо полнодуплексной передачи по двум однонаправленным линиям здесь выполняется полудуплексная передача по одной двунаправленной линии DQ.

  • QSPI

    Более высокоуровневый протокол, чем SPI, позволяющий автоматизировать передачу данных без участия ЦПУ.

Кроме того, интерфейс SPI является основой для построения ряда специализированных интерфейсов, в т.ч. отладочный интерфейс JTAG и интерфейсы карт Flash-памяти, в т.ч. SD и MMC.

Табл. 1. Электрические сигналы шины SPI

Ведущий шины Подчиненный шины
Основное обозначение Альтернативное обозначение Описание Основное обозначение Альтернативное обозначение Описание
MOSI DO, SDO, DOUT MOSI DI, SDI, DIN
MISO DI, SDI, DIN Вход последовательного приема данных MISO DO, SDO, DOUT Выход последовательной передачи данных
SCLK DCLOCK, CLK, SCK Выход синхронизации передачи данных SCLK DCLOCK, CLK, SCK Вход синхронизации приема данных
SS CS Выход выбора подчиненного (выбор микросхемы) SS CS Вход выбора подчиненного (выбор микросхемы)
 
Статьи по теме:
Что такое shareware и freeware программы
Обусловленный особенностями распространения таких программ. Исторически, слово обозначало программы, свободно распространявшиеся третьими лицами (например, через FidoNet, в сборниках программ на компакт-дисках) и содержавшие в себе просьбу заплатить деньг
Калибровка и восстановление аккумулятора ноутбука ASUS: мифы и легенды
Рано или поздно каждый владелец ноутбука неожиданно для себя узнает, что аккумулятор его любимца является чуть ли не самым дорогостоящим комплектующим. Это, как правило, происходит, когда заканчивается срок гарантии. Не пугайтесь, шутка. Обычно оригинальн
Оао мгтс - не работает цифровое телевидение Почему не работает интернет мгтс
Стационарная связь, впрочем, как и любая другая телекоммуникационная услуга, может перестать функционировать по целому ряду причин: перелом оптоволоконных или медных линий передач, загруженность сети, выход из строя телефонного аппарата, а также многое др
Инструкция по восстановлению счетчика Яндекс
Счетчик статистики сайта от Яндекс Метрики необходим любому сайту. Это один из самых простых аналитических инструментов. Вы добавляете код отслеживания на все страницы и получаете подробную информацию по посещаемости и источникам трафика, посетителям, и