Последовательный периферийный интерфейс ( SPI ) является фактическим стандартом (имеющим множество вариантов) для синхронной последовательной связи , используемым в основном во встраиваемых системах для проводной связи на короткие расстояния между интегральными схемами .
SPI следует архитектуре «главный-подчиненный» [1] , называемой здесь «главный-подчиненный» , [примечание 2] [примечание 3] , где одно [примечание 4] главное устройство организует связь с одним или несколькими подчиненными (периферийными) устройствами, управляя тактовыми сигналами и сигналами выбора микросхемы .
Оригинальная спецификация Motorola (начала 1980-х годов) использует четыре логических сигнала , также известных как линии или провода, для поддержки полнодуплексной связи. Иногда ее называют четырехпроводной последовательной шиной, чтобы противопоставить трехпроводным вариантам, которые являются полудуплексными , и двухпроводным последовательным шинам I²C и 1-Wire .
Типичные области применения включают интерфейс микроконтроллеров с периферийными микросхемами для карт Secure Digital , жидкокристаллических дисплеев , аналого-цифровых и цифро-аналоговых преобразователей , флэш-памяти и EEPROM- памяти, а также различных коммуникационных микросхем.
Хотя SPI является синхронным последовательным интерфейсом, [2] он отличается от синхронного последовательного интерфейса (SSI). SSI использует дифференциальную сигнализацию и обеспечивает только один симплексный канал связи.
Обычно SPI имеет четыре логических сигнала. Вариации могут использовать другие названия или иметь другие сигналы. Исторические термины показаны в скобках.
MOSI на главном устройстве выводит на MOSI на подчиненном устройстве. MISO на подчиненном устройстве выводит на MISO на главном устройстве.
Каждое устройство использует внутри себя сдвиговый регистр для последовательной связи, которые вместе образуют межчиповый кольцевой буфер .
Подсистемы должны использовать трехстабильные выходы , чтобы их сигнал MISO становился высокоимпедансным (электрически отключенным), когда устройство не выбрано. Подсистемы без трехстабильных выходов не могут совместно использовать линию MISO с другими подсистемами без использования внешнего трехстабильного буфера.
Чтобы начать связь, главный SPI сначала выбирает подчиненное устройство, понижая его CS . (Примечание: полоса над CS указывает на то, что это активный низкий сигнал, поэтому низкое напряжение означает «выбрано», а высокое напряжение означает «не выбрано»).
Если требуется период ожидания, например, для аналого-цифрового преобразования, главный контроллер должен выждать по крайней мере этот период времени, прежде чем выдавать тактовые циклы. [примечание 5]
В течение каждого цикла синхронизации SPI происходит полнодуплексная передача одного бита. Основной отправляет бит по линии MOSI, а дополнительный отправляет бит по линии MISO, а затем каждый считывает свой соответствующий входящий бит. Эта последовательность сохраняется даже тогда, когда предполагается только однонаправленная передача данных.
Передача с использованием одного подблока (рисунок 1) включает один сдвиговый регистр в основном и один сдвиговый регистр в подблоке, оба некоторого заданного размера слова (например, 8 бит), [примечание 6], соединенные в топологию виртуального кольца . Данные обычно сдвигаются наружу, начиная с самого старшего бита (MSB). [примечание 7] На фронте тактового сигнала и основной, и дополнительный сдвигают бит наружу к своему аналогу. На следующем фронте тактового сигнала каждый приемник выбирает переданный бит и сохраняет его в сдвиговом регистре как новый наименее значимый бит. После того, как все биты были сдвинуты наружу и внутрь, основной и дополнительный обменялись значениями регистров. Если необходимо обменять больше данных, сдвиговые регистры перезагружаются, и процесс повторяется. Передача может продолжаться в течение любого количества тактовых циклов. После завершения основной прекращает переключение тактового сигнала и, как правило, отменяет выбор подблока.
Если используется одно субустройство, его вывод CS может быть зафиксирован на низком логическом уровне , если субустройство это допускает. При наличии нескольких субустройств многоточечная конфигурация требует независимого сигнала CS от главного устройства для каждого субустройства, в то время как конфигурация с последовательной цепью требует только одного сигнала CS .
Каждый подсистемный блок на шине, который не был выбран, должен игнорировать входные тактовые сигналы и сигналы MOSI. И для предотвращения конкуренции на MISO, невыбранные подсистемные блоки должны использовать трехстабильный выход. Подсистемные блоки, которые еще не являются трехстабильными, будут нуждаться во внешних трехстабильных буферах для обеспечения этого. [3]
В дополнение к установке частоты синхронизации, главный должен также настроить полярность и фазу синхронизации по отношению к данным. Motorola [4] [5] назвала эти две опции CPOL и CPHA (для c lock pol arity и c lock pha se) соответственно, соглашение, которое большинство поставщиков также приняли.
Показанная временная диаграмма SPI более подробно описана ниже:
Комбинации полярности и фаз обозначаются следующими числами «режима SPI», где CPOL — старший бит, а CPHA — младший бит:
Примечания:
Некоторые подустройства спроектированы так, чтобы игнорировать любые коммуникации SPI, в которых число тактовых импульсов больше указанного. Другие не обращают на это внимания, игнорируя дополнительные входы и продолжая сдвигать тот же выходной бит. Для разных устройств обычно используют коммуникации SPI разной длины, например, когда SPI используется для доступа к сканирующей цепи IC путем выдачи командного слова одного размера (возможно, 32 бита) и последующего получения ответа другого размера (возможно, 153 бита, по одному на каждый вывод в этой сканирующей цепи).
Прерывания выходят за рамки SPI; их использование не запрещено и не регламентировано, поэтому их можно реализовать по желанию.
Микроконтроллеры, сконфигурированные как вспомогательные устройства, могут иметь аппаратную поддержку для генерации сигналов прерывания для себя при получении слов данных или переполнении буфера FIFO приема [6], а также могут устанавливать процедуру прерывания, когда их входная линия выбора микросхемы переводится в низкий или высокий уровень.
SPI subs иногда используют внеполосный сигнал (другой провод) для отправки сигнала прерывания в main. Примерами служат прерывания от сенсорных датчиков сенсорного экрана , оповещения о предельных температурах от датчиков температуры , сигналы тревоги, выдаваемые чипами часов реального времени , SDIO [примечание 8] и вставки аудиоразъема для аудиокодека . Прерывания в main также могут быть подделаны с помощью опроса (аналогично USB 1.1 и 2.0 ).
SPI подходит для разработки программного обеспечения "драйвера шины". Программное обеспечение для подключенных устройств написано для вызова "драйвера шины", который управляет фактическим низкоуровневым оборудованием SPI. Это позволяет коду драйвера для подключенных устройств легко переноситься на другое оборудование или реализацию программного обеспечения bit-banging .
Нижеприведенный псевдокод описывает программную реализацию (" bit-banging ") протокола SPI как основного с одновременным выводом и вводом. Этот псевдокод предназначен для CPHA=0 и CPOL=0, таким образом, SCLK понижается до активации CS , и биты вводятся по переднему фронту SCLK, а биты выводятся по заднему фронту SCLK.
byte_out
следующим выходным байтом для передачиbyte_out
MOSIbyte_in
byte_in
теперь содержит недавно полученный байт и может использоваться по желаниюПротокол бит-бэнга подсистемы похож, но отличается от вышеописанного. Реализация может включать активное ожидание падения CS или запуск процедуры прерывания при падении CS , а затем сдвиг битов внутрь и наружу, когда полученный SCLK изменяется соответствующим образом, как бы долго ни длился размер передачи.
Хотя в предыдущем разделе о работе основное внимание уделялось базовому интерфейсу с одним сабвуфером, SPI может вместо этого взаимодействовать с несколькими сабвуферами, используя многоточечную, каскадную или расширительную конфигурации.
В конфигурации многоточечной шины каждый sub имеет свой собственный CS , а main выбирает только один за раз. MISO, SCLK и MOSI являются общими для всех устройств. Это способ, которым SPI обычно используется.
Поскольку контакты MISO подсистем соединены вместе, они должны быть контактами с тремя состояниями (высокий, низкий или высокий импеданс), где выход с высоким импедансом должен быть применен, когда подсистема не выбрана. Подсистемы, не поддерживающие три состояния, могут использоваться в многоточечной конфигурации путем добавления микросхемы буфера с тремя состояниями, управляемой ее сигналом CS . [3] (Поскольку только одна сигнальная линия должна быть тристабильной для каждой подсистемы, одна типичная стандартная логическая микросхема, которая содержит четыре буфера с тремя состояниями и независимыми входами затворов, может использоваться для сопряжения до четырех подсистем с шиной SPI)
Предостережение: все сигналы CS должны начинаться с высокого уровня (чтобы указать, что ни один чип не выбран) перед отправкой сообщений инициализации в любой подпроцессор, чтобы другие неинициализированные подпроцессоры игнорировали сообщения, не адресованные им. Это вызывает беспокойство, если основной процессор использует выводы ввода-вывода общего назначения (GPIO) (которые по умолчанию могут находиться в неопределенном состоянии) для CS и если основной процессор использует отдельные программные библиотеки для инициализации каждого устройства. Одним из решений является настройка всех GPIO, используемых для CS , на вывод высокого напряжения для всех подпроцессоров перед запуском кода инициализации из любой из этих программных библиотек. Другое решение — добавить подтягивающий резистор на каждый CS , чтобы гарантировать, что все сигналы CS изначально имеют высокий уровень. [3]
Некоторые продукты, реализующие SPI, могут быть подключены в конфигурации последовательной цепи , где выход первого подсистемы подключен к входу второго подсистемы, и так далее с последующими подсистемами, до последней подсистемы, выход которой подключен обратно к входу основной. Это эффективно объединяет отдельные регистры сдвига связи каждой подсистемы, чтобы сформировать один более крупный объединенный регистр сдвига , который сдвигает данные по цепи. Эта конфигурация требует только одной линии CS от основной, а не отдельной линии CS для каждой подсистемы. [7]
В дополнение к использованию специфических для SPI подпрограмм, последовательный SPI может включать дискретные сдвиговые регистры для большего количества контактов входов (например, с использованием параллельного ввода-вывода 74 xx165) [8] или выходов (например, с использованием последовательного ввода-вывода 74 xx595) [9], соединенных в бесконечную цепь. Другие приложения, которые могут потенциально взаимодействовать с последовательным SPI, включают SGPIO , JTAG , [10] и I 2 C.
Конфигурации расширителей используют управляемые по SPI устройства адресации (например, двоичные декодеры , демультиплексоры или регистры сдвига) для добавления выбора микросхем.
Например, один CS может использоваться для передачи на управляемый SPI демультиплексор индексного номера, управляющего его сигналами выбора, в то время как другой CS направляется через этот демультиплексор в соответствии с этим индексом для выбора нужного подканала. [11]
SPI используется для связи с различными периферийными устройствами, такими как
Экономия места на плате и проводов по сравнению с параллельной шиной значительна и обеспечила SPI прочную роль во встраиваемых системах. Это справедливо для большинства процессоров system-on-a-chip , как для высокопроизводительных 32-битных процессоров, таких как использующие ARM , MIPS или PowerPC , так и для низкопроизводительных микроконтроллеров, таких как AVR , PIC и MSP430 . Эти чипы обычно включают контроллеры SPI, способные работать как в основном, так и в подрежиме. Внутрисистемно программируемые контроллеры AVR (включая пустые) могут программироваться с использованием SPI. [12]
Конструкции на основе чипа или FPGA иногда используют SPI для связи между внутренними компонентами; на чипе может быть столько же дорого, сколько и на плате. А для высокопроизводительных систем FPGA иногда используют SPI для интерфейса в качестве подсистемы к хосту, в качестве основной для датчиков или для флэш-памяти, используемой для начальной загрузки, если они основаны на SRAM.
Возможность полного дуплекса делает SPI очень простым и эффективным для приложений с одним основным/одним подприложением. Некоторые устройства используют полнодуплексный режим для реализации эффективного, быстрого потока данных для таких приложений, как цифровое аудио , цифровая обработка сигналов или телекоммуникационные каналы , но большинство готовых чипов придерживаются полудуплексных протоколов запроса/ответа.
Реализации SPI имеют широкий спектр вариаций протокола. Некоторые устройства только передают, другие только принимают. Выбор чипа иногда происходит в активном высоком состоянии, а не в активном низком. Некоторые устройства отправляют сначала наименее значимый бит. Уровни сигнала полностью зависят от задействованных чипов. И хотя базовый протокол SPI не имеет кодов команд, каждое устройство может определять свой собственный протокол кодов команд. Некоторые вариации незначительны или неформальны, в то время как другие имеют официальный определяющий документ и могут считаться отдельными, но связанными протоколами.
В 1983 году Motorola перечислила [13] три 8-битных микрокомпьютера 6805 , которые имели встроенный «последовательный периферийный интерфейс», функциональность которого описана в руководстве 1984 года. [14]
Документ AN991 компании Motorola 1987 года «Использование последовательного периферийного интерфейса для связи между несколькими микрокомпьютерами» [15] (в настоящее время принадлежит NXP , последняя редакция 2002 г. [5] ) неофициально служит «официальным» определяющим документом для SPI.
Некоторые устройства имеют вариации синхронизации от режимов Motorola CPOL/CPHA. Отправка данных из подсистемы в основную может использовать противоположный фронт тактового сигнала в качестве основного в подсистему. Устройствам часто требуется дополнительное время простоя тактового сигнала перед первым тактовым сигналом или после последнего тактового сигнала, или между командой и ее ответом.
Некоторые устройства имеют два тактовых генератора, один для чтения данных, а другой для передачи их в устройство. Многие из тактовых генераторов чтения работают от линии выбора чипа.
Распространены различные размеры слова передачи. Многие чипы SPI поддерживают только сообщения, кратные 8 битам. Такие чипы не могут взаимодействовать с протоколами JTAG или SGPIO , или любым другим протоколом, требующим сообщений, не кратных 8 битам.
Некоторые устройства не используют выбор чипа, а вместо этого управляют входом/выходом конечного автомата протокола с помощью других методов.
Любой, кому нужен внешний разъем для SPI, определяет свой собственный или использует другое стандартное соединение, например: UEXT , Pmod , различные разъемы JTAG , разъем для карты Secure Digital и т. д.
Некоторые устройства требуют дополнительного сигнала управления потоком от подсистемы к основной, указывающего, когда данные готовы. Это приводит к 5-проводному протоколу вместо обычного 4. Такой сигнал готовности или включения часто имеет активный низкий уровень и должен быть включен в ключевых точках, таких как после команд или между словами. Без такого сигнала может потребоваться значительное замедление скорости передачи данных или в протоколы может потребоваться вставить фиктивные байты, чтобы учесть наихудший случай для времени ответа подсистемы. Примеры включают инициирование преобразования АЦП, адресацию нужной страницы флэш-памяти и обработку достаточного количества команды, чтобы прошивка устройства могла загрузить первое слово ответа. (Многие основные SPI не поддерживают этот сигнал напрямую, а вместо этого полагаются на фиксированные задержки.)
SafeSPI [16] — это отраслевой стандарт SPI в автомобильных приложениях. Его основная задача — передача данных датчиков между различными устройствами.
В электрически шумных средах, поскольку SPI имеет мало сигналов, может быть экономично уменьшить влияние синфазного шума , адаптировав SPI для использования низковольтной дифференциальной сигнализации . [17] Другим преимуществом является то, что контролируемые устройства могут быть спроектированы для обратной связи для проверки целостности сигнала. [18]
Queued Serial Peripheral Interface ( QSPI ; отличается от Quad SPI, описанного в § Quad SPI, но имеет ту же аббревиатуру) — это тип контроллера SPI, который использует очередь данных для передачи данных по шине SPI. [19] Он имеет циклический режим, позволяющий осуществлять непрерывную передачу в очередь и из очереди с лишь периодическим вниманием со стороны ЦП. Следовательно, периферийные устройства отображаются для ЦП как параллельные устройства, отображенные в памяти . Эта функция полезна в таких приложениях, как управление аналого -цифровым преобразователем . Другими программируемыми функциями в Queued SPI являются выбор микросхемы и длина/задержка передачи.
Контроллеры SPI от разных поставщиков поддерживают разные наборы функций; такие очереди прямого доступа к памяти (DMA) не являются редкостью, хотя они могут быть связаны с отдельными механизмами DMA, а не с самим контроллером SPI, например, используемыми многоканальным буферизированным последовательным портом ( MCBSP ). [примечание 11] Большинство основных контроллеров SPI поддерживают до четырех выборок микросхем, [примечание 12] хотя некоторые требуют, чтобы выборки микросхем управлялись отдельно через линии GPIO.
Обратите внимание, что Queued SPI отличается от Quad SPI , и некоторые процессоры даже позволяют одному интерфейсу «QSPI» работать как в счетверенном, так и в очередном режиме! [20]
Microwire, [21] часто пишется как μWire , по сути является предшественником SPI и торговой маркой National Semiconductor . Это строгое подмножество SPI: полудуплекс и использование режима SPI 0. Микросхемы Microwire, как правило, требуют более медленных тактовых частот, чем новые версии SPI; возможно, 2 МГц против 20 МГц. Некоторые микросхемы Microwire также поддерживают трехпроводной режим.
Microwire/Plus [22] является усовершенствованной версией Microwire и обеспечивает полнодуплексную связь и поддержку режимов SPI 0 и 1. Не было выявлено никаких улучшений в скорости последовательной синхронизации.
Трёхпроводные варианты SPI, ограниченные полудуплексным режимом, используют одну двунаправленную линию данных, называемую SISO (sub out/sub in) или MOMI (main out/main in) вместо двух однонаправленных линий SPI (MOSI и MISO). Трёхпроводные, как правило, используются для деталей с низкой производительностью, таких как небольшие EEPROM, используемые только во время запуска системы, некоторые датчики и Microwire. Немногие контроллеры SPI поддерживают этот режим, хотя его можно легко bitbanged в программном обеспечении.
В случаях, когда полнодуплексная природа SPI не используется, расширение использует оба контакта данных в полудуплексной конфигурации для отправки двух бит за такт. Обычно командный байт отправляется с запросом ответа в двойном режиме, после чего линия MOSI становится SIO0 (последовательный ввод-вывод 0) и переносит четные биты, в то время как линия MISO становится SIO1 и переносит нечетные биты. Данные по-прежнему передаются старшим битом вперед, но SIO1 переносит биты 7, 5, 3 и 1 каждого байта, в то время как SIO0 переносит биты 6, 4, 2 и 0.
Это особенно популярно среди SPI ROM, которым приходится отправлять большие объемы данных, и существует в двух вариантах: [23] [24]
Quad SPI ( QSPI ; отличается от Queued-SPI, описанного в § Интеллектуальные контроллеры SPI, но имеет ту же аббревиатуру) выходит за рамки двойного SPI, добавляя еще две линии ввода-вывода (SIO2 и SIO3) и отправляя 4 бита данных за такт. Опять же, это запрашивается специальными командами, которые включают счетверенный режим после того, как сама команда отправляется в одиночном режиме. [23] [24]
Расширяя далее quad SPI, некоторые устройства поддерживают режим «quad everything», в котором вся связь осуществляется по 4 линиям данных, включая команды. [25] Это по-разному называется «QPI» [24] (не путать с Intel QuickPath Interconnect ) или «serial quad I/O» (SQI) [26]
Для этого требуется программирование бита конфигурации в устройстве и требуется осторожность после сброса для установления связи.
Помимо использования нескольких линий для ввода-вывода, некоторые устройства увеличивают скорость передачи данных, используя двойную скорость передачи данных. [27] [28]
Хотя между протоколами SPI и JTAG (IEEE 1149.1-2013) есть некоторое сходство , они не являются взаимозаменяемыми. JTAG специально предназначен для обеспечения надежного тестового доступа к контактам ввода-вывода с внешнего контроллера с менее точными параметрами задержки сигнала и перекоса, в то время как SPI имеет множество различных применений. Хотя протокол JTAG не является строго чувствительным к уровню интерфейсом, он поддерживает восстановление как нарушений настройки, так и нарушений удержания между устройствами JTAG путем снижения тактовой частоты или изменения рабочих циклов тактовой частоты. Следовательно, интерфейс JTAG не предназначен для поддержки чрезвычайно высоких скоростей передачи данных. [29]
SGPIO по сути является другим (несовместимым) стеком приложений для SPI, разработанным для определенных действий по управлению объединительной платой. [ необходима ссылка ] SGPIO использует 3-битные сообщения.
Intel разработала преемника своей шины Low Pin Count (LPC), которую она называет шиной Enhanced Serial Peripheral Interface (eSPI) . Intel стремится сократить количество выводов, необходимых на материнских платах, и увеличить пропускную способность по сравнению с LPC, снизить рабочее напряжение до 1,8 вольт для упрощения процессов производства микросхем меньшего размера, разрешить периферийным устройствам eSPI совместно использовать флэш-устройства SPI с хостом (шина LPC не позволяла периферийным устройствам LPC использовать концентраторы прошивки), туннелировать предыдущие внеполосные выводы через eSPI и позволить разработчикам систем найти компромисс между стоимостью и производительностью. [30] [31]
Шина eSPI может использоваться совместно с устройствами SPI для экономии контактов или быть отдельной от шины SPI для повышения производительности, особенно когда устройствам eSPI необходимо использовать флэш-устройства SPI. [30]
Этот стандарт определяет сигнал Alert#, который используется eSPI sub для запроса обслуживания от основного. В ориентированном на производительность дизайне или дизайне только с одним eSPI sub каждый eSPI sub будет иметь свой вывод Alert#, подключенный к выводу Alert# на основном eSPI, который выделен для каждого sub, что позволяет основному eSPI предоставлять обслуживание с низкой задержкой, поскольку основной eSPI будет знать, какой eSPI sub нуждается в обслуживании, и ему не нужно будет опрашивать все sub, чтобы определить, какое устройство нуждается в обслуживании. В бюджетном дизайне с более чем одним eSPI sub все выводы Alert# sub подключены к одному выводу Alert# на основном eSPI в проводном ИЛИ- подключении, которое требует, чтобы основной опрашивал все sub, чтобы определить, какие из них нуждаются в обслуживании, когда сигнал Alert# понижается одним или несколькими периферийными устройствами, которым требуется обслуживание. Только после того, как все устройства будут обслужены, сигнал Alert# будет переведен на высокий уровень, поскольку ни один из модулей eSPI не нуждается в обслуживании, и, следовательно, сигнал Alert# будет переведен на низкий уровень. [30]
Этот стандарт позволяет разработчикам использовать 1-битную, 2-битную или 4-битную связь на скоростях от 20 до 66 МГц, что позволяет разработчикам найти компромисс между производительностью и стоимостью. [30]
Сообщения, которые были вне диапазона LPC, такие как универсальный ввод/вывод (GPIO) и шина управления системой (SMBus), должны быть туннелированы через eSPI с помощью виртуальных проводных циклов и внеполосных циклов сообщений соответственно, чтобы удалить эти контакты из конструкций материнских плат, использующих eSPI. [30]
Этот стандарт поддерживает стандартные циклы памяти длиной от 1 байта до 4 килобайт данных, короткие циклы памяти длиной 1, 2 или 4 байта, которые имеют гораздо меньшие накладные расходы по сравнению со стандартными циклами памяти, и циклы ввода-вывода длиной 1, 2 или 4 байта данных, которые также имеют низкие накладные расходы. Это значительно снижает накладные расходы по сравнению с шиной LPC, где все циклы, за исключением цикла чтения 128-байтового концентратора прошивки, тратят более половины всей пропускной способности и времени шины на накладные расходы. Стандартный цикл памяти допускает длину от 1 байта до 4 килобайт, чтобы позволить амортизировать его большие накладные расходы в течение большой транзакции. Подсистемам eSPI разрешено инициировать версии мастера шины всех циклов памяти. Циклы ввода-вывода мастера шины, которые были введены спецификацией шины LPC, и DMA в стиле ISA, включая 32-битный вариант, введенный спецификацией шины LPC, не присутствуют в eSPI. Поэтому циклы памяти мастера шины являются единственными разрешенными DMA в этом стандарте. [30]
Подсистемам eSPI разрешено использовать главный модуль eSPI в качестве прокси-сервера для выполнения флэш-операций на стандартной подсистеме флэш-памяти SPI от имени запрашивающей подсистемы eSPI. [30]
Также добавлена 64-битная адресация памяти, но она разрешена только в том случае, если нет эквивалентного 32-битного адреса. [30]
Чипсет Intel Z170 может быть сконфигурирован для реализации либо этой шины, либо варианта шины LPC, в котором отсутствует возможность прямого доступа к памяти (DMA) в стиле ISA и частота которого понижена до 24 МГц вместо стандартных 33 МГц. [32]
Шина eSPI также адаптирована для чипсетов AMD Ryzen .
Одноплатные компьютеры могут предоставлять доступ к аппаратным блокам SPI через контакты . Например, разъем J8 Raspberry Pi предоставляет как минимум два блока SPI, которые можно использовать через драйверы Linux или python .
Существует ряд USB- адаптеров, которые позволяют настольному ПК или смартфону с USB взаимодействовать с чипами SPI (например, FT 221xs [33] ). Они используются для встраиваемых систем, чипов ( FPGA , ASIC и SoC ) и периферийного тестирования, программирования и отладки. Многие из них также предоставляют возможности написания скриптов или программирования (например, Visual Basic , C / C++ , VHDL ).
Ключевые параметры SPI: максимальная поддерживаемая частота для последовательного интерфейса, задержка между командами и максимальная длина команд SPI. Сегодня на рынке можно найти адаптеры SPI, которые поддерживают последовательные интерфейсы до 100 МГц с практически неограниченной длиной доступа.
Поскольку протокол SPI является фактическим стандартом, некоторые хост-адаптеры SPI также имеют возможность поддерживать другие протоколы, выходящие за рамки традиционного 4-проводного SPI (например, поддержка протокола Quad-SPI или другого пользовательского последовательного протокола, являющегося производным от SPI [34] ).
Логические анализаторы — это инструменты, которые собирают, ставят временные метки , анализируют, декодируют, хранят и просматривают высокоскоростные формы сигналов, чтобы помочь в отладке и разработке. Большинство логических анализаторов имеют возможность декодировать сигналы шины SPI в высокоуровневые данные протокола с человекочитаемыми метками.
Формы сигналов SPI можно увидеть на аналоговых каналах (и/или через цифровые каналы в осциллографах смешанных сигналов ). [35] Большинство поставщиков осциллографов предлагают дополнительную поддержку анализа протокола SPI (как 2-, 3-, так и 4-проводного SPI) с запуском.
Для четырех распространенных сигналов SPI используются различные альтернативные сокращения. (В этом разделе опущены верхние черты, указывающие на активный низкий уровень.)
Microchip использует хост и клиент , хотя сохраняет аббревиатуры MOSI и MISO. [39]