Интерфейс SPI — это один из самых популярных на сегодняшний день последовательных интерфейсов. Он был придуман фирмой Motorola и очень быстро завоевал популярность благодаря своей исключительной простоте и высокой скорости. При этом, SPI, наверное, нельзя назвать в полной мере интерфейсом, скорее это просто принцип связи, поскольку всё, что подразумевается под SPI, — это логика передачи данных между двумя устройствами («Ведущий»-«Ведомый»), физике же уделяется гораздо меньшее внимание, она реализуется, можно сказать, «по обстоятельствам», а никакого протокола нижнего уровня вообще нет, тут каждый производитель придумывает что-то своё.
Ну что ж, — с главного и начнём. Итак, в чём же тут логика? Логика в том, что данные передаются последовательно, побитно, при этом считывание и установка данных разделены во времени с помощью специального синхросигнала на специальной шине. Эта шина называется шиной тактирования (или шиной синхронизации), а суть разделения заключается в том, что считывание и установка данных происходят по противоположным фронтам генерируемых на шине синхроимпульсов. Такое, чётко разделённое во времени, чередование установок и считываний даёт возможность использовать один и тот же регистр и для приёма, и для передачи данных. Ранее (когда память была маленькой и дорогой, операционки хранились на дискетах, а по полям бегали мамонты ) это было серьёзным преимуществом, более того, именно под это на самом деле изначально и затачивался SPI, однако сейчас никаких проблем с обьёмом памяти нет и большинство устройств спокойно могут позволить себе иметь отдельные входной и выходной регистры.
Устройство, управляющее шиной тактирования (то есть генерирующее на ней синхроимпульсы), является «Ведущим» или «Мастером». Собственно, «Master» управляет всем обменом данными, — он решает: когда начинать обмен, когда заканчивать, сколько бит передать и т.д. Второе устройство, участвующее в обмене, является «Ведомым» или «Slave». В SPI, в отличии от, например, того же I2C, «Slave» совсем бесправен, он вообще никак не может влиять на шину тактирования и никак не может сообщить мастеру, что не успевает или, наоборот, что уже готов к обмену. То есть «Мастер» сам должен знать: когда, что и на какой скорости спросить у «Слэйва», чтобы тот смог ему ответить.
Всего, для полнодуплексного обмена (в обе стороны одновременно), в интерфейсе SPI используются 4 линии (смотрим рисунок): SCLK, MOSI, MISO и SS.
- SCLK — шина тактирования (на этой линии мастер генерирует синхроимпульсы)
- MOSI (Master Out, Slave In) — выход ведущего, вход ведомого (по этой линии мастер передаёт данные слэйву)
- MISO (Master In, Slave Out) — вход ведущего, выход ведомого (по этой линии мастер принимает данные от слэйва)
- SS (Slave Select) — выбор ведомого (с помощью этой линии мастер управляет сеансами обмена)
«1» и «0» кодируются уровнем напряжения на шинах данных (MOSI, MISO) в обычной положительной логике, то есть высокий уровень напряжения на шине соответствует «единице», а низкий уровень соответствует «нулю». При этом, то, каким образом организуется установка на шинах этих уровней, — нигде не оговаривается, то есть выходы передатчиков могут быть как «push-pull», так и «с открытым коллектором». Высокий уровень обычно соответствует напряжению питания микросхемы (то есть если мы имеем дело с пятивольтовыми микрухами, то высокий уровень — это напряжение, близкое к пяти вольтам, если речь идёт о микрухах, питающихся от 3,3В, то высокий уровень — это напряжение, близкое к 3,3В).
Сигнал SS отмечает начало и конец сеанса обмена. Этот сигнал обычно инверсный, то есть во время сеанса обмена данными мастер должен устанавливать на линии SS низкий уровень, а при отсутствии обмена — высокий. Наличие сигнала SS позволяет мастеру организовать подключение к нескольким слэйвам, используя один и тот же синхросигнал и одни и те же шины данных, без каких-либо дополнительных протоколов (вариант такого подключения показан на рисунке слева). Правда тут есть один минус: в этом случае мастеру придётся к каждому слэйву подключаться по отдельной линии SS (чтобы управлять сеансами обмена с каждым слэйвом независимо друг от друга), что увеличивает общее количество используемых проводов.
Названия линий, в общем-то, не являются каким-то стандартом и могут отличаться в зависимости от производителя (например, вместо MOSI, MISO и SCLK линии могут называться DI, DO и SC, или SI, SO и CLK, линия SS может называться CS или RESET).
Более того, линий не обязательно должно быть четыре, — иногда их может быть только три, например, если данные передаются только в одном направлении или вместо двух однонаправленных шин данных используется одна двунаправленная. Очевидно, что в последнем случае возможен только полудуплексный обмен, то есть в один момент времени можно только передавать или только принимать данные (а передавать и принимать одновременно — нельзя).
То есть, ни по названию линий, ни по уровням напряжения на них, ни даже по их количеству, однозначно идентифицировать SPI нельзя, зато это отлично можно сделать по самому методу передачи данных, по тому как происходит их установка на шину и считывание.
Как я уже упоминал, — данные передаются побитно, а установка и чтение данных происходит по противоположным фронтам сигнала тактирования. Момент чтения данных в англоязычной литературе называется latch (фиксация, защёлкивание), а момент установки данных на шину — shift (сдвиг). Сдвигом момент установки называется в силу особенностей большинства последовательных интерфейсов. Обычно никто не передаёт данные по одному биту, как правило, их посылают пачками по 8 и более бит (размер пачки чаще всего всё же кратен восьми). В связи с этим, на выходе передатчика делают сдвиговый регистр, куда загружают сразу всю пачку передаваемых бит, при этом значение младшего или старшего бита этого сдвигового регистра устанавливается на шине данных (смотря как передаём — младшим или старшим битом вперёд), а для установки на шине следующего передаваемого бита — достаточно «сдвинуть» этот регистр. Так устроены передатчики и в SPI, и в I2C, и в привычном RS232, и много где ещё (так просто аппаратно удобнее). Ну, ладно, — вернёмся к нашему SPI.
Читайте также: Шины lassa 245 70 r16
Логический уровень сигнала на шине тактирования в неактивном состоянии (когда нет передачи данных) называют полярностью и обозначают CPOL (то есть, если при отсутствии передачи на шине SCLK низкий уровень, то CPOL=0, а если в это время на шине SCLK высокий уровень, то CPOL=1). Порядок чередования считываний и сдвигов называют фазой и обозначают CPHA (если по первому фронту на SCLK происходит считывание, то CPHA=0, а если по первому фронту на SCLK происходит сдвиг, то CPHA=1).
В зависимости от сочетания значений CPOL и CPHA различают 4 режима работы интерфейса SPI, которые так и обозначают Mode0, Mode1, Mode2 и Mode3. Ниже приведена картинка, иллюстрирующая как происходит установка и чтение данных, в зависимости от выбранного режима.
Хотелось бы подчеркнуть, что SS — это именно линия управления сеансом обмена, а не просто линия выбора слэйва. Разница тут в том, что если считать SS просто линией выбора слэйва, то при подключении мастера к одному единственному слэйву возникает соблазн этой линией не управлять, а жёстко закоротить её на общий провод (типа чтоб слэйв всегда был выбран). Однако, логика слэйва обычно такова, что начало сеанса сопровождается различными подготовительными процедурами, такими как загрузка данных в выходной сдвиговый регистр и сброс счётчика импульсов, а выполнять какие-то действия (в соответствии с принятыми по SPI командами от мастера) слэйв начинает только после завершения сеанса обмена. Кроме того, вам ведь вполне может понадобиться несколько сеансов общения (например, если в первом сеансе вы посылаете команды, а в следующем хотите получить отчёт о результате их выполнения). Думаю понятно, что если жёстко притянуть линию SS к общему проводу, то ни о каком распознавании начала и конца сеанса обмена (начало распознаётся по спаду на линии SS, а конец — по подъёму) не может быть и речи, соответственно весь обмен данными будет нарушен. Так что важность сигнала SS не стоит недооценивать.
Ну и напоследок скажу, что наиболее популярными являются режимы Mode0 и Mode3.
Более подробно о том, как происходит обмен, что должен уметь SPI-мастер и как это программно реализовать на микроконтроллере (на примере контроллеров PIC и AVR) можно почитать в статье «Программная реализация ведущего шины SPI»
- Национальная библиотека им. Н. Э. Баумана Bauman National Library
- Персональные инструменты
- SPI (Serial Peripheral Interface)
- Интерфейс
- Операции
- Передача данных
- Часы полярности и фазы
- Топология систем связи на базе SPI
- Синхронизация в SPI
- Приложения
- Преимущества и недостатки интерфейса SPI
- Преимущества
- Недостатки
- Стандарты
- Пример программной реализации
- 📸 Видео
Видео:Лекция 307. Интерфейс SPIСкачать
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Видео:Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1)Скачать
SPI (Serial Peripheral Interface)
SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный периферийный интерфейс, служит для связи периферии и микроконтроллера. Например, в качестве периферии может быть: дисплей, различные датчики, FLASH память, SD карта (да, да, SD карта или «флешка» которую вы используете в телефонах и фотоаппаратах общается с внешним миром с помощью интерфейса SPI) и т.д.Интерфейс SPI, наряду с I2C, относится к самым широко-используемым интерфейсам для соединения микросхем. Изначально он был придуман компанией Motorola, а в настоящее время используется в продукции многих производителей. Его наименование является аббревиатурой от ‘Serial Peripheral Bus’, что отражает его предназначение — шина для подключения внешних устройств. Шина SPI организована по принципу ‘ведущий-подчиненный’. В качестве ведущего шины обычно выступает микроконтроллер, но им также может быть программируемая логика, DSP-контроллер или специализированная ИС. Подключенные к ведущему шины внешние устройства образуют подчиненных шины. В их роли выступают различного рода микросхемы, в т.ч. запоминающие устройства (EEPROM, Flash-память, SRAM), часы реального времени (RTC), АЦП/ЦАП, цифровые потенциометры, специализированные контроллеры и др. Устройства SPI взаимодействуют в полнодуплексном режиме, используя архитектуру master-slave с одним ведущим устройством. Главное устройство инициирует кадр для чтения и записи. Иногда SPI называют четырехпроводной последовательной шиной, контрастирующей с трех-, двух-и однопроводными последовательными шинами. SPI может рассматриваться, как синхронный последовательный интерфейс, но он отличается от протокола синхронного последовательного интерфейса (SSI), который также является четырехпроводным синхронным последовательным протоколом связи. Протокол SSI использует дифференциальную сигнализацию и предоставляет только один симплексный канал связи. [Источник 1] .
Видео:Передача данных - шина SPIСкачать
Интерфейс
В SPI используются четыре цифровых сигнала:
- MOSI или SI – выход ведущего, вход ведомого (англ. Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому;
- MISO или SO – вход ведущего, выход ведомого (англ. Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.
- SCK или SCLK – последовательный тактовый сигнал (англ. Serial CLocK). Служит для передачи тактового сигнала для ведомых устройств.
- CS или SS – выбор микросхемы, выбор ведомого (англ. Chip Select, Slave Select).Как правило, выбор микросхемы производится низким логическим уровнем.
Читайте также: Какие шины можно ставить шевроле ланос
В зависимости от комбинаций полярности и фазы синхроимпульсов возможны четыре режима работы SPI. [Источник 2] . Хотя приведенные выше имена контактов являются наиболее популярными, в прошлом иногда использовались альтернативные соглашения об именовании контактов, поэтому имена контактов портов SPI для более старых продуктов IC могут отличаться от тех, которые представлены ниже:
Режим SPI | Временная диаграмма |
Режим SPI0 |
Активные уровень импульсов — высокий. Сначала защёлкивание, затем сдвиг.
Активные уровень импульсов — высокий. Сначала сдвиг, затем защёлкивание.
Активные уровень импульсов — низкий. Сначала защёлкивание, затем сдвиг.
Активные уровень импульсов — низкий. Сначала сдвиг, затем защёлкивание.
- MSB — старший бит;
- LSB — младший бит.
Мастеру приходится настраиваться на тот режим, который используется ведомым. При обмене данными по интерфейсу SPI микроконтроллер может работать как ведущий (режим Master) либо как ведомый (режим Slave). При этом пользователь может задавать следующие параметры:
- режим работы в соответствии с таблицей;
- скорость передачи;
- формат передачи (от младшего бита к старшему или наоборот).
Видео:Программирование МК AVR. УРОК 24. Знакомство с шиной SPIСкачать
Операции
Шина SPI может работать с одним ведущим устройством и с одним или несколькими ведомыми устройствами.
Если одно ведомое устройство используется, то SS может быть зафиксирован на низком логическом уровне, если позволяет ведомое устройство. Некоторые ведомые устройства требуют понижение сигнала чипа для начала действий. Примером может служить Maxim MAX1242 ADC, который запускает преобразование при переходе high→low. С множественными ведомыми устройствами, независимый сигнал SS необходим от ведущего для каждого ведомого устройства.
Большинство ведомых устройств имеют три состояния выходов, поэтому их сигнал MISO будет высокоимпедансным, когда устройство не выбрано.
Передача данных
Рисунок 1 — Типичная конфигурация системы с использованием двух сдвиговых регистров для формирования интер-чипа кольцевого буфера
Протокол передачи по интерфейсу SPI предельно прост и, по сути, идентичен логике работы сдвигового регистра, которая заключается в выполнении операции сдвига и, соответственно, побитного ввода и вывода данных по определенным фронтам сигнала синхронизации. Установка данных при передаче и выборка при приеме всегда выполняются по противоположным фронтам синхронизации. Это необходимо для гарантирования выборки данных после надежного их установления. Если к этому учесть, что в качестве первого фронта в цикле передачи может выступать нарастающий или падающий фронт, то всего возможно четыре варианта логики работы интерфейса SPI. Эти варианты получили название режимов SPI и описываются двумя параметрами:\
- CPOL — исходный уровень сигнала синхронизации (если CPOL=0, то линия синхронизации до начала цикла передачи и после его окончания имеет низкий уровень (т.е. первый фронт нарастающий, а последний — падающий), иначе, если CPOL=1, — высокий (т.е. первый фронт падающий, а последний — нарастающий));
- CPHA — фаза синхронизации; от этого параметра зависит, в какой последовательности выполняется установка и выборка данных (если CPHA=0, то по переднему фронту в цикле синхронизации будет выполняться выборка данных, а затем, по заднему фронту, — установка данных; если же CPHA=1, то установка данных будет выполняться по переднему фронту в цикле синхронизации, а выборка — по заднему).
Ведущая и подчиненная микросхемы, работающие в различных режимах SPI, являются несовместимыми, поэтому, перед выбором подчиненных микросхем важно уточнить, какие режимы поддерживаются ведущим шины. Аппаратные модули SPI, интегрированные в микроконтроллеры, в большинстве случаев поддерживают возможность выбора любого режима SPI и, поэтому, к ним возможно подключение любых подчиненных SPI-микросхем (относится только к независимому варианту подключения). Кроме того, протокол SPI в любом из режимов легко реализуется программно.
Часы полярности и фазы
Как показано на рисунке 2, в дополнение к установке тактовой частоты, ведущий должен также установить полярность и временной участок по отношению к данным. Временная диаграмма на рисунке, показывает полярность и фазу часов — красные линии обозначают начальные края часов,а синие-конечные.
Рисунок 2 — Временная диаграмма SPI
Возможны четыре комбинации фазы (CPHA) и полярности (CPOL) сигнала SCLK по отношению к сигналам данных. Режимы работы определяются комбинацией бит CPHA и CPOL:
- CPOL = 0 — сигнал синхронизации начинается с низкого уровня;
- CPOL = 1 — сигнал синхронизации начинается с высокого уровня;
- CPHA = 0 — выборка данных производится по переднему фронту сигнала синхронизации;
- CPHA = 1 — выборка данных производится по заднему фронту сигнала синхронизации.
Для обозначения режимов работы интерфейса SPI принято следующее соглашение:
- режим 0 (CPOL = 0, CPHA = 0);
- режим 1 (CPOL = 0, CPHA = 1);
- режим 2 (CPOL = 1, CPHA = 0);
- режим 3 (CPOL = 1, CPHA = 1).
Топология систем связи на базе SPI
В простейшем случае к ведущему устройству подключено единственное ведомое устройство и необходим двусторонний обмен данными. В таком случае используется трехпроводная схема подключения. Интерфейс SPI позволяет подключать к одному ведущему устройству несколько ведомых устройств, причем подключение может быть осуществлено несколькими способами, как показано на рисунках 3 и 4 [Источник 3] .
Первый способ позволяет реализовать радиальную структуру связи (топология типа «звезда»), его принято считать основным способом подключения нескольких ведомых устройств. В данном случае для обмена более чем с одним ведомым устройством ведущее устройство должно формировать соответствующее количество сигналов выбора ведомого устройства (SS). При обмене данными с ведомым устройством, соответствующий ему сигнал SS переводится в активное (низкое) состояние, при этом все остальные сигналы SS находятся в неактивном (высоком) состоянии. Выводы данных MISO ведомых устройств соединены параллельно, при этом они находятся в неактивном состоянии, а перед началом обмена один из выходов (выбранного ведомого устройства) переходит в активный режим.
Второй способ позволяет реализовать структуру связи типа «кольцо». В данном случае для активации одновременно нескольких ведомых устройств используется один сигнал SS, а выводы данных всех устройств соединены последовательно и образуют замкнутую цепь. При передаче пакета от ведущего устройства этот пакет получает первое ведомое устройство, которое, в свою очередь, транслирует свой пакет следующему ведомому устройству и так далее. Для того, чтобы пакет от ведущего устройства достиг определенного ведомого устройства, ведущее устройство должно отправить еще несколько пакетов.
Видео:Лекция 308. Шина I2CСкачать
Синхронизация в SPI
Частота следования битовых интервалов в линиях передачи данных определяется синхросигналом SCK, который генерирует ведущее устройство, ведомые устройства используют синхросигнал для определения моментов изменения битов на линии данных, при этом ведомые устройства никак не могут влиять на частоту следования битовых интервалов. Как в ведущем устройстве, так и в ведомом устройстве имеется счетчик импульсов синхронизации (битов). Счетчик в ведомом устройстве позволяет последнему определить момент окончания передачи пакета. Счетчик сбрасывается при выключении подсистемы SPI, такая возможность всегда имеется в ведущем устройстве. В ведомом устройстве счетчик обычно сбрасывается деактивацией интерфейсного сигнала SS. [Источник 4] .
Так как действия ведущего и ведомого устройства тактируются одним и тем же сигналом, то к стабильности этого сигнала не предъявляется никаких требований, за исключением ограничения на длительность полупериодов, которая определяется максимальной рабочей частотой более медленного устройства. Это позволяет использовать SPI в системах с низкостабильной тактовой частотой, а также облегчает программную эмуляцию ведущего устройства.
Видео:AVR 38# Последовательный интерфейс SPIСкачать
Приложения
SPI используется с различными периферийными устройствами, такими как:
- Датчики: температуры, давления, АЦП, сенсорные экраны, видео игровые контроллеры
- Устройства контроля: аудио кодеки, цифровые потенциометры, ЦАП
- Камера: объектив Canon EF
- Коммуникации: сеть Интернет, интерфейс USB, USB, USART, CAN, IEEE 802.15.4, IEEE 802.11
- Память: Флэш и EEPROM
- Часы реального времени
- ЖК, иногда даже для управления изображения данных
- Любые ММС или CD карты (в том числе поддержка SDIO)
Для высокопроизводительных систем, FPGAs иногда использует SPI интерфейс как ведомый к ведущему, а ведущий к датчикам, или для флэш-памяти, используемой для загрузки, если они основаны на SRAM. [Источник 5] .
Видео:MCP2515, контроллер CAN шины с интерфейсом SPIСкачать
Преимущества и недостатки интерфейса SPI
Преимущества
- Полнодуплексная передача данных по умолчанию.
- Более высокая пропускная способность по сравнению с I²C или SMBus.
- Возможность произвольного выбора длины пакета, длина пакета не ограничена восемью битами.
- Простота аппаратной реализации:
- более низкие требования к энергопотреблению по сравнению с I²C и SMBus;
- возможно использование в системах с низкостабильной тактовой частотой;
- ведомым устройствам не нужен уникальный адрес, в отличие от таких интерфейсов, как I²C, GPIB или SCSI.
Недостатки
- Необходимо больше выводов, чем для интерфейса I²C.
- Ведомое устройство не может управлять потоком данных.
- Нет подтверждения приема данных со стороны ведомого устройства (ведущее устройство может передавать данные «в никуда»).
- Нет определенного стандартом протокола обнаружения ошибок.
- Отсутствие официального стандарта, что делает невозможным сертификацию устройств.
- По дальности передачи данных интерфейс SPI уступает таким стандартам, как UART и CAN.
- Наличие множества вариантов реализации интерфейса.
- Отсутствие поддержки горячего подключения устройств.
Видео:О шине SPI и библитоеке SPI. Arduino.Скачать
Стандарты
Шина SPI- стандарт это де-факто. Однако отсутствие официального стандарта находит свое отражение в самых различных вариантах протокола. Различные размеры слова являются общими. Каждое устройство определяет свой собственный протокол, в том числе, если оно поддерживает команды. Некоторые устройства предназначены только для передачи, другие-только для приема. Некоторые протоколы сначала передают наименьший бит.
Некоторые устройства даже имеют незначительные отклонения от режимов CPOL/CPHA, описанных выше. Отправка данных от ведомого устройства к ведущему может использовать противоположный временной край в качестве ведущего устройства к ведомому. Устройства часто требуют дополнительного времени простоя времени перед первым, после последнего, или между командой и ее ответом. Некоторые устройства имеют два часа, один для чтения данных, а другой для передачи его в устройство.
Многие микросхемы SPI поддерживают только сообщения, кратные 8 битам. Такие чипы не могут взаимодействовать с JTAG или SGPIO протоколами, или с любым другим протоколом, в котором сообщения, не кратны которые 8 битам. [Источник 6] . Существуют также аппаратные различия. Некоторые микросхемы объединяют MOSI и MISO в единую линию передачи данных (SI/SO); это иногда называют «трехпроводной» сигнализацией (в отличие от обычного «четырехпроводного» SPI). SafeSPI- это отраслевой стандарт для SPI в автомобильной промышленности. Его основным фокусом является передача данных датчика между различными устройствами.Видео:Введение в шину I2CСкачать
Пример программной реализации
Ниже представлен пример программной реализации SPI мастера на языке Си. Линия CS (chip select, выбор микросхемы) должна быть активирована (в большинстве случаев — притянута к низкому уровню), перед тем, как начнётся обмен данными, и деактивирована после окончания обмена. Большинство устройств требуют несколько сеансов передачи с активной линией CS. Эта функция может быть вызвана несколько раз, пока линия активна.
- Свежие записи
- Нужно ли менять пружины при замене амортизаторов
- Скрипят амортизаторы на машине что делать
- Из чего состоит стойка амортизатора передняя
- Чем стянуть пружину амортизатора без стяжек
- Для чего нужны амортизаторы в автомобиле
📸 Видео
Лекция "Интерфейсы (часть I). RS-232/422/485. SPI"Скачать
arduino spiСкачать
SPI шина на осциллографеСкачать
Графический дисплей на контроллере ST7920. Подключаем к Stm32. Практикуемся с шиной SPI.Скачать
Цифровые интерфейсы и протоколыСкачать
Интерфейс SPI на примере STM32. Подключение периферии - экрана и памяти.Скачать
STM32. SPI. Create library. Пишем библиотеку для SPI. Тонкости работы с SPI. Тестируем на NRF24L01.Скачать
Подключить несколько устройств к Ардуино по шине SPIСкачать
Логический анализатор шины i2cСкачать
STM 32F0... Настройки шины SPI на 9 бит на примере работы с дисплеем, LCD1202Скачать
Микросхемы и программаторы, Шины I2C и SPIСкачать