Связь spi. Последовательный интерфейс SPI. Схемы соединений по SPI

Если вы уже знаете что такое SPI интерфейс и с чем его едят, то вряд-ли вы почерпнете что-то новое из этой статьи. В ней я попробую рассказать основные понятия относящиеся к этому интерфейсу, а в следующей расскажу как использовать модуль SPI встроенный в микроконтроллеры STM32. Как и любой другой интерфейс, SPI используется для передачи данных от одного устройства к другому. Устройства на шине SPI не равноправны, как правило, присутствует одно главное устройство (Master) и множество подчинённых устройств (Slave). Обычно, в роли мастера выступает микроконтроллер, а подчинёнными устройствами является различная периферия вроде термодатчиков, акселерометров, часов реального времени итд. Мастер не просто так называется мастером, без его ведома ни один слейв не будет предпринимать ни какого обмена данными. Сама шина SPI физически представляет собой 4 провода:

  • MOSI – По этому проводу данные идут от Master к Slave устройству
  • MISO — По этому проводу данные идут от Slave к Master устройству
  • SCK — Через этот провод, Master передает тактовый сигнал к Slave устройствам
  • CS – Chip select (или SS – Slave select) – Через этот провод мастер дает понять слейву, что сейчас он шлёт данные именно ему.

Из описания всех четырёх линий можно сделать выводы:

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

Теперь рассмотрим, как устройства подключаются к шине. Стрелочки показывают кто и куда передает сигнал:

Как видно на рисунке, все линии интерфейса кроме CS, просто объединяются между собой. Для каждого слейв устройства, мастер имеет отдельный выход CS. Для того чтоб обменяться данными со вторым слейв устройством, мастер установит на ножке CS2 низкий логический уровень, а на двух других (CS1 и CS3) – высокий. Таким образом Slave_1 и Slave_3 не будут подавать вообще ни каких признаков жизни, и тем самым не создадут помех общению мастера и Slave_2. Еще раз подчеркну, что активное состояние ноги CS — это логический ноль. У такой схемы есть один недостаток – на 10 слейв устройств, мастер должен иметь 10 отдельных ног для подключения к CS. Существует другой вариант подключения который называется daisy-chain. При таком включении все устройства соединяются в цепочку и имеют один общий CS. Подробно этот способ включения рассматриваться не будет, в виду того, что используется он достаточно редко. Как уже упоминалось выше, к одной шине могут быть подключены самые разные slave устройства, некоторые из них достаточно быстрые и могут обмениваться данными с мастером на большой скорости, а некоторые наоборот очень медленные. Это значит, что мастер не должен слишком быстро генерировать тактовые импульсы, в противном случае медленные слейв устройства его не поймут из-за искажения данных. Однако скорость, это еще не все параметры SPI интерфейса, существует также 4 режима SPI. Я обращал внимание, что в даташитах на какое-либо устройство со SPI интерфейсом обычно так и пишут – «это устройство использует режим 2». Насколько это стандартизовано сказать не могу, но видел несколько раз. Если в двух словах описать суть этих режимов, то каждый из них определяет в какой момент (в зависимости от состояния линии SCK) нужно считывать/передавать данные. Следующая таблица показывает, что это за режимы и чем они отличаются друг от друга. Во всех 4-х режимах, мастер посылает один и тот же байт (0x93). Желтая линия это SCK, а синяя – MOSI.

Режим CPOL CPHA Осциллограмма Описание режима
0 0 0 Выборка по переднему нарастающему фронту
1 0 1 Выборка по заднему спадающему фронту
2 1 0 Выборка по переднему спадающему фронту
3 1 1 Выборка по заднему нарастающему фронту

Как видно из таблицы, номер режима состоит из двух бит – CPOL и CPHA . Бит CPOL определяет, в каком состоянии будет находиться нога SCL в то время когда ничего не передается. Если CPOL =0 то в режиме простоя на ноге низкий логический уровень. Это означает, что передний фронтом будет считаться переход из 0 в 1 (а задним фронтом соответственно наоборот из 1 в 0). Если CPOL =1 то в режиме простоя на ноге высокий логический уровень. Это означает, что передний фронтом будет считаться переход из 1 в 0 (а задним фронтом соответственно наоборот из 0 в 1). Бит CPHA определяет по какому фронту нужно производить выборку 0 – по переднему фронту, 1 – по заднему фронту. Собственно это всё и показывает таблица сверху. Кстати, примечательно, что точно так же эти два бита называются в регистре настройки SPI у микроконтроллеров STM32 и AVR. Следующий немаловажный параметр – порядок следования бит. Обычно, первым передается старший бит, но иногда бывает наоборот, если этого не учесть, то слейв и мастер не найдут общий язык. Количество бит может изменяться, обычно это 8 бит, иногда бывает больше. С теоритическими основами покончено. В следующей статье попробуем завести SPI на платке

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

SPI-интерфейс: описание

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

Описание работы устройства

Прибор, генерирующий синхроимпульсы (управляющий) на шину тактирования, является «ведущим» (мастер). Такое устройство осуществляет управление всем процессом обмена данными, то есть определяет, когда начать обмен, когда закончить, сколько бит информации передать и т. д. Второй прибор, участвующий в обмене, называется «ведомым». Это устройство никаким образом не влияет на шину тактирования. Для полнодуплексного обмена (передача в обе стороны одновременно) SP- интерфейс использует четыре линии:

- MOSI - выход ведущего и вход ведомого. По этой линии происходит от главного устройства к приемному.

MISO - вход ведущего и выход «ведомого». По этому проводу мастер принимает данные от вспомогательного прибора.

SCLK - шина тактирования. По этой линии «ведущее» устройство генерирует синхроимпульсы.

SS - выбор «ведомого». С помощью этого провода мастер управляет сеансом обмена.

Уровни логического нуля и единицы кодируются величиной напряжения на шине данных (MISO и MOSI). Сигнал SS обозначает конец и начало сеанса обмена информацией. Чаще всего он инверсный. Это значит, что во время обмена данными «ведущее» устройство должно установить на линии SS сигнал низкого уровня, а по окончании обмена - высокого. Наличие уровня SS позволяет организовать передачу по нескольким «ведомым» приборам, используя один синхронизирующий сигнал и одну шину данных без дополнительных протоколов. Правда, при таком подключении необходимо подводить от каждого приемного устройства отдельную линию SS.

Доброго времени суток! Сегодняшняя статья – небольшое теоретическое отступление, которое поможет нам при освоении курса «Программирование Ардуино» . Речь пойдёт об интерфейсе 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 в 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 (Serial Peripheral Interface, последовательный периферийный интерфейс, шина SPI ) - Это интерфейс для передачи данных на короткое расстояние, разработанный Motorola. Данные передаются в режиме полного дуплекса (в обе стороны) используя архитектуру ведущий - ведомый (master-slave). SPI также иногда называют четырёхпроводным (four-wire) интерфейсом.

Рис.1 стандартное общение по SPI

В шине SPI используются 4 цифровых сигнала:
  • MOSI : (Master Out Slave In) выход ведущего, вход ведомого.
  • MISO : (Master In Slave Out) вход ведущего, выход ведомого.
  • SCLK : (Serial Clock) тактовый сигнал.
  • CS или SS : (Chip Select, Slave Select) выбор микросхемы, выбор ведомого.

Возможны другие имена:

  • MOSI : SIMO, SDO, DO, DOUT, SI, MTSR;
  • MISO : SOMI, SDI, DI, DIN, SO, MRST;
  • SCLK : SCK, CLK;
  • SS : nCS, CS, CSB, CSN, nSS, STE, SYNC.
Шина SPI может работать с 1 ведущим (master) и несколькими ведомыми (slave) устройствами. Если используется одно ведомое устройство, то его вход SS можно заземлить, но только если он не работает по срезу сигнала.

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

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


Рис.3 Проверка присутствия внутреннего буфера

Передача данных


Ведущий и ведомый передают друг другу данные одновременно. Сперва нужно выбрать ведомое устройство выставив на его входе SS низкий логический уровень (может меняться в зависимости от производителя). Данные для передачи помещаются в сдвиговые регистры. Затем ведущий генерирует синхросигналы частотой около нескольких МГц, ведущий и ведомый начинают посылать друг другу информацию хранимую в сдвиговых регистрах бит за битом начиная со старшего разряда.

Рис.4 Передача данных по SPI
Всего используется 2 сдвиговых регистра, старший бит из одного устройства передаётся в младший бит другого устройства, после чего регистр сдвигает хранимую в нём информацию. Количество бит в 1 пакете данных зависит от конкретного устройства, некоторые производители добавляют возможность изменять длину пакета.

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

Для настройки интерфейса используются несколько регистров, Можно регулировать частоту, прерывания, порядок бит и многое другое, подробнее об этом можно узнать в документации от Motorola ee.nmt.edu , этот документ взят как стандарт для SPI . Но производители могут не использовать всех настроек описанных там, также биты могут быть расставлены в другой последовательности в отличии от описания Motorola. В любом случае нужно читать документацию на конкретное устройство.

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

В принципе, эти настройки можно понять из временной диаграммы:

  • CPOL = 0: сигнал синхронизации начинается с низкого уровня;
  • CPOL = 1: сигнал синхронизации начинается с высокого уровня;
  • CPHA = 0: данные записываются по переднему фронту сигнала синхронизации;
  • CPHA = 1: данные записываются по заднему фронту сигнала синхронизации.
Задний и передний фронты обозначают первое изменение синхросигнала, либо второе. Это не зависит от того в какое состояние переходит линия SCK , это может быть как спадающий так и нарастающий фронт.

В зависимости от состояния битов CPHA и CPOL , различают 4 режима работы SPI интерфейса (0, 1, 2 или 3). Но в зависимости от производителя они часто соответствуют разным состояниям битов, к примеру, у ARM и PIC32MX контроллеров ни 1 из режимов не совпадает.

Есть 2 популярных способа включения нескольких SPI, первый из них подключение "звезда" (daisy chain):

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

Может быть такое что ведомые устройства не совместимы друг с другом и им нужны разные настройки, к примеру различная длина пакета, в таком случае используют соединение типа "кольцо":

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

Заключение


SPI интерфейс заслужил свою популярность благодаря простоте и дешевизне. Сейчас его можно встретить в огромном количестве устройств, С его помощью программируются МК, JTAG также реализован на основе SPI. он часто используется для общения с различными микросхемами: Flash память, EEPROM, LCD, SD карты, АЦП, ЦАП микросхемы и многое другое.

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

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

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

  • Полнодуплексная передача данных.
  • Более высокая пропускная способность по сравнению с I²C или SMBus.
  • Возможность произвольного выбора длины пакета.
  • более низкие требования к энергопотреблению по сравнению с I²C и SMBus;
  • возможно использование в системах с низко стабильной тактовой частотой;
  • ведомым устройствам не нужен уникальный адрес, в отличие от таких интерфейсов, как I²C, GPIB или SCSI.
  • Используется только четыре вывода, что гораздо меньше, чем для параллельных интерфейсов.
  • Однонаправленный характер сигналов позволяет при необходимости легко организовать гальваническую развязку между ведущим и ведомыми устройствами.
  • Максимальная тактовая частота ограничена только быстродействием устройств, участвующих в обмене данными.

Недостатки

  • Необходимо больше выводов, чем для интерфейса I²C.
  • Ведомое устройство не может управлять потоком данных.
  • Нет подтверждения приема данных со стороны ведомого устройства (ведущее устройство может передавать данные «в никуда»).
  • Нет определенного стандартом протокола обнаружения ошибок.
  • Отсутствие официального стандарта, что делает невозможным сертификацию устройств.
  • По дальности передачи данных интерфейс SPI уступает таким стандартам, как UART и CAN.
  • Наличие множества вариантов реализации интерфейса.
  • Отсутствие поддержки горячего подключения устройств.

Источники:
Документация от Motorola



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: