Последовательный периферийный интерфейс spi реферат

Обновлено: 05.07.2024

SPI (3-wire) - популярный интерфейс для последовательного обмена данными между микросхемами. Интерфейс SPI, наряду с I 2 C, относится к самым широко-используемым интерфейсам для соединения микросхем. Изначально он был придуман компанией Motorola, а в настоящее время используется в продукции многих производителей. Его наименование является аббревиатурой от 'Serial Peripheral Bus', что отражает его предназначение - шина для подключения внешних устройств. Шина SPI организована по принципу 'ведущий-подчиненный'. В качестве ведущего шины обычно выступает микроконтроллер, но им также может быть программируемая логика, DSP-контроллер или специализированная ИС. Подключенные к ведущему шины внешние устройства образуют подчиненных шины. В их роли выступают различного рода микросхемы, в т.ч. запоминающие устройства (EEPROM, Flash-память, SRAM), часы реального времени (RTC), АЦП/ЦАП, цифровые потенциометры, специализированные контроллеры и др.

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

Существует три типа подключения к шине SPI, в каждом из которых участвуют четыре сигнала (их основное и альтернативные обозначения см. в табл. 1). Самое простое подключение, в котором участвуют только две микросхемы, показано на рисунке 1. Здесь, ведущий шины передает данные по линии MOSI синхронно со сгенерированным им же сигналом SCLK, а подчиненный захватывает переданные биты данных по определенным фронтам принятого сигнала синхронизации. Одновременно с этим подчиненный отправляет свою посылку данных. Представленную схему можно упростить исключением линии MISO, если используемая подчиненная ИС не предусматривает ответную передачу данных или в ней нет потребности. Одностороннюю передачу данных можно встретить у таких микросхем как ЦАП, цифровые потенциометры, программируемые усилители и драйверы. Таким образом, рассматриваемый вариант подключения подчиненной ИС требует 3 или 4 линии связи. Чтобы подчиненная ИС принимала и передавала данные, помимо наличия сигнала синхронизации, необходимо также, чтобы линия SS была переведена в низкое состояние. В противном случае, подчиненная ИС будет неактивна. Когда используется только одна внешняя ИС, может возникнуть соблазн исключения и линии SS за счет жесткой установки низкого уровня на входе выбора подчиненной микросхемы. Такое решение крайне нежелательно и может привести к сбоям или вообще невозможности передачи данных, т.к. вход выбора микросхемы служит для перевода ИС в её исходное состояние и иногда инициирует вывод первого бита данных.

Рис. 1. Простейшее подключение к шине SPI

Рис. 2. Независимое подключение к шине SPI

Рис. 3. Каскадное подключение к шине SPI

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

  • CPOL - исходный уровень сигнала синхронизации (если CPOL=0, то линия синхронизации до начала цикла передачи и после его окончания имеет низкий уровень (т.е. первый фронт нарастающий, а последний - падающий), иначе, если CPOL=1, - высокий (т.е. первый фронт падающий, а последний - нарастающий));
  • CPHA - фаза синхронизации; от этого параметра зависит, в какой последовательности выполняется установка и выборка данных (если CPHA=0, то по переднему фронту в цикле синхронизации будет выполняться выборка данных, а затем, по заднему фронту, - установка данных; если же CPHA=1, то установка данных будет выполняться по переднему фронту в цикле синхронизации, а выборка - по заднему). Информация по режимам SPI обобщена в таблице 2.

Ведущая и подчиненная микросхемы, работающие в различных режимах SPI, являются несовместимыми, поэтому, перед выбором подчиненных микросхем важно уточнить, какие режимы поддерживаются ведущим шины. Аппаратные модули SPI, интегрированные в микроконтроллеры, в большинстве случаев поддерживают возможность выбора любого режима SPI и, поэтому, к ним возможно подключение любых подчиненных SPI-микросхем (относится только к независимому варианту подключения). Кроме того, протокол SPI в любом из режимов легко реализуется программно.

Cравнение с шиной I 2 C

Как уже упоминалось, для стыковки микросхем не меньшей популярностью пользуется 2-проводная последовательная шина I 2 C. Ниже можно ознакомиться с преимуществами, которая дает та или иная последовательная шина.

Преимущества шины SPI Преимущества шины I2C
Предельная простота протокола передачи на физическом уровне обуславливает высокую надежность и быстродействие передачи. Предельное быстродействие шины SPI измеряется десятками мегагерц и, поэтому, она идеальна для потоковой передачи больших объемов данных и широко используется в высокоскоростных ЦАП/АЦП, драйверах светодиодных дисплеев и микросхемах памяти Шина I 2 C остается двухпроводной, независимо от количества подключенной к ней микросхем.
Все линии шины SPI являются однонаправленными, что существенно упрощает решение задачи преобразования уровней и гальванической изоляции микросхем Возможность мультимастерной работы, когда к шине подключено несколько ведущих микросхем.
Простота программной реализации протокола SPI. Протокол I2C является более стандартизованным, поэтому, пользователь I2C-микросхем более защищен от проблем несовместимости выбранных компонентов.

Производные и совместимые протоколы

Протокол MICROWIRE компании National Semiconductor полностью идентичен протоколу SPI в режиме 0 (CPOL = 0, CPHA = 0).

Отличие этого интерфейса состоит в том, что вместо полнодуплексной передачи по двум однонаправленным линиям здесь выполняется полудуплексная передача по одной двунаправленной линии DQ.

Более высокоуровневый протокол, чем SPI, позволяющий автоматизировать передачу данных без участия ЦПУ.

Кроме того, интерфейс SPI является основой для построения ряда специализированных интерфейсов, в т.ч. отладочный интерфейс JTAG и интерфейсы карт Flash-памяти, в т.ч. SD и MMC.

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

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 18.07.2015
Размер файла 15,1 K

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Введение

SPI - последовательный синхронный стандарт передачи данных в режиме полного дуплекса, разработанный компанией Motorola для обеспечения простого и недорогого сопряжения микроконтроллеров и периферии. К одному последовательному периферийному интерфейсу ведущего устройства-микросхемы может присоединяться несколько микросхем. Периферия, не выбранная процессором, не принимает участия в передаче по SPI.

Шина SPI организована по принципу 'ведущий-подчиненный'. В качестве ведущего шины обычно выступает микроконтроллер, но им также может быть программируемая логика, DSP-контроллер. В роли подчиненных устройств шины выступают различного рода микросхемы, в т. ч. запоминающие устройства (EEPROM, Flash-память, SRAM), часы реального времени (RTC), АЦП/ЦАП, цифровые потенциометры, специализированные контроллеры и др.

В SPI используются четыре цифровых сигнала:

MOSI или SI - выход ведущего, вход ведомого (англ. Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому.

MISO или SO - вход ведущего, выход ведомого (англ. Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.

SCLK или SCK - последовательный тактовый сигнал (англ. Serial Clock). Служит для передачи тактового сигнала для ведомых устройств.

CS или SS - выбор микросхемы, выбор ведомого (англ. Chip Select, Slave Select).

Характеристики spi-интерфейса

Режим работы ведущий или ведомый.

Обмен данными с передаваемыми первыми старшим или младшим битами.

Четыре программируемые скорости обмена данными.

Флаг прерывания по окончании передачи.

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

SPI предполагает передачу данных бит за битом: от ведущего по линии MOSI и от ведомого (в обратную сторону) по линии MISO. Таким образом, возможен полнодуплексный режим, когда данные передаются в обоих направлениях одновременно и синхронно. Порядок следования битов в исходной версии SPI фирмы Motorola можно определить как, начиная со старшего, однако в дальнейшем некоторые производители микроконтроллеров позволяли задавать его программно. Возможны реализации, в которых для передачи данных используется единственная двунаправленная линия.

Если соединить два микроконтроллера по шине SPI, то они могут по очереди становится ведущим или ведомым. Главное, чтобы в конкретный момент времени на шине SPI только одно устройство являлось ведущим.

При сдвиге данных из ведущего микроконтроллера в ведомый одновременно происходит сдвиг данных из ведомого микроконтроллера в ведущий, т.е. в течение одного цикла сдвига происходит обмен данными между ведущим и ведомым микроконтроллерами.

интерфейс шина передача дуплекс

Преимущества и недостатки

Гибкость протокола для передачи битов.

Чрезвычайно простой аппаратный интерфейс.

Используется намного меньше выводов микросхем, контактов в разъёмах и кабелей, чем параллельные интерфейсы, где необходим минимум 1 провод на бит.

Нет аппаратного управления потоком.

Меньшее потребление энергии.

Большое число подключений к линиям шины.

Отсутствует подтверждение приема данных.

Последние тенденции в области разработки промышленных систем позволяют располагать микроконтроллер и соответствующие АЦП и ЦАП на расстоянии до 100 м и более в системе. Влияние добавочной задержки распространения сигнала на синхронность данных и тактового сигнала часто игнорируется, в результате чего интерфейс, прекрасно работающий в лабораторных условиях, оказывается неработоспособным при использовании на производстве. Существует множество причин, при которых интерфейс не может функционировать должным образом. Например:

потеря синхронизации из-за больших задержек распространения сигнала

ошибки передачи данных из-за несогласованности линий передачи.

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

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

Пример реализации в МК

Интерфейс SPI позволяет организовать последовательную синхронную высокоскоростную передачу данных между ATmega128 и другим периферийным устройством или между несколькими AVR-микроконтроллерами.

Отличительные особенности интерфейса SPI в ATmega128:

Полнодуплексная, трехпроводная синхронная передача данных.

Ведущая или подчиненная работа.

Передача первым младшего или старшего бита.

Семь программируемых скоростей связи.

Флаг прерывания для индикации окончания передачи данных.

Защитный флаг при повторной записи.

Примеры применения в промышленности

Многочисленные фирмы производят огромное количество различных периферийных узлов подключения к МК через SPI:

Датчики физических величин (температуры, давления, ускорения и др.).

Устройства аналого-цифрового и цифро-аналогового преобразования (АЦП, ЦАП).

Устройства преобразования интерфейса (CAN-контроллеры, Ethernet - контроллеры).

Модули энергонезависимой памяти (Flash - карты MMC и CD, микросхемы EEPROM).

Подобные документы

Последовательный интерфейс для передачи данных. Синхронный и асинхронный режимы передачи данных. Формат асинхронной посылки. Постоянная активность канала связи при синхронном режиме передачи. Реализация последовательного интерфейса на физическом уровне.

реферат [106,9 K], добавлен 28.04.2010

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

курсовая работа [878,3 K], добавлен 01.02.2013

Особенности процесса взаимодействия пользователя с компьютером. Графический интерфейс ОС Windows, его преимущества и недостатки. Основы простейшего SILK-интерфейса. Основные черты и специфика структуры WIMP-интерфейса. Общепринятые соглашения для меню.

реферат [26,8 K], добавлен 02.10.2012

Стандартный интерфейс IEC 625-1 для программируемых приборов. Логическая организация интерфейса. Протокол сигналов для установления связи по магистрали IEC. Условия функционирования приборов в системе. Коды и форматы, физическая реализация интерфейса.

контрольная работа [102,4 K], добавлен 23.01.2014

Сущность и предназначение последовательных интерфейсов. Формат асинхронной и синхронной посылки. Функциональные возможности и схема соединения по интерфейсу RS-232C. Назначение сигналов интерфейса. Понятие, конфигурирование и использование СОМ-портов.

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

Вложенные файлы: 1 файл

Описание интерфейса SPI.docx

Описание интерфейса SPI

Интерфейс 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.

Логический уровень сигнала на шине тактирования в неактивном состоянии (когда нет передачи данных) называют полярностью и обозначают 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 не стоит недооценивать.

Хотелось бы подчеркнуть, что SS - это именно линия управления сеансом обмена, а не просто линия выбора слэйва. Разница тут в том, что если считать SS просто линией выбора слэйва, то при подключении мастера к одному единственному слэйву возникает соблазн этой линией не управлять, а жёстко закоротить её на общий провод (типа чтоб слэйв всегда был выбран). Однако, логика слэйва обычно такова, что начало сеанса сопровождается различными подготовительными процедурами, такими как загрузка данных в выходной сдвиговый регистр и сброс счётчика импульсов, а выполнять какие-то действия (в соответствии с принятыми по SPI командами от мастера) слэйв начинает только после завершения сеанса обмена. Кроме того, вам ведь вполне может понадобиться несколько сеансов общения (например, если в первом сеансе вы посылаете команды, а в следующем хотите получить отчёт о результате их выполнения). Думаю понятно, что если жёстко притянуть линию SS к общему проводу, то ни о каком распознавании начала и конца сеанса обмена (начало распознаётся по спаду на линии SS, а конец - по подъёму) не может быть и речи, соответственно весь обмен данными будет нарушен. Так что важность сигнала SS не стоит недооценивать.

Ну и напоследок скажу, что наиболее популярными являются режимы Mode0 и Mode3.

Более подробно о том, как происходит обмен, что должен уметь SPI-мастер и как это программно реализовать на микроконтроллере (на примере контроллеров PIC и AVR) можно почитать в статье"Программная реализация ведущего шины SPI"

I²C (рус. ай-ту-си/и-два-цэ/и- два-си) — последовательная шина данных для связи интегральных схем, использующая две двунаправленные линии связи (SDA и SCL). Используется для соединения низкоскоростных периферийных компонентов с материнской платой, встраиваемыми системами и мобильными телефонами. Название представляет собой аббревиатуру словInter-Integrated Circuit.

Разработана фирмой Philips в начале 1980-х как простая шина внутренней связи для создания управляющей электроники

После пересмотра стандарта в 1992 году становится возможным подключение ещё большего количества устройств на одну шину (за счёт возможности 10-битной адресации), а также увеличивается скорость до 400 кбит/с в скоростном режиме. Соответственно, доступное количество свободных узлов выросло до 1008. Максимальное допустимое количество микросхем, подсоединенных к одной шине, ограничивается максимальной емкостью шины в 400 пФ.

Версия стандарта 2.0, выпущенная в 1998 году представила высокоскоростной режим работы со скоростью до 3,4 Мбит/с с пониженным энергопотреблением.

Версия 2.1 2001 года включила лишь незначительные доработки.

I²C использует две двунаправленные линии, подтянутые к напряжению питания и управляемые через открытый коллектор или открытый сток — последовательная линия данных (SDA,англ. Serial DAta) и последовательная линия тактирования (SCL, англ. Serial CLock). Стандартные напряжения +5 В или +3,3 В, однако допускаются и другие.

Классическая адресация включае т 7-битное адресное пространство с 16 зарезервированными адресами. Это означает до 112 свободных адресов для подключения периферии на одну шину.

Основной режим работы — 100 кбит/с; 10 кбит/с в режиме работы с пониженной скоростью. Заметим, что стандарт допускает приостановку тактирования для работы с медленными устройствами.

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

Три наиболее распространенных многопроводных форматов последовательной передачи данных, которые использовались в течение десятилетий, это I2C, UART и SPI. В данной статье рассматривается шина SPI (Serial Peripheral Interface, последовательный периферийный интерфейс), которая избегает явной стандартизации, поэтому всегда проверяйте спецификацию интегральной микросхемы, с которой работаете, прежде чем реализовывать протокол.

Возможности и характеристики

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

Базовая конфигурация ведущий-ведомый

SPI (последовательный периферийный интерфейс) позволяет битам данных перемещаться из ведущего устройства в ведомое, и в это же время биты могут перемещаться из ведомого устройства в ведущее.

Анимация 1 показывает данные, перемещаемые из микросхемы A в микросхему B, и из микросхемы B в микросхему A Анимация 2 показывает диаграмму виртуального 4-канального осциллографа, отображающую SPI передачу между двумя микросхемами

Так как SPI не стандартизирован, можно столкнуться с ситуациями, когда сначала передается старший значащий бит (MSB, Most Significant Bit) или младший значащий бит (LSB, Least Significant Bit). Проверьте техническое описание вашего устройства и настройте соответствующим образом ваши функции обработки данных. Если вы используете Arduino, то можете обраться к описанию библиотеки SPI о настройке SPI порта.

Полярность и фаза тактового сигнала

Переходы тактового сигнала регулируют сдвиг и выборку данных. SPI имеет четыре режима (0, 1, 2, 3), которые соответствуют четырем возможным конфигурациям синхронизации.

Биты, которые выбираются при нарастающем фронте тактового сигнала, сдвигаются при спадающем фронте тактового сигнала, и наоборот.

Биты, которые выбираются при нарастающем фронте тактового сигнала, сдвигаются при спадающем фронте тактового сигнала, и наоборот.

Каждая передача начинается, когда линия выбора ведомого приводится уровню логического нуля (выбор ведомого обычно является сигналом с активным низким уровнем). Точная взаимосвязь между линиями выбора ведомого, данных и тактового сигнала зависит от конфигурации полярности тактового сигнала (CPOL) и фазы тактового сигнала (CPHA).

При неинвертированной полярности тактового сигнала (то есть, тактовый сигнал находится в состоянии низкого логического уровня, когда выбор ведомого переходит на низкий логический уровень):

  • Режим 0: Фаза тактового сигнала сконфигурирована таким образом, что данные выбираются по нарастающему фронту тактового импульса и сдвигаются по спадающему фронту тактового импульса. Это соответствует первой синей диаграмме тактового сигнала на рисунке выше. Обратите внимание, что данные должны быть доступны до первого нарастающего фронта тактового сигнала.
  • Режим 1: Фаза тактового сигнала сконфигурирована таким образом, что данные выбираются по спадающему фронту тактового импульса и сдвигаются по нарастающему фронту тактового импульса. Это соответствует второй синей диаграмме тактового сигнала на рисунке выше.

При инвертированной полярности тактового сигнала (то есть, тактовый сигнал находится в состояние высокого логического уровня, когда выбор ведомого переходит в низкий логический уровень):

  • Режим 2: Фаза тактового сигнала сконфигурирована таким образом, что данные выбираются по спадающему фронту тактового импульса и сдвигаются по нарастающему фронту тактового импульса. Это соответствует первой оранжевой диаграмме тактового сигнала на рисунке выше. Обратите внимание, что данные должны быть доступны до первого спадающего фронта тактового сигнала.
  • Режим 3: Фаза тактового сигнала сконфигурирована таким образом, что данные выбираются по нарастающему фронту тактового импульса и сдвигаются по спадающему фронту тактового импульса. Это соответствует второй оранжевой диаграмме тактового сигнала на рисунке выше.

Ключевые термины

Выбор ведомого и последовательная схема

Схема с несколькими линиями выбора ведомых устройств

Выбор ведомого устройства из нескольких

Выбор ведомого устройства из нескольких имеющихся в схеме с несколькими линиями выбора ведомых устройств SPI

В схеме с несколькими ведомыми устройствами каждое ведомое устройство требует отдельной линии выбора ведомого, идущей от ведущего устройства. Если у ведущего устройства недостаточно выводов ввода/вывода для требуемого количества ведомых устройств, расширение ввода/вывода может быть реализовано путем включения декодера/демультиплексора, например, 74HC(T)238 (PDF) (декодер/демультиплексор линий 3→8).

Последовательная схема

В данной схеме данные двигаются от одного устройства к следующему. Последнее ведомое устройство может возвращать данные в ведущее устройство.

Кольцевая схема включения устройств SPI

Последовательная схема включения устройств SPI

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

Эта схема хорошо подходит для индивидуально адресуемых светодиодных лент, которые популярны во время праздников.

Заключение

SPI (последовательный периферийный интерфейс) существует уже десятки лет, и нет основания ожидать, что он уйдет в ближайшее время. Хотя I 2 C и UART могут пользоваться большей популярностью, SPI – это универсальный и простой интерфейс последовательной связи, который отлично подходит для определенных приложений.

  • MOSI или SI – выход ведущего, вход ведомого (англ. Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому;
  • MISO или SO – вход ведущего, выход ведомого (англ. Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.
  • SCK или SCLK – последовательный тактовый сигнал (англ. Serial CLocK). Служит для передачи тактового сигнала для ведомых устройств.
  • CS или SS – выбор микросхемы, выбор ведомого (англ. Chip Select, Slave Select).Как правило, выбор микросхемы производится низким логическим уровнем.

В зависимости от комбинаций полярности и фазы синхроимпульсов возможны четыре режима работы SPI.

Режим SPI Временная диаграмма
Режим SPI0
Активные уровень импульсов — высокий.
Сначала защёлкивание, затем сдвиг.
spi0
Режим SPI1
Активные уровень импульсов — высокий.
Сначала сдвиг, затем защёлкивание.
spi1
Режим SPI2
Активные уровень импульсов — низкий.
Сначала защёлкивание, затем сдвиг.
spi2
Режим SPI3
Активные уровень импульсов — низкий.
Сначала сдвиг, затем защёлкивание.
spi3

В таблице принято:

Мастеру приходится настраиваться на тот режим, который используется ведомым.
При обмене данными по интерфейсу SPI микроконтроллер может работать как ведущий (режим Master) либо как ведомый (режим Slave). При этом пользователь может задавать следующие параметры:

  • режим работы в соответствии с таблицей;
  • скорость передачи;
  • формат передачи (от младшего бита к старшему или наоборот).

Соединение двух микроконтроллеров по структуре ведущий – ведомый по интерфейсу SPI осуществляется по следующей схеме.

Master-Slave SPI

Выводы SCK, CS для ведущего микроконтроллера являются выходами, а ведомого микроконтроллера – входами.

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

Если микроконтроллер находится в режиме Master, направление передачи данных через вывод SS определяется пользователем. Если вывод сконфигурирован как выход, он работает как линия вывода общего назначения и не влияет на работу модуля SPI. Как правило, в этом случае он используется для управления выводом SS микроконтроллера, работающего в режиме Slave.

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

Добрый день. В различных интерфейсах STM32 (SPI, USART, CAN и т.д.) используются функции Callback. К примеру HAL_SPI_RxCpltCallback. Если можно, объясните пожалуйста их физический смысл (зачем они, ведь есть обработчики прерываний HAL), как и когда они применяются, а главное зачем. Понимаю, что это целая тема для большого урока, но если кратко, хотя бы в общих чертах. Заранее спасибо.

Читайте также: