Последовательный периферийный интерфейс
Эту статью , возможно, придется переписать, Википедии чтобы она соответствовала стандартам качества , поскольку она читается как руководство или учебник . ( март 2021 г. ) |
Эта статья , кажется, ориентирована на недавние события . ( декабрь 2023 г. ) |
Тип | Последовательная коммуникационная шина | ||
---|---|---|---|
История производства | |||
Дизайнер | Моторола | ||
Разработанный | Примерно в начале 1980-х годов [примечание 1] | ||
Производитель | различный | ||
Цепочка гирлянд | Зависит от устройств | ||
Разъем | Не указано | ||
Электрический | |||
Макс. Напряжение | Не указано | ||
Макс. текущий | Не указано | ||
Данные | |||
Ширина | 1 бит (двунаправленный) | ||
Макс. устройства | Многоточечная передача ограничена выбором чипа. Гирляндное подключение без ограничений. | ||
Протокол | Полнодуплексный последовательный | ||
Распиновка | |||
ДЫМ | Главный выход Ведомый вход | ||
МИСО | Мастер в рабстве | ||
СКЛК | Серийные часы | ||
CS | Выбор чипа (один или несколько) | ||
(контакты могут иметь альтернативные названия ) |
Serial Peripheral Interface ( SPI ) — это де-факто стандарт (со множеством вариантов ) для синхронной последовательной связи , используемый в основном во встроенных системах на коротких расстояниях для проводной связи между интегральными схемами .
SPI использует архитектуру «главный-подчиненный» , описанную здесь терминами «основной» и «подчиненный». [примечание 2] [1] где один [примечание 3] Основное устройство организует связь с некоторым количеством периферийных (под) устройств, управляя тактовым сигналом и сигналом(ами) выбора микросхемы .
Motorola В исходной спецификации связи используются четыре провода (начало 1980-х годов) для полнодуплексной . Иногда ее называют четырехпроводной последовательной шиной в отличие от трехпроводных вариантов, которые являются полудуплексными , а также двухпроводных последовательных шин I²C и 1-Wire .
Типичные области применения включают взаимодействие микроконтроллеров с периферийными микросхемами для карт Secure Digital , жидкокристаллические дисплеи , аналого-цифровые и цифро-аналоговые преобразователи , флэш- память и память EEPROM , а также различные коммуникационные микросхемы.
SPI можно точно описать как синхронный последовательный интерфейс. [2] но он отличается от протокола синхронного последовательного интерфейса (SSI). [примечание 4]
Операция
[ редактировать ](Примечание: в разделе «Вариации» описывается работа нестандартных вариантов.)
SPI имеет четыре логических сигнала (которые могут иметь альтернативные названия ):
Короткий
ИмяДлинный
ИмяОписание
(исторические термины в скобках)CSВыбор чипас активным низким уровнем Сигнал выбора микросхемы от основного (ведущего) до
включить связь с конкретным подчиненным (подчиненным) устройством.СКЛКСерийные часыТактовый сигнал от основного (мастера). ДЫМОсновной выход, сабвуфер
(ведущий выход, подчиненный вход)Последовательные данные от главного (главного), старший бит начинается первым. МИСООсновной вход, дополнительный выход
(главный вход, подчиненный выход)Последовательные данные от подчиненного (ведомого), старший бит начинается первым.
MOSI на основном выходе на MOSI на сабвуфере. MISO на сабвуфере выводит на MISO на главном.
SPI работает с одним устройством, выступающим в качестве основного, и с одним или несколькими вспомогательными устройствами.
Вспомогательные устройства должны использовать выходы с тремя состояниями , чтобы их сигнал MISO становился высоким импедансом ( электрически отключенным ), когда устройство не выбрано. Сабвуферы без выходов с тремя состояниями не могут использовать провод MISO совместно с другими сабвуферами без использования внешнего буфера с тремя состояниями.
Передача данных
[ редактировать ]Чтобы начать связь, главный SPI сначала выбирает вспомогательное устройство, переводя его CS в низкий уровень. (Примечание: полоса над CS указывает на активный низкий сигнал, поэтому низкое напряжение означает «выбрано», а высокое напряжение означает «не выбрано»)
Если требуется период ожидания, например, для аналого-цифрового преобразования, главный процессор должен подождать как минимум этот период времени, прежде чем выдавать тактовые циклы. [примечание 5]
Во время каждого тактового цикла SPI происходит полнодуплексная передача одного бита. Основной отправляет бит по линии MOSI, а подчиненный отправляет бит по линии MISO, а затем каждый считывает соответствующий входящий бит. Эта последовательность сохраняется даже тогда, когда предполагается только однонаправленная передача данных.
Передача с использованием одного сабвуфера (рис. 1) включает в себя один сдвиговый регистр в основном и один сдвиговый регистр в сабвуфере, оба имеют определенный размер слова (например, 8 бит). [примечание 6] соединены в топологии виртуального кольца . Данные обычно сначала сдвигаются по старшему биту (MSB). [примечание 7] На фронте тактовой частоты и основной, и дополнительный немного смещаются к своему аналогу. На следующем фронте тактового сигнала каждый приемник производит выборку переданного бита и сохраняет его в сдвиговом регистре как новый младший бит. После того, как все биты были смещены наружу и внутрь, главный и вспомогательный регистры обменялись значениями регистров. Если требуется обмен дополнительными данными, сдвиговые регистры перезагружаются, и процесс повторяется. Передача может продолжаться любое количество тактов. По завершении основной перестает переключать тактовый сигнал и обычно отменяет выбор сабвуфера.
Если используется одно вспомогательное устройство, его CS вывод может быть зафиксирован на низком логическом уровне, если вспомогательное устройство позволяет это. При наличии нескольких вспомогательных устройств многоабонентская конфигурация требует независимого сигнала CS от основного для каждого вспомогательного устройства, в то время как для последовательной конфигурации требуется только один сигнал CS .
Каждый сабвуфер на шине, который не был выбран, должен игнорировать входную тактовую частоту и сигналы MOSI. А чтобы предотвратить конфликты в MISO, невыбранные подпрограммы должны использовать вывод с тремя состояниями . Для обеспечения этого сабвуферам, которые еще не имеют три состояния, потребуются внешние буферы с тремя состояниями. [3]
Полярность и фаза часов
[ редактировать ]Помимо установки тактовой частоты, главный процессор также должен настроить полярность и фазу тактового сигнала относительно данных. Моторола [4] [5] эти две опции названы CPOL и CPHA (для и полярности синхронизации соответственно, и фазы ) это синхронизации соглашение также приняло большинство поставщиков.
SPI Показанная временная диаграмма подробно описана ниже:
- CPOL представляет полярность часов. Полярности можно преобразовать с помощью простого инвертора .
- SCLK CPOL=0 — это тактовый сигнал, в котором спадающий фронт значителен.
- SCLK CPOL=1 — это тактовый сигнал, в котором нарастающий фронт значителен, т. е. когда тактовый сигнал переходит в логическое высокое напряжение.
- CPHA представляет фазу цикла передачи каждого бита данных относительно SCLK.
- Для CPHA=0:
- Первый бит данных выводится сразу после активации CS .
- Последующие биты выводятся, когда SCLK переходит на уровень напряжения ожидания.
- Выборка происходит, когда SCLK переходит с уровня напряжения холостого хода.
- Для CPHA=1:
- Первый бит данных выводится на первом фронте тактового сигнала SCLK после активации CS .
- Последующие биты выводятся, когда SCLK переходит с уровня напряжения ожидания.
- Выборка происходит, когда SCLK переходит на уровень напряжения холостого хода.
- Преобразование между этими двумя фазами нетривиально.
- Примечание. Сигналы MOSI и MISO обычно стабильны (в точках приема) в течение полупериода до тех пор, пока не начнется цикл передачи следующего бита, поэтому основное и вспомогательное устройства SPI могут производить выборку данных в разных точках этого полупериода для обеспечения гибкости, несмотря на исходный код. спецификация.
- Для CPHA=0:
Номера режимов
[ редактировать ]Комбинации полярности и фаз обозначаются этими номерами «режима SPI», где CPOL — старший бит, а CPHA — младший бит:
Режим SPI | Полярность часов (КПОЛ) |
Фаза часов (CPHA) |
Данные смещаются на | Данные отбираются на |
---|---|---|---|---|
0 | 0 | 0 | падение SCLK, и при CS активации | растущий SCLK |
1 | 0 | 1 | растущий SCLK | падение SCLK |
2 | 1 | 0 | повышение SCLK и при CS активации | падение SCLK |
3 | 1 | 1 | падение SCLK | растущий SCLK |
Примечания:
- Другое часто используемое обозначение представляет режим как кортеж (CPOL, CPHA); например, значение «(0, 1)» будет указывать CPOL=0 и CPHA=1.
- В полнодуплексном режиме основное устройство может передавать и принимать в разных режимах. Например, он может передавать в режиме 0 и одновременно принимать в режиме 1.
- Разные поставщики могут использовать разные схемы именования, например CKE для фронта тактовой частоты или NCPHA для инверсии CPHA.
Действительные сообщения
[ редактировать ]Некоторые вспомогательные устройства предназначены для игнорирования любых соединений SPI, в которых количество тактовых импульсов превышает указанное. Других это не волнует, они игнорируют дополнительные входные данные и продолжают сдвигать один и тот же выходной бит. Обычно разные устройства используют связь SPI разной длины, как, например, когда SPI используется для доступа к цепочке сканирования микросхемы путем выдачи командного слова одного размера (возможно, 32 бита), а затем получения ответа другого размера. размер (возможно, 153 бита, по одному на каждый вывод в этой цепочке сканирования).
Прерывания
[ редактировать ]Прерывания выходят за рамки SPI; их использование не запрещено и не указано, поэтому может быть реализовано опционально.
От основного к суб
[ редактировать ]Микроконтроллеры, сконфигурированные как вспомогательные устройства, могут иметь аппаратную поддержку для генерации сигналов прерывания для себя, когда принимаются слова данных или происходит переполнение в приемном буфере FIFO . [6] а также может настроить процедуру прерывания, когда их входная линия выбора чипа переходит на низкий или высокий уровень.
От сабвуфера к основному
[ редактировать ]Подсистемы SPI иногда используют внеполосный сигнал (другой провод) для отправки сигнала прерывания в основную сеть. Примеры включают прерывания от нажатия пера от датчиков сенсорного экрана , оповещения о температурном пределе от датчиков температуры , сигналы тревоги, выдаваемые чипами часов реального времени , SDIO. [примечание 8] и вставки аудиоразъема для аудиокодека . Прерывания основного канала также можно имитировать с помощью опроса (аналогично USB 1.1 и 2.0 ).
Разработка программного обеспечения
[ редактировать ]SPI подходит для разработки программного обеспечения «драйвера шины». Программное обеспечение для подключенных устройств написано для вызова «драйвера шины», который обрабатывает фактическое оборудование SPI низкого уровня. Это позволяет коду драйвера подключенных устройств легко переносить на другое оборудование или на мощную программную реализацию.
Бит-бэнгирование протокола
[ редактировать ]Псевдокод . ниже описывает программную реализацию (« битовую обработку ») протокола SPI как основного с одновременным выводом и вводом Этот псевдокод предназначен для CPHA=0 и CPOL=0, таким образом, SCLK устанавливается на низкий уровень перед активацией CS , и биты вводятся по нарастающему фронту SCLK, а биты выводятся по заднему фронту SCLK.
- Инициализируйте SCLK как низкий уровень и CS как высокий уровень.
- Потяните CS вниз, чтобы выбрать сабвуфер
- Цикл для любого количества байтов для передачи: [примечание 9]
- Инициализировать
byte_out
со следующим выходным байтом для передачи - Повторите 8 раз:
- Левый сдвиг [примечание 10] следующий выходной бит из
byte_out
в МОСИ - NOP сабвуфера для времени установки
- Поднимите SCLK высоко
- Сдвиньте влево следующий входной бит из MISO в
byte_in
- NOP для времени удержания субмарины
- Потяните SCLK на низкий уровень
- Левый сдвиг [примечание 10] следующий выходной бит из
byte_in
теперь содержит этот недавно полученный байт и может использоваться по желанию
- Инициализировать
- Потяните CS высоко, чтобы отменить выбор сабвуфера
Протокол битовой обработки субподчиненного устройства аналогичен приведенному выше, но отличается от него. Реализация может включать ожидание падения CS или запуск процедуры прерывания при падении CS , а затем сдвиг битов внутрь и наружу, когда полученный SCLK изменяется соответствующим образом, независимо от того, как долго длится размер передачи.
Топологии шины
[ редактировать ]Хотя предыдущий раздел эксплуатации был посвящен базовому интерфейсу с одним сабвуфером, вместо этого SPI может взаимодействовать с несколькими сабвуферами, используя многоточечные, шлейфовые конфигурации или конфигурации расширителя.
Многоточечная конфигурация
[ редактировать ]В конфигурации многоточечной шины каждый подчиненный имеет свой собственный CS , а основной выбирает только один за раз. 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] и я 2 С.
Конфигурации расширителя
[ редактировать ]Конфигурации расширителей используют устройства адресации, управляемые по SPI (например, двоичные декодеры , демультиплексоры или сдвиговые регистры) для добавления выбора микросхемы.
Например, одна CS может использоваться для передачи демультиплексору, управляемому SPI, индексного номера, управляющего его сигналами выбора, в то время как другая CS маршрутизируется через этот демультиплексор в соответствии с этим индексом для выбора желаемого подсистемы. [11]
Плюсы и минусы
[ редактировать ]Преимущества
[ редактировать ]- Полнодуплексная связь в версии этого протокола по умолчанию.
- Двухтактные драйверы (в отличие от драйверов с открытым стоком ) обеспечивают относительно хорошую целостность сигнала и высокую скорость.
- Более высокая пропускная способность, чем у I²C или SMBus
- Однако протокол SPI не имеет максимальной тактовой частоты:
- Отдельные устройства указывают приемлемые тактовые частоты.
- Проводка и электроника ограничивают частоту
- Однако протокол SPI не имеет максимальной тактовой частоты:
- Полная гибкость протокола для передаваемых битов
- Не ограничивается 8-битными символами
- Произвольный выбор размера, содержания и цели сообщения.
- Простое оборудование и интерфейс
- Аппаратная реализация сабвуферов требует только выбираемого сдвигового регистра.
- Сабвуферы используют тактовую частоту основного генератора и, следовательно, не нуждаются в прецизионных генераторах.
- Подсистемам не нужен уникальный адрес – в отличие от I²C , GPIB или SCSI.
- Сеть требует только дополнительной генерации тактовых и CS- сигналов.
- Результаты в простой программной реализации с бит-бэнгом
- Использует только четыре контакта на корпусах микросхем и проводов в макетах плат или разъемах, гораздо меньше, чем в параллельных интерфейсах.
- Не более одного уникального сигнала на устройство ( CS ); все остальные общие
- Примечание. Для последовательной конфигурации не требуется более одной общей базовой станции.
- Не более одного уникального сигнала на устройство ( CS ); все остальные общие
- Обычно более низкие требования к питанию, чем у I²C или SMBus, из-за меньшего количества схем (включая подтягивающие резисторы)
- Единственная главная означает отсутствие арбитража шины (и связанных с ним режимов отказа) - в отличие от CAN-шины.
- Трансиверы не нужны - в отличие от CAN-шины
- Сигналы являются однонаправленными, что обеспечивает простую гальваническую развязку.
- Аппаратная реализация сабвуферов требует только выбираемого сдвигового регистра.
Недостатки
[ редактировать ]- Требуется больше контактов на корпусах микросхем, чем I²C , даже в трехпроводных вариантах.
- Обрабатывает только короткие расстояния по сравнению с RS-232 , RS-485 или CAN-шиной (хотя расстояние можно увеличить с помощью приемопередатчиков, таких как RS-422 ).
- Расширяемость значительно снижается, когда требуется несколько сабвуферов, использующих разные режимы SPI.
- Доступ замедляется, когда main часто требуется повторная инициализация в разных режимах.
- Нет формального стандарта
- Таким образом, проверка соответствия невозможна.
- Многие существующие варианты усложняют поддержку.
- Нет встроенной поддержки протоколов для некоторых удобств:
- Нет аппаратного контроля потока со стороны сабвуфера (но основной может задержать следующий фронт тактовой частоты, чтобы замедлить скорость передачи)
- Нет аппаратного дополнительного подтверждения (основной может передавать в никуда и не знать об этом)
- Нет протокола проверки ошибок
- Нет горячей замены (динамическое добавление узлов)
- Прерывания выходят за рамки SPI (см. § Прерывания ).
Приложения
[ редактировать ]SPI используется для связи с различными периферийными устройствами, такими как
- Датчики: температуры , давления , АЦП , сенсорные экраны , контроллеры видеоигр.
- Устройства управления: аудиокодеки , цифровые потенциометры , ЦАП.
- Объективы камеры: крепление объектива Canon EF
- Коммуникации: Ethernet , USB , USART , CAN , IEEE 802.15.4 , IEEE 802.11.
- Память: флэш-память и EEPROM.
- Часы реального времени
- ЖК-дисплеи , иногда даже для управления данными изображений
- Любая MMC или SD карта SDIO ). (включая вариант [примечание 8] )
- Сдвиговые регистры для дополнительного ввода-вывода [8] [9]
Экономия на площади платы и проводке по сравнению с параллельной шиной значительна и обеспечила SPI прочную роль во встраиваемых системах. Это верно для большинства процессоров «система-на-кристалле» , как для 32-разрядных процессоров более высокого класса, таких как те, которые используют ARM , MIPS или PowerPC, так и для микроконтроллеров более низкого уровня, таких как AVR , PIC и MSP430 . Эти микросхемы обычно включают в себя SPI-контроллеры, способные работать как в основном, так и в вспомогательном режиме. Внутрисистемные программируемые контроллеры AVR (в том числе пустые) можно запрограммировать с помощью SPI. [12]
В проектах на основе чипов или FPGA иногда используется SPI для связи между внутренними компонентами; Недвижимость на кристалле может быть такой же дорогой, как и его встроенный родственник. А в высокопроизводительных системах FPGA иногда используют SPI для взаимодействия с хостом, в качестве основного для датчиков или для флэш-памяти, используемой для начальной загрузки, если они основаны на SRAM.
Возможность полнодуплексного режима делает SPI очень простым и эффективным для одного главного/одного подчиненного приложения. Некоторые устройства используют полнодуплексный режим для реализации эффективного и быстрого потока данных для таких приложений, как цифровое аудио , цифровая обработка сигналов или телекоммуникационные каналы , но большинство готовых микросхем придерживаются полудуплексных протоколов запросов/ответов.
Вариации
[ редактировать ]SPI является де-факто стандартом . Однако отсутствие формального стандарта отражается на широком разнообразии вариантов протокола. Некоторые устройства предназначены только для передачи; другие предназначены только для приема. Выбор микросхемы иногда имеет активный высокий уровень, а не активный низкий уровень. Некоторые устройства сначала отправляют младший бит. Уровни сигнала полностью зависят от задействованных микросхем. И хотя базовый протокол SPI не имеет кодов команд, каждое устройство может определить свой собственный протокол кодов команд. Некоторые изменения незначительны или неофициальны, в то время как другие имеют официальный определяющий документ и могут считаться отдельными, но связанными протоколами.
Исходное определение
[ редактировать ]Motorola в 1983 году внесена в список [13] три 6805 8-битных микрокомпьютера со встроенным «последовательным периферийным интерфейсом», функциональность которого описана в руководстве 1984 года. [14]
АН991
[ редактировать ]Прикладной узел Motorola AN991 1987 года «Использование последовательного периферийного интерфейса для связи между несколькими микрокомпьютерами» [15] (сейчас под NXP , последняя редакция: 2002 г.) [5] ) неофициально служит «официальным» определяющим документом для SPI.
Варианты времени
[ редактировать ]Некоторые устройства имеют отличия по времени от режимов CPOL/CPHA компании Motorola. Отправка данных из подчиненного в основной может использовать противоположный фронт тактовой частоты в качестве основного для подчиненного. Устройствам часто требуется дополнительное время простоя тактовых импульсов перед первым тактовым сигналом или после последнего, а также между командой и ее ответом.
Некоторые устройства имеют два тактовых генератора: один для чтения данных, а другой для их передачи в устройство. Многие тактовые сигналы чтения запускаются из линии выбора чипа.
Размер передачи
[ редактировать ]Обычно используются разные размеры слова передачи. Многие чипы SPI поддерживают только сообщения, длина которых кратна 8 битам. Такие чипы не могут взаимодействовать с протоколами JTAG или SGPIO или любым другим протоколом, требующим сообщений, размер которых не кратен 8 битам.
Нет выбора чипа
[ редактировать ]Некоторые устройства не используют выбор чипа и вместо этого управляют входом/выходом конечного автомата протокола, используя другие методы.
Разъемы
[ редактировать ]Любой, кому нужен внешний разъем для SPI, определяет свое собственное или использует другое стандартное соединение, такое как: UEXT , Pmod , различные разъемы JTAG , Secure Digital гнездо для карты и т. д.
Управление потоком
[ редактировать ]Некоторым устройствам требуется дополнительный сигнал управления потоком данных от подчиненного устройства к основному, указывающий, когда данные готовы. Это приводит к использованию 5-проводного протокола вместо обычного 4-проводного. Такой сигнал готовности или разрешения часто имеет активный низкий уровень, и его необходимо включать в ключевые моменты, например, после команд или между словами. Без такого сигнала скорость передачи данных, возможно, придется значительно замедлить, или в протоколы может потребоваться вставка фиктивных байтов, чтобы учесть наихудший случай для времени дополнительного ответа. Примеры включают инициирование преобразования АЦП, обращение к нужной странице флэш-памяти и обработку команды, достаточную для того, чтобы встроенное ПО устройства могло загрузить первое слово ответа. (Многие сети SPI не поддерживают этот сигнал напрямую, а вместо этого полагаются на фиксированные задержки.)
СафеСПИ
[ редактировать ]СафеСПИ [16] является отраслевым стандартом SPI в автомобильной промышленности. Его основным направлением является передача данных датчиков между различными устройствами.
Модификации повышенной надежности
[ редактировать ]В средах с электрическими помехами, поскольку SPI имеет мало сигналов, может быть экономично уменьшить влияние синфазного шума , адаптировав SPI для использования низковольтной дифференциальной сигнализации . [17] Еще одним преимуществом является то, что управляемые устройства могут быть спроектированы для проверки целостности сигнала. [18]
Интеллектуальные SPI-контроллеры
[ редактировать ]Последовательный периферийный интерфейс с очередью ( 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]
Микропровод
[ редактировать ]Микропровод, [21] Часто пишется как μWire , по существу является предшественником SPI и торговой маркой National Semiconductor . Это строгий подмножество SPI: полудуплексный и использующий режим SPI 0. Микропроводным микросхемам, как правило, требуются более низкие тактовые частоты, чем более новым версиям SPI; возможно, 2 МГц против 20 МГц. Некоторые микросхемы Microwire также поддерживают трехпроводной режим.
Микропровод/Плюс
[ редактировать ]Микропровод/Плюс [22] является усовершенствованием Microwire и обеспечивает полнодуплексную связь и поддержку режимов SPI 0 и 1. Никакого определенного улучшения тактовой частоты последовательного порта не произошло.
Трехпроводной
[ редактировать ]Трехпроводные варианты SPI, ограниченные полудуплексным режимом, используют одну двунаправленную линию передачи данных, называемую SISO (дополнительный выход/дополнительный вход) или MOMI (основной выход/основной вход), вместо двух однонаправленных линий SPI (MOSI и MISO). Трехпроводное соединение обычно используется для деталей с более низкой производительностью, таких как небольшие EEPROM, используемые только во время запуска системы, некоторые датчики и микропровода . Немногие SPI-контроллеры поддерживают этот режим, хотя его можно легко изменить программно.
Двойной интерфейс SPI
[ редактировать ]В тех случаях, когда полнодуплексный характер SPI не используется, расширение использует оба контакта данных в полудуплексной конфигурации для отправки двух битов за такт. Обычно командный байт отправляется с запросом ответа в двойном режиме, после чего линия MOSI становится SIO0 (последовательный ввод-вывод 0) и передает четные биты, а линия MISO становится SIO1 и передает нечетные биты. Данные по-прежнему передаются сначала старшим битом, но SIO1 переносит биты 7, 5, 3 и 1 каждого байта, а SIO0 переносит биты 6, 4, 2 и 0.
Это особенно популярно среди ПЗУ SPI, которым необходимо отправлять большой объем данных, и существует в двух вариантах: [23] [24]
- Двойное чтение командует отправкой и адресом от основного в одиночном режиме и возвращает данные в двойном режиме.
- Команды двойного ввода-вывода отправляют команду в одиночном режиме, затем отправляют адрес и возвращают данные в двойном режиме.
Четырехпроводной интерфейс SPI
[ редактировать ]Quad SPI ( QSPI , но имеет ту же аббревиатуру, что и ; отличается от Queued-SPI описанный в § «Интеллектуальные контроллеры SPI» ) выходит за рамки двойного SPI, добавляя еще две линии ввода-вывода (SIO2 и SIO3) и отправляя 4 бита данных за такт. Опять же, его запрашивают специальные команды, которые включают четырехканальный режим после отправки самой команды в одиночном режиме. [23] [24]
- ИКП типа 1
- Команды отправляются в одну строку, а адреса и данные отправляются в четыре строки.
- ИУК Тип 2
- Команды и адреса отправляются в одной строке, а данные отправляются/получаются в четырех строках.
QPI/SQI
[ редактировать ]В дополнение к четырехканальному SPI некоторые устройства поддерживают режим «четверо все», в котором вся связь происходит по 4 линиям передачи данных, включая команды. [25] Это по-разному называется «QPI». [24] (не путать с Intel QuickPath Interconnect ) или «последовательный четырехканальный ввод-вывод» (SQI) [26]
Это требует программирования бита конфигурации в устройстве и требует осторожности после сброса для установления связи.
Двойная скорость передачи данных
[ редактировать ]Помимо использования нескольких линий для ввода-вывода, некоторые устройства увеличивают скорость передачи данных за счет использования двойной скорости передачи данных. [27] [28]
JTAG
[ редактировать ](IEEE 1149.1-2013) есть некоторые сходства Хотя между SPI и протоколом JTAG , они не являются взаимозаменяемыми. JTAG специально предназначен для обеспечения надежного тестового доступа к контактам ввода-вывода от внешнего контроллера с менее точными параметрами задержки и искажения сигнала, в то время как SPI имеет множество различных приложений. Хотя протокол JTAG не является строго чувствительным к уровню интерфейсом, он поддерживает восстановление нарушений установки и удержания между устройствами JTAG путем снижения тактовой частоты или изменения рабочих циклов тактовых импульсов. Следовательно, интерфейс JTAG не предназначен для поддержки чрезвычайно высоких скоростей передачи данных. [29]
СГПИО
[ редактировать ]SGPIO — это, по сути, еще один (несовместимый) стек приложений для SPI, предназначенный для определенных действий по управлению объединительной платой. [ нужна ссылка ] SGPIO использует 3-битные сообщения.
Улучшенный последовательный периферийный интерфейс Intel
[ редактировать ]Intel разработала преемницу своей шины с малым количеством выводов (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 для запроса услуги от основного. В дизайне, ориентированном на производительность, или в дизайне только с одним подключаемым модулем eSPI, каждый подключаемый модуль eSPI будет иметь свой вывод Alert#, подключенный к выводу Alert# на главном eSPI, который выделен для каждого подключаемого модуля, что позволяет основному eSPI обеспечивать низкую задержку. служба, поскольку главный eSPI будет знать, какой дополнительный eSPI нуждается в обслуживании, и ему не нужно будет опрашивать все подчиненные устройства, чтобы определить, какое устройство нуждается в обслуживании. В бюджетной конструкции с более чем одним сабвуфером eSPI все контакты Alert# сабвуферов подключены к одному контакту Alert# на основном eSPI по проводному соединению «ИЛИ», что требует, чтобы основной опрашивал все сабвуферы, чтобы определить, какой из них им требуется обслуживание, когда сигнал 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]
Инструменты разработки
[ редактировать ]Одноплатные компьютеры
[ редактировать ]Одноплатные компьютеры могут обеспечивать доступ к выводам аппаратных блоков SPI. Например, заголовок J8 Raspberry Pi предоставляет как минимум два модуля SPI, которые можно использовать через Linux драйверы или Python .
Адаптеры USB-SPI
[ редактировать ]Существует ряд 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) с запуском.
Альтернативная терминология
[ редактировать ]Термин «главное» обычно используется для обозначения главного устройства и «подчиненного» для периферийных (под) устройств. Эти термины отражают то, как основное устройство отвечает за управление последовательными часами и инициирование связи: периферийные устройства могут взаимодействовать только тогда, когда основное устройство управляет часами.
Были предложены различные более современные альтернативные названия для каждого из четырех сигналов:
- SCK: последовательные часы. Альтернативы:
- СКК, СКЛК, КЛК, СКЛ
- MOSI: Выход «Главный» → Вход «Подчиненный». Теперь его можно читать как «Основной» выход и «Подчиненный» вход, или можно использовать следующие альтернативы:
- SIMO, MTSR, SPID — соответствуют MOSI как на основном, так и на подчиненных устройствах, подключаются друг к другу
- SDI, DI, DIN, SI, SDA – на суб-устройствах; Различные сокращения «Серийный», «Данные», «Входящие». Подключается к MOSI (или альтернативным именам) на главном
- SDO, DO, DOUT, SO – на основных устройствах; Различные сокращения для «Последовательный», «Данные», «Выход». подключается к MOSI (или альтернативным именам) на сабвуфере
- COPI, PICO для «периферийного устройства и контроллера», [36] [37] или COTI для «контроллера» и «цели». [38]
- MISO: «Главный» вход ← «Подчиненный» выход. Теперь его можно читать как «Основной» в «Подчиненном» выходе или использовать следующие альтернативы:
- SOMI, MRST, SPIQ — соответствуют MISO как на основном, так и на подчиненных устройствах, подключаются друг к другу.
- SDO, DO, DOUT, SO — на суб-устройствах; подключается к MISO (или альтернативным именам) на основном
- SDI, DI, DIN, SI – на основных устройствах; подключается к MISO (или альтернативным именам) на субстанции
- ЦИПО, ПОКИ, [36] [37] или ЦИТО [38]
- SS : Выбор «Slave» (те же функции, что и Chip Select ). Альтернативы:
- SS, SS , SSEL, NSS, /SS, SS# (дополнительный выбор)
- CS, CS (выбор чипа)
- CE (включение чипа)
Microchip использует «Хост» и «Клиент», но сохраняет аббревиатуры MOSI и MISO. [39]
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ Самое раннее окончательное упоминание о «последовательном периферийном интерфейсе» в архивах битсейверов руководств Motorola относится к 1983 году (см. § Исходное определение ). Хотя некоторые источники в Интернете утверждают, что Motorola представила SPI, когда в 1979 году был представлен 68000, однако многие из них, похоже, являются цитогенезом или предположениями, а в руководстве Motorola 68000 1983 года нет упоминания о «последовательном периферийном интерфейсе», поэтому предполагаемая дата 1979 года не соответствует действительности. Ненадежная информация. Пожалуйста, добавляйте конкретную дату design_date только в том случае, если на тот момент у вас есть точный источник от Motorola.
- ^ В разделе § Альтернативная терминология представлена более подробная информация о предлагаемой альтернативной терминологии. См. страницу обсуждения для продолжающегося обсуждения.
- ^ Для любой транзакции только одно устройство является основным. Однако некоторые устройства поддерживают изменение основных и дополнительных ролей на лету. Большинство микроконтроллеров могут легко перенастроить роль своего SPI, а некоторые устройства Atmel и Silabs могут менять роли в зависимости от внешнего контакта.
- ^ Хотя синхронный последовательный интерфейс (SSI) также является четырехпроводным протоколом синхронной последовательной связи, протокол SSI использует дифференциальную сигнализацию и обеспечивает только один симплексный канал связи.
- ^ требуется задний фронт сигнала выбора чипа Некоторым сабвуферам для инициирования действия . Примером может служить АЦП Maxim MAX1242, который начинает преобразование при переходе высокого уровня в низкий.
- ^ Передачи часто состоят из восьмибитных слов. Однако распространены и другие размеры слов, например, шестнадцатибитные слова для контроллеров сенсорного экрана или аудиокодеков, таких как TSC2101 от Texas Instruments, или двенадцатибитные слова для многих цифро-аналоговых или аналого-цифровых преобразователей. -цифровые преобразователи.
- ^ В исходной спецификации есть LSBFE («LSB-First Enable»), позволяющий контролировать, будут ли данные передаваться первыми — младший (LSB) или старший бит (MSB).
- ^ Перейти обратно: а б Не путать с линией SDIO (последовательный ввод-вывод данных) полудуплексной реализации SPI, которую иногда также называют «3-проводным» SPI. Здесь, например, MOSI (через резистор) и MISO (без резистора) основного подключены к линии SDIO сабвуфера.
- ^ Периферийные устройства могут разрешать или требовать определенное количество (или любое количество) передаваемых байтов, пока они выбраны, как указано в их технических характеристиках.
- ^ Используется сдвиг влево, поскольку SPI обычно передает первым самый старший бит. Вместо этого можно использовать сдвиг вправо для передачи сначала младшего бита.
- ^ Например, с многоканальным интерфейсом последовательного порта или McSPI, используемым в чипах OMAP компании Texas Instruments. ( https://www.ti.com/product/OMAP3530 )
- ^ Например, контроллер SPI на чипах Atmel AT91, например at91sam9G20, который намного проще, чем McSPI от TI.
Ссылки
[ редактировать ]- ^ Дакер, Пию (2018). «Введение в интерфейс SPI» . Аналоговый диалог . Архивировано из оригинала 25 мая 2023 г. Проверено 21 июля 2023 г.
- ^ «Что такое последовательный синхронный интерфейс (SSI)?» . Проверено 28 января 2015 г.
- ^ Перейти обратно: а б с Улучшение проектирования шины SPI за 3 шага
- ^ Руководство по блокам SPI v3.06; Моторола/Freescale/NXP; 2003.
- ^ Перейти обратно: а б «AN991/D: Использование последовательного периферийного интерфейса для связи между несколькими микрокомпьютерами» (PDF) . НХП . 2004 [1994]. Архивировано (PDF) из оригинала 4 апреля 2023 г. Проверено 14 октября 2021 г.
- ^ «Справочное руководство по последовательному периферийному интерфейсу TMS320x281x» . Техасские инструменты . 2002. стр. 16–17.
- ^ Примечание по применению Maxim-IC 3947: «Последовательное подключение устройств SPI»
- ^ Перейти обратно: а б Гаммон, Ник (23 марта 2013 г.). «Форум Gammon: Электроника: Микропроцессоры: Использование входного сдвигового регистра 74HC165» . Гаммонный форум . Архивировано из оригинала 29 июля 2023 г. Проверено 03 августа 2023 г.
- ^ Перейти обратно: а б Гаммон, Ник (31 января 2012 г.). "Форум Gammon: Электроника: Микропроцессоры: Использование выходного сдвигового регистра 74HC595 в качестве расширителя портов" . Гаммонный форум . Архивировано из оригинала 14 июля 2023 г. Проверено 03 августа 2023 г.
- ^ Интерфейсы , 1977, стр. 80, 84.
- ^ «Мультиплексор последовательного управления расширяет выбор микросхем SPI» (PDF) . Премьер Фарнелл . 01 июля 2001 г. Архивировано из оригинала (PDF) 19 августа 2019 г.
- ^ «AVR910 — Внутрисистемное программирование» (PDF) . Архивировано из оригинала (PDF) 2 марта 2011 г.
- ^ компоненты :: Motorola :: DataBooks :: 8-битный микропроцессор Motorola и периферийные данные 1983 г.
- ^ Motorola :: DataBooks :: Данные однокристального микрокомпьютера Motorola, 1984 г.
- ^ «Использование последовательного периферийного интерфейса для связи между несколькими микрокомпьютерами» (PDF) . Битсейверы .
- ^ SafeSPI.org
- ^ «Передача SPI через интерфейсы LVDS» (PDF) . Техасские инструменты . Проверено 14 февраля 2021 г.
- ^ «Пример шлейфа главного SPI» . Северный полупроводник . Проверено 14 февраля 2021 г.
- ^ «Freescale Semiconductor, Inc. — QSM — Последовательный модуль с очередью — Справочное руководство» (PDF) . НХП . 1996 [1991]. Архивировано из оригинала (PDF) 24 августа 2019 г.
- ^ «Quad-SPI обеспечивает быструю параллельную передачу данных» . Системы проектирования Cadence . 11 января 2023 г. Архивировано из оригинала 01 июня 2023 г. Проверено 30 июня 2023 г.
- ^ MICROWIRE Последовательный интерфейс National Semiconductor Application Note AN-452
- ^ Последовательный интерфейс MICROWIRE/PLUS для семейства COP800. Примечание по применению National Semiconductor AN-579.
- ^ Перейти обратно: а б «W25Q16JV 3 В, 16 Мбит последовательной флэш-памяти с Dual/Quad SPI» (PDF) (технические данные). Редакция Д. Винбонд . 12 августа 2016 года . Проверено 10 февраля 2017 г.
- ^ Перейти обратно: а б с «D25LQ64, 1,8 В, унифицированная секторная флэш-память с двумя и четырьмя SPI» (PDF) (технические данные). версия 0.1. ГигаДевайс. 11 февраля 2011 г. Архивировано из оригинала (PDF) 12 февраля 2017 г. . Проверено 10 февраля 2017 г.
- ^ «QuadSPI flash: режим Quad SPI и режим QPI» . Форумы сообщества NXP . Декабрь 2014 года . Проверено 10 февраля 2016 г.
- ^ «SST26VF032B / SST26VF032BA 2,5 В/3,0 В, 32 Мбит, флэш-память с четырьмя последовательными вводами-выводами (SQI)» (PDF) (технические данные). версия E. Microchip, Inc. 2017 г. Проверено 10 февраля 2017 г.
- ^ Паттерсон, Дэвид (май 2012 г.). «Обновления модуля четырехпоследовательного периферийного интерфейса (QuadSPI)» (PDF) (примечания по применению). Фрискейл Полупроводник . Проверено 21 сентября 2016 г.
- ^ Пелл, Рич (13 октября 2011 г.). «Повышение производительности с помощью флэш-памяти SPI-DDR NOR» . ЭДН .
- ^ IEEE 1149.1-2013.
- ^ Перейти обратно: а б с д и ж г час Базовая спецификация интерфейса расширенного последовательного периферийного интерфейса (eSPI) (для клиентских и серверных платформ) (PDF) (отчет). Версия 1.0. Интел. Январь 2016. Номер документа 327432-004 . Проверено 5 февраля 2017 г.
- ^ Спецификация интерфейса расширенного последовательного периферийного интерфейса (eSPI) (для клиентских платформ) (PDF) (отчет). Версия 0.6. Интел. Май 2012 г. Номер документа 327432-001EN . Проверено 5 февраля 2017 г.
- ^ «Техническое описание PCH семейства наборов микросхем Intel® серии 100, том 1» (PDF) . Проверено 15 апреля 2015 г.
- ^ «Конвертер USB в SPI» . ФТДИ . 2 августа 2020 г. Проверено 14 февраля 2021 г.
- ^ SPI Storm - хост-адаптер последовательного протокола с поддержкой пользовательских последовательных протоколов, байтовая парадигма.
- ^ «N5391B Запуск и декодирование протоколов I²C и SPI для осциллографов Infiniium» .
- ^ Перейти обратно: а б СПИ; ОШВА.
- ^ Перейти обратно: а б https://www.ti.com/lit/an/scea091a/scea091a.pdf
- ^ Перейти обратно: а б «Устройства последовательного периферийного интерфейса (SPI)» . НХП . Архивировано из оригинала 01 июня 2023 г. Проверено 22 июля 2023 г.
- ^ Стойческу, Алин. «Начало работы с последовательным периферийным интерфейсом (SPI)» . Микрочиповая технология . Архивировано из оригинала 21 декабря 2023 г. Проверено 21 декабря 2023 г.