Что такое spi интерфейс
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
SPI (Serial Peripheral Interface)
Разработчик | Motorola |
---|---|
Тип | Передача данных |
Дата выпуска | 1985 год |
ЦП | В зависимости от конкретной модели |
Memory | В зависимости от конкретной модели |
Содержание
Интерфейс
В SPI используются четыре цифровых сигнала:
Режим SPI | Временная диаграмма | ||||||||||||||
Режим SPI0 Активные уровень импульсов — высокий. Сначала защёлкивание, затем сдвиг. Активные уровень импульсов — высокий. Сначала сдвиг, затем защёлкивание. Активные уровень импульсов — низкий. Сначала защёлкивание, затем сдвиг. Активные уровень импульсов — низкий. Сначала сдвиг, затем защёлкивание. Мастеру приходится настраиваться на тот режим, который используется ведомым. При обмене данными по интерфейсу SPI микроконтроллер может работать как ведущий (режим Master) либо как ведомый (режим Slave). При этом пользователь может задавать следующие параметры: ОперацииШина SPI может работать с одним ведущим устройством и с одним или несколькими ведомыми устройствами. Передача данныхПротокол передачи по интерфейсу SPI предельно прост и, по сути, идентичен логике работы сдвигового регистра, которая заключается в выполнении операции сдвига и, соответственно, побитного ввода и вывода данных по определенным фронтам сигнала синхронизации. Установка данных при передаче и выборка при приеме всегда выполняются по противоположным фронтам синхронизации. Это необходимо для гарантирования выборки данных после надежного их установления. Если к этому учесть, что в качестве первого фронта в цикле передачи может выступать нарастающий или падающий фронт, то всего возможно четыре варианта логики работы интерфейса SPI. Эти варианты получили название режимов SPI и описываются двумя параметрами:\ Ведущая и подчиненная микросхемы, работающие в различных режимах SPI, являются несовместимыми, поэтому, перед выбором подчиненных микросхем важно уточнить, какие режимы поддерживаются ведущим шины. Аппаратные модули SPI, интегрированные в микроконтроллеры, в большинстве случаев поддерживают возможность выбора любого режима SPI и, поэтому, к ним возможно подключение любых подчиненных SPI-микросхем (относится только к независимому варианту подключения). Кроме того, протокол SPI в любом из режимов легко реализуется программно. Часы полярности и фазыВозможны четыре комбинации фазы (CPHA) и полярности (CPOL) сигнала SCLK по отношению к сигналам данных. Режимы работы определяются комбинацией бит CPHA и CPOL: Для обозначения режимов работы интерфейса SPI принято следующее соглашение: Топология систем связи на базе SPIПервый способ позволяет реализовать радиальную структуру связи (топология типа «звезда»), его принято считать основным способом подключения нескольких ведомых устройств. В данном случае для обмена более чем с одним ведомым устройством ведущее устройство должно формировать соответствующее количество сигналов выбора ведомого устройства (SS). При обмене данными с ведомым устройством, соответствующий ему сигнал SS переводится в активное (низкое) состояние, при этом все остальные сигналы SS находятся в неактивном (высоком) состоянии. Выводы данных MISO ведомых устройств соединены параллельно, при этом они находятся в неактивном состоянии, а перед началом обмена один из выходов (выбранного ведомого устройства) переходит в активный режим. Второй способ позволяет реализовать структуру связи типа «кольцо». В данном случае для активации одновременно нескольких ведомых устройств используется один сигнал SS, а выводы данных всех устройств соединены последовательно и образуют замкнутую цепь. При передаче пакета от ведущего устройства этот пакет получает первое ведомое устройство, которое, в свою очередь, транслирует свой пакет следующему ведомому устройству и так далее. Для того, чтобы пакет от ведущего устройства достиг определенного ведомого устройства, ведущее устройство должно отправить еще несколько пакетов. Синхронизация в SPIПриложенияSPI используется с различными периферийными устройствами, такими как: Преимущества и недостатки интерфейса SPIПреимуществаНедостаткиСтандартыПример программной реализацииНиже представлен пример программной реализации SPI мастера на языке Си. Линия CS (chip select, выбор микросхемы) должна быть активирована (в большинстве случаев — притянута к низкому уровню), перед тем, как начнётся обмен данными, и деактивирована после окончания обмена. Большинство устройств требуют несколько сеансов передачи с активной линией CS. Эта функция может быть вызвана несколько раз, пока линия активна. Описание интерфейса SPIИнтерфейс SPI — это один из самых популярных на сегодняшний день последовательных интерфейсов. Он был придуман фирмой Motorola и очень быстро завоевал популярность благодаря своей исключительной простоте и высокой скорости. При этом, SPI, наверное, нельзя назвать в полной мере интерфейсом, скорее это просто принцип связи, поскольку всё, что подразумевается под SPI, — это логика передачи данных между двумя устройствами («Ведущий»-«Ведомый»), физике же уделяется гораздо меньшее внимание, она реализуется, можно сказать, «по обстоятельствам», а никакого протокола нижнего уровня вообще нет, тут каждый производитель придумывает что-то своё. Ну что ж, — с главного и начнём. Итак, в чём же тут логика? Логика в том, что данные передаются последовательно, побитно, при этом считывание и установка данных разделены во времени с помощью специального синхросигнала на специальной шине. Эта шина называется шиной тактирования (или шиной синхронизации), а суть разделения заключается в том, что считывание и установка данных происходят по противоположным фронтам генерируемых на шине синхроимпульсов. Такое, чётко разделённое во времени, чередование установок и считываний даёт возможность использовать один и тот же регистр и для приёма, и для передачи данных. Ранее (когда память была маленькой и дорогой, операционки хранились на дискетах, а по полям бегали мамонты ) это было серьёзным преимуществом, более того, именно под это на самом деле изначально и затачивался SPI, однако сейчас никаких проблем с обьёмом памяти нет и большинство устройств спокойно могут позволить себе иметь отдельные входной и выходной регистры. Устройство, управляющее шиной тактирования (то есть генерирующее на ней синхроимпульсы), является «Ведущим» или «Мастером». Собственно, «Master» управляет всем обменом данными, — он решает: когда начинать обмен, когда заканчивать, сколько бит передать и т.д. Второе устройство, участвующее в обмене, является «Ведомым» или «Slave». В SPI, в отличии от, например, того же I2C, «Slave» совсем бесправен, он вообще никак не может влиять на шину тактирования и никак не может сообщить мастеру, что не успевает или, наоборот, что уже готов к обмену. То есть «Мастер» сам должен знать: когда, что и на какой скорости спросить у «Слэйва», чтобы тот смог ему ответить. Всего, для полнодуплексного обмена (в обе стороны одновременно), в интерфейсе SPI используются 4 линии (смотрим рисунок): SCLK, MOSI, MISO и SS. «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). Более того, линий не обязательно должно быть четыре, — иногда их может быть только три, например, если данные передаются только в одном направлении или вместо двух однонаправленных шин данных используется одна двунаправленная. Очевидно, что в последнем случае возможен только полудуплексный обмен, то есть в один момент времени можно только передавать или только принимать данные (а передавать и принимать одновременно — нельзя). Как я уже упоминал, — данные передаются побитно, а установка и чтение данных происходит по противоположным фронтам сигнала тактирования. Момент чтения данных в англоязычной литературе называется latch (фиксация, защёлкивание), а момент установки данных на шину — shift (сдвиг). Сдвигом момент установки называется в силу особенностей большинства последовательных интерфейсов. Обычно никто не передаёт данные по одному биту, как правило, их посылают пачками по 8 и более бит (размер пачки чаще всего всё же кратен восьми). В связи с этим, на выходе передатчика делают сдвиговый регистр, куда загружают сразу всю пачку передаваемых бит, при этом значение младшего или старшего бита этого сдвигового регистра устанавливается на шине данных (смотря как передаём — младшим или старшим битом вперёд), а для установки на шине следующего передаваемого бита — достаточно «сдвинуть» этот регистр. Так устроены передатчики и в SPI, и в I2C, и в привычном RS232, и много где ещё (так просто аппаратно удобнее). Ну, ладно, — вернёмся к нашему SPI. Логический уровень сигнала на шине тактирования в неактивном состоянии (когда нет передачи данных) называют полярностью и обозначают 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» Национальная библиотека им. Н. Э. Баумана |
Разработчик | Motorola |
---|---|
Тип | Передача данных |
Дата выпуска | 1985 год |
ЦП | В зависимости от конкретной модели |
Memory | В зависимости от конкретной модели |
Содержание
Интерфейс
В SPI используются четыре цифровых сигнала:
Режим SPI | Временная диаграмма |
Режим SPI0 Активные уровень импульсов — высокий. Сначала защёлкивание, затем сдвиг. Активные уровень импульсов — высокий. Сначала сдвиг, затем защёлкивание. Активные уровень импульсов — низкий. Сначала защёлкивание, затем сдвиг. Активные уровень импульсов — низкий. Сначала сдвиг, затем защёлкивание. Мастеру приходится настраиваться на тот режим, который используется ведомым. При обмене данными по интерфейсу SPI микроконтроллер может работать как ведущий (режим Master) либо как ведомый (режим Slave). При этом пользователь может задавать следующие параметры: ОперацииШина SPI может работать с одним ведущим устройством и с одним или несколькими ведомыми устройствами. Передача данныхПротокол передачи по интерфейсу SPI предельно прост и, по сути, идентичен логике работы сдвигового регистра, которая заключается в выполнении операции сдвига и, соответственно, побитного ввода и вывода данных по определенным фронтам сигнала синхронизации. Установка данных при передаче и выборка при приеме всегда выполняются по противоположным фронтам синхронизации. Это необходимо для гарантирования выборки данных после надежного их установления. Если к этому учесть, что в качестве первого фронта в цикле передачи может выступать нарастающий или падающий фронт, то всего возможно четыре варианта логики работы интерфейса SPI. Эти варианты получили название режимов SPI и описываются двумя параметрами:\ Ведущая и подчиненная микросхемы, работающие в различных режимах SPI, являются несовместимыми, поэтому, перед выбором подчиненных микросхем важно уточнить, какие режимы поддерживаются ведущим шины. Аппаратные модули SPI, интегрированные в микроконтроллеры, в большинстве случаев поддерживают возможность выбора любого режима SPI и, поэтому, к ним возможно подключение любых подчиненных SPI-микросхем (относится только к независимому варианту подключения). Кроме того, протокол SPI в любом из режимов легко реализуется программно. Часы полярности и фазыВозможны четыре комбинации фазы (CPHA) и полярности (CPOL) сигнала SCLK по отношению к сигналам данных. Режимы работы определяются комбинацией бит CPHA и CPOL: Для обозначения режимов работы интерфейса SPI принято следующее соглашение: Топология систем связи на базе SPIПервый способ позволяет реализовать радиальную структуру связи (топология типа «звезда»), его принято считать основным способом подключения нескольких ведомых устройств. В данном случае для обмена более чем с одним ведомым устройством ведущее устройство должно формировать соответствующее количество сигналов выбора ведомого устройства (SS). При обмене данными с ведомым устройством, соответствующий ему сигнал SS переводится в активное (низкое) состояние, при этом все остальные сигналы SS находятся в неактивном (высоком) состоянии. Выводы данных MISO ведомых устройств соединены параллельно, при этом они находятся в неактивном состоянии, а перед началом обмена один из выходов (выбранного ведомого устройства) переходит в активный режим. Второй способ позволяет реализовать структуру связи типа «кольцо». В данном случае для активации одновременно нескольких ведомых устройств используется один сигнал SS, а выводы данных всех устройств соединены последовательно и образуют замкнутую цепь. При передаче пакета от ведущего устройства этот пакет получает первое ведомое устройство, которое, в свою очередь, транслирует свой пакет следующему ведомому устройству и так далее. Для того, чтобы пакет от ведущего устройства достиг определенного ведомого устройства, ведущее устройство должно отправить еще несколько пакетов. Синхронизация в SPIПриложенияSPI используется с различными периферийными устройствами, такими как: Преимущества и недостатки интерфейса SPIПреимуществаНедостаткиСтандартыПример программной реализацииНиже представлен пример программной реализации SPI мастера на языке Си. Линия CS (chip select, выбор микросхемы) должна быть активирована (в большинстве случаев — притянута к низкому уровню), перед тем, как начнётся обмен данными, и деактивирована после окончания обмена. Большинство устройств требуют несколько сеансов передачи с активной линией CS. Эта функция может быть вызвана несколько раз, пока линия активна. Назад к основам: SPI (последовательный периферийный интерфейс)Последовательный периферийный интерфейс SPI используется для передачи данных между интегральными микросхемами с использованием уменьшенного количества линий передачи данных. Данная статья содержит справочную информацию, необходимую новичкам для понимания этого интерфейса. Три наиболее распространенных многопроводных форматов последовательной передачи данных, которые использовались в течение десятилетий, это I2C, UART и SPI. В данной статье рассматривается шина SPI (Serial Peripheral Interface, последовательный периферийный интерфейс), которая избегает явной стандартизации, поэтому всегда проверяйте спецификацию интегральной микросхемы, с которой работаете, прежде чем реализовывать протокол. Возможности и характеристикиШина SPI (последовательного периферийного интерфейса) обеспечивает полнодуплексную синхронную связь между ведущим и ведомым устройствами, используя четыре линии данных. Базовая конфигурация ведущий-ведомыйSPI (последовательный периферийный интерфейс) позволяет битам данных перемещаться из ведущего устройства в ведомое, и в это же время биты могут перемещаться из ведомого устройства в ведущее.
Так как SPI не стандартизирован, можно столкнуться с ситуациями, когда сначала передается старший значащий бит (MSB, Most Significant Bit) или младший значащий бит (LSB, Least Significant Bit). Проверьте техническое описание вашего устройства и настройте соответствующим образом ваши функции обработки данных. Если вы используете Arduino, то можете обраться к описанию библиотеки SPI о настройке SPI порта. Полярность и фаза тактового сигналаПереходы тактового сигнала регулируют сдвиг и выборку данных. SPI имеет четыре режима (0, 1, 2, 3), которые соответствуют четырем возможным конфигурациям синхронизации.
Каждая передача начинается, когда линия выбора ведомого приводится уровню логического нуля (выбор ведомого обычно является сигналом с активным низким уровнем). Точная взаимосвязь между линиями выбора ведомого, данных и тактового сигнала зависит от конфигурации полярности тактового сигнала (CPOL) и фазы тактового сигнала (CPHA). При неинвертированной полярности тактового сигнала (то есть, тактовый сигнал находится в состоянии низкого логического уровня, когда выбор ведомого переходит на низкий логический уровень): При инвертированной полярности тактового сигнала (то есть, тактовый сигнал находится в состояние высокого логического уровня, когда выбор ведомого переходит в низкий логический уровень): Ключевые терминыВыбор ведомого и последовательная схемаСхема с несколькими линиями выбора ведомых устройствВ стандартной структуре SPI ведущее устройство может записывать или запрашивать данные от отдельных устройств, которые используют общие линии данных путем включения устройства, то есть путем установки линии выбора ведомого соответствующего устройства в низкий логический уровень. Следует проявлять осторожность, чтобы не включить несколько ведомых устройств одновременно, так как данные, возвращаемые на ведущее устройство, будут искажены конфликтом между линиями MISO. Некоторые приложения не требуют данных, возвращаемых на ведущее устройство; в таких случаях можно обращаться к нескольким ведомым устройствам одновременно, если ведущее устройство хочет отправить одинаковые данные на несколько ведомых устройств.
В схеме с несколькими ведомыми устройствами каждое ведомое устройство требует отдельной линии выбора ведомого, идущей от ведущего устройства. Если у ведущего устройства недостаточно выводов ввода/вывода для требуемого количества ведомых устройств, расширение ввода/вывода может быть реализовано путем включения декодера/демультиплексора, например, 74HC(T)238 (PDF) (декодер/демультиплексор линий 3→8). Последовательная схемаВ данной схеме данные двигаются от одного устройства к следующему. Последнее ведомое устройство может возвращать данные в ведущее устройство.
В последовательной схеме все ведомые устройства используют одну общую линию выбора ведомого. Данные сдвигаются от ведущего устройства в первое ведомое устройство, а затем выходят из первого ведомого во второе ведомое устройство, и так далее. Данные каскадно спускаются по линии до последнего ведомого устройства в цепи, которое затем может использовать свою линию MISO для отправки данных в ведущее устройство. Эта схема хорошо подходит для индивидуально адресуемых светодиодных лент, которые популярны во время праздников. ЗаключениеSPI (последовательный периферийный интерфейс) существует уже десятки лет, и нет основания ожидать, что он уйдет в ближайшее время. Хотя I 2 C и UART могут пользоваться большей популярностью, SPI – это универсальный и простой интерфейс последовательной связи, который отлично подходит для определенных приложений.
|