Serial Peripheral Interface

Поделись знанием:
Перейти к: навигация, поиск

SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом.

В отличие от стандартного последовательного порта (англ. standard serial port), SPI является синхронным интерфейсом, в котором любая передача синхронизирована с общим тактовым сигналом, генерируемым ведущим устройством (процессором). Принимающая (ведомая) периферия синхронизирует получение битовой последовательности с тактовым сигналом. К одному последовательному периферийному интерфейсу ведущего устройства-микросхемы может присоединяться несколько микросхем. Ведущее устройство выбирает ведомое для передачи, активируя сигнал «выбор кристалла» (англ. chip select) на ведомой микросхеме. Периферия, не выбранная процессором, не принимает участия в передаче по SPI.





Интерфейс

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

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

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

  • MOSI: SIMO, SDI (на устройстве), DI, DIN, SI, MTST;
  • MISO: SOMI, SDO (на устройстве), DO, DOUT, SO, MRSR;
  • SCLK: SCK, CLK;
  • SS: nCS, CS, CSB, CSN, nSS, STE, SYNC.

Синхронизация в SPI

Частота следования битовых интервалов в линиях передачи данных определяется синхросигналом SCK, который генерирует ведущее устройство, ведомые устройства используют синхросигнал для определения моментов изменения битов на линии данных, при этом ведомые устройства никак не могут влиять на частоту следования битовых интервалов. Как в ведущем устройстве, так и в ведомом устройстве имеется счетчик импульсов синхронизации (битов). Счетчик в ведомом устройстве позволяет последнему определить момент окончания передачи пакета. Счетчик сбрасывается при выключении подсистемы SPI, такая возможность всегда имеется в ведущем устройстве. В ведомом устройстве счетчик обычно сбрасывается деактивацией интерфейсного сигнала SS.

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

Прием и передача данных в SPI

Передача осуществляется пакетами. Длина пакета, как правило, составляет 1 байт (8 бит), при этом известны реализации SPI с иной длиной пакета, например, 4 бита. Ведущее устройство инициирует цикл связи установкой низкого уровня на выводе выбора подчиненного устройства (SS) того устройства, с которым необходимо установить соединение. При низком уровне сигнала SS:

  • схемотехника ведомого устройства находится в активном состоянии;
  • вывод MISO переводится в режим «выход»;
  • тактовый сигнал SCLK от ведущего устройства воспринимается ведомым и вызывает считывание на входе MOSI значений передаваемых от ведущего битов и сдвиг регистра ведомого устройства.

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

Режимы работы интерфейса 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 позволяет подключать к одному ведущему устройству несколько ведомых устройств, причем подключение может быть осуществлено несколькими способами.

Первый способ позволяет реализовать радиальную структуру связи (топология типа «звезда»), его принято считать основным способом подключения нескольких ведомых устройств. В данном случае для обмена более чем с одним ведомым устройством ведущее устройство должно формировать соответствующее количество сигналов выбора ведомого устройства (SS). При обмене данными с ведомым устройством, соответствующий ему сигнал SS переводится в активное (низкое) состояние, при этом все остальные сигналы SS находятся в неактивном (высоком) состоянии. Выводы данных MISO ведомых устройств соединены параллельно, при этом они находятся в неактивном состоянии, а перед началом обмена один из выходов (выбранного ведомого устройства) переходит в активный режим.

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

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

Преимущества

  • Полнодуплексная передача данных по умолчанию.
  • Более высокая пропускная способность по сравнению с I²C или SMBus.
  • Возможность произвольного выбора длины пакета, длина пакета не ограничена восемью битами.
  • Простота аппаратной реализации:
    • более низкие требования к энергопотреблению по сравнению с I²C и SMBus;
    • возможно использование в системах с низкостабильной тактовой частотой;
    • ведомым устройствам не нужен уникальный адрес, в отличие от таких интерфейсов, как I²C, GPIB или SCSI.
  • Используется только четыре вывода, что гораздо меньше, чем для параллельных интерфейсов.
  • Однонаправленный характер сигналов позволяет при необходимости легко организовать гальваническую развязку между ведущим и ведомыми устройствами.
  • Максимальная тактовая частота ограничена только быстродействием устройств, участвующих в обмене данными.

Недостатки

  • Необходимо больше выводов, чем для интерфейса I²C.
  • Ведомое устройство не может управлять потоком данных.
  • Нет подтверждения приема данных со стороны ведомого устройства (ведущее устройство может передавать данные «в никуда»).
  • Нет определенного стандартом протокола обнаружения ошибок.
  • Отсутствие официального стандарта, что делает невозможным сертификацию устройств.
  • По дальности передачи данных интерфейс SPI уступает таким стандартам, как UART и CAN.
  • Наличие множества вариантов реализации интерфейса.
  • Отсутствие поддержки горячего подключения устройств.

Пример программной реализации

Ниже представлен пример программной реализации SPI мастера на языке Си. Линия CS (chip select, выбор микросхемы) должна быть активирована (в большинстве случаев — притянута к низкому уровню), перед тем, как начнётся обмен данными, и деактивирована после окончания обмена. Большинство устройств требуют несколько сеансов передачи с активной линией CS. Эта функция может быть вызвана несколько раз, пока линия активна.

unsigned char SPIBitBang8BitsMode0(unsigned char byte)
{       
    unsigned char bit;

    for (bit = 0; bit < 8; bit++) {
        /* записать MOSI по спаду предыдущего тактового импульса */
        if (byte & 0x80)
            SETMOSI();
        else
            CLRMOSI();
        byte <<= 1;

        /* ждём половину тактового периода, перед тем как сгенерировать фронт */
        SPIDELAY(SPISPEED/2);
        SETCLK();

        /* ждём половину тактового периода, перед тем как сгенерировать спад */
        SPIDELAY(SPISPEED/2);

        /* читаем MISO на спаде */
        byte |= READMISO();
        CLRCLK();
    }

    return byte;
}

См. также

Напишите отзыв о статье "Serial Peripheral Interface"

Литература

  • Болл Стюарт Р. Аналоговые интерфейсы микроконтроллеров. — М.: Додэка-XXI, 2007. — 360 с. — (Программируемые системы). — 2000 экз. — ISBN 978-5-94120-142-6.
  • Лапин А.А. Интерфейсы. Выбор и реализация. — М.: Техносфера, 2005. — 168 с. — (Мир электроники). — 5000 экз. — ISBN 5-94836-058-X.

Ссылки

  • [www.gaw.ru/html.cgi/txt/interface/spi/index.htm Последовательный интерфейс SPI]
  • [robocraft.ru/blog/arduino/518.html SPI и Arduino]
  • [chipenable.ru/index.php/programming-avr/item/137-avr-spi-module.html Описание SPI интерфейса]
  • [opencores.org/project,spi Реализация SPI на языке Verilog]
  • [eewiki.net/pages/viewpage.action?pageId=4096096 Реализация SPI на языке VHDL]

Отрывок, характеризующий Serial Peripheral Interface

И Анатоль засмеялся еще громче. Вдруг князь Николай Андреевич нахмурился.
– Ну, ступай, – сказал он Анатолю.
Анатоль с улыбкой подошел опять к дамам.
– Ведь ты их там за границей воспитывал, князь Василий? А? – обратился старый князь к князю Василью.
– Я делал, что мог; и я вам скажу, что тамошнее воспитание гораздо лучше нашего.
– Да, нынче всё другое, всё по новому. Молодец малый! молодец! Ну, пойдем ко мне.
Он взял князя Василья под руку и повел в кабинет.
Князь Василий, оставшись один на один с князем, тотчас же объявил ему о своем желании и надеждах.
– Что ж ты думаешь, – сердито сказал старый князь, – что я ее держу, не могу расстаться? Вообразят себе! – проговорил он сердито. – Мне хоть завтра! Только скажу тебе, что я своего зятя знать хочу лучше. Ты знаешь мои правила: всё открыто! Я завтра при тебе спрошу: хочет она, тогда пусть он поживет. Пускай поживет, я посмотрю. – Князь фыркнул.
– Пускай выходит, мне всё равно, – закричал он тем пронзительным голосом, которым он кричал при прощаньи с сыном.
– Я вам прямо скажу, – сказал князь Василий тоном хитрого человека, убедившегося в ненужности хитрить перед проницательностью собеседника. – Вы ведь насквозь людей видите. Анатоль не гений, но честный, добрый малый, прекрасный сын и родной.
– Ну, ну, хорошо, увидим.
Как оно всегда бывает для одиноких женщин, долго проживших без мужского общества, при появлении Анатоля все три женщины в доме князя Николая Андреевича одинаково почувствовали, что жизнь их была не жизнью до этого времени. Сила мыслить, чувствовать, наблюдать мгновенно удесятерилась во всех их, и как будто до сих пор происходившая во мраке, их жизнь вдруг осветилась новым, полным значения светом.
Княжна Марья вовсе не думала и не помнила о своем лице и прическе. Красивое, открытое лицо человека, который, может быть, будет ее мужем, поглощало всё ее внимание. Он ей казался добр, храбр, решителен, мужествен и великодушен. Она была убеждена в этом. Тысячи мечтаний о будущей семейной жизни беспрестанно возникали в ее воображении. Она отгоняла и старалась скрыть их.
«Но не слишком ли я холодна с ним? – думала княжна Марья. – Я стараюсь сдерживать себя, потому что в глубине души чувствую себя к нему уже слишком близкою; но ведь он не знает всего того, что я о нем думаю, и может вообразить себе, что он мне неприятен».
И княжна Марья старалась и не умела быть любезной с новым гостем. «La pauvre fille! Elle est diablement laide», [Бедная девушка, она дьявольски дурна собою,] думал про нее Анатоль.
M lle Bourienne, взведенная тоже приездом Анатоля на высокую степень возбуждения, думала в другом роде. Конечно, красивая молодая девушка без определенного положения в свете, без родных и друзей и даже родины не думала посвятить свою жизнь услугам князю Николаю Андреевичу, чтению ему книг и дружбе к княжне Марье. M lle Bourienne давно ждала того русского князя, который сразу сумеет оценить ее превосходство над русскими, дурными, дурно одетыми, неловкими княжнами, влюбится в нее и увезет ее; и вот этот русский князь, наконец, приехал. У m lle Bourienne была история, слышанная ею от тетки, доконченная ею самой, которую она любила повторять в своем воображении. Это была история о том, как соблазненной девушке представлялась ее бедная мать, sa pauvre mere, и упрекала ее за то, что она без брака отдалась мужчине. M lle Bourienne часто трогалась до слез, в воображении своем рассказывая ему , соблазнителю, эту историю. Теперь этот он , настоящий русский князь, явился. Он увезет ее, потом явится ma pauvre mere, и он женится на ней. Так складывалась в голове m lle Bourienne вся ее будущая история, в самое то время как она разговаривала с ним о Париже. Не расчеты руководили m lle Bourienne (она даже ни минуты не обдумывала того, что ей делать), но всё это уже давно было готово в ней и теперь только сгруппировалось около появившегося Анатоля, которому она желала и старалась, как можно больше, нравиться.
Маленькая княгиня, как старая полковая лошадь, услыхав звук трубы, бессознательно и забывая свое положение, готовилась к привычному галопу кокетства, без всякой задней мысли или борьбы, а с наивным, легкомысленным весельем.
Несмотря на то, что Анатоль в женском обществе ставил себя обыкновенно в положение человека, которому надоедала беготня за ним женщин, он чувствовал тщеславное удовольствие, видя свое влияние на этих трех женщин. Кроме того он начинал испытывать к хорошенькой и вызывающей Bourienne то страстное, зверское чувство, которое на него находило с чрезвычайной быстротой и побуждало его к самым грубым и смелым поступкам.
Общество после чаю перешло в диванную, и княжну попросили поиграть на клавикордах. Анатоль облокотился перед ней подле m lle Bourienne, и глаза его, смеясь и радуясь, смотрели на княжну Марью. Княжна Марья с мучительным и радостным волнением чувствовала на себе его взгляд. Любимая соната переносила ее в самый задушевно поэтический мир, а чувствуемый на себе взгляд придавал этому миру еще большую поэтичность. Взгляд же Анатоля, хотя и был устремлен на нее, относился не к ней, а к движениям ножки m lle Bourienne, которую он в это время трогал своею ногою под фортепиано. M lle Bourienne смотрела тоже на княжну, и в ее прекрасных глазах было тоже новое для княжны Марьи выражение испуганной радости и надежды.
«Как она меня любит! – думала княжна Марья. – Как я счастлива теперь и как могу быть счастлива с таким другом и таким мужем! Неужели мужем?» думала она, не смея взглянуть на его лицо, чувствуя всё тот же взгляд, устремленный на себя.
Ввечеру, когда после ужина стали расходиться, Анатоль поцеловал руку княжны. Она сама не знала, как у ней достало смелости, но она прямо взглянула на приблизившееся к ее близоруким глазам прекрасное лицо. После княжны он подошел к руке m lle Bourienne (это было неприлично, но он делал всё так уверенно и просто), и m lle Bourienne вспыхнула и испуганно взглянула на княжну.
«Quelle delicatesse» [Какая деликатность,] – подумала княжна. – Неужели Ame (так звали m lle Bourienne) думает, что я могу ревновать ее и не ценить ее чистую нежность и преданность ко мне. – Она подошла к m lle Bourienne и крепко ее поцеловала. Анатоль подошел к руке маленькой княгини.
– Non, non, non! Quand votre pere m'ecrira, que vous vous conduisez bien, je vous donnerai ma main a baiser. Pas avant. [Нет, нет, нет! Когда отец ваш напишет мне, что вы себя ведете хорошо, тогда я дам вам поцеловать руку. Не прежде.] – И, подняв пальчик и улыбаясь, она вышла из комнаты.


Все разошлись, и, кроме Анатоля, который заснул тотчас же, как лег на постель, никто долго не спал эту ночь.
«Неужели он мой муж, именно этот чужой, красивый, добрый мужчина; главное – добрый», думала княжна Марья, и страх, который почти никогда не приходил к ней, нашел на нее. Она боялась оглянуться; ей чудилось, что кто то стоит тут за ширмами, в темном углу. И этот кто то был он – дьявол, и он – этот мужчина с белым лбом, черными бровями и румяным ртом.
Она позвонила горничную и попросила ее лечь в ее комнате.
M lle Bourienne в этот вечер долго ходила по зимнему саду, тщетно ожидая кого то и то улыбаясь кому то, то до слез трогаясь воображаемыми словами рauvre mere, упрекающей ее за ее падение.
Маленькая княгиня ворчала на горничную за то, что постель была нехороша. Нельзя было ей лечь ни на бок, ни на грудь. Всё было тяжело и неловко. Живот ее мешал ей. Он мешал ей больше, чем когда нибудь, именно нынче, потому что присутствие Анатоля перенесло ее живее в другое время, когда этого не было и ей было всё легко и весело. Она сидела в кофточке и чепце на кресле. Катя, сонная и с спутанной косой, в третий раз перебивала и переворачивала тяжелую перину, что то приговаривая.
– Я тебе говорила, что всё буграми и ямами, – твердила маленькая княгиня, – я бы сама рада была заснуть, стало быть, я не виновата, – и голос ее задрожал, как у собирающегося плакать ребенка.
Старый князь тоже не спал. Тихон сквозь сон слышал, как он сердито шагал и фыркал носом. Старому князю казалось, что он был оскорблен за свою дочь. Оскорбление самое больное, потому что оно относилось не к нему, а к другому, к дочери, которую он любит больше себя. Он сказал себе, что он передумает всё это дело и найдет то, что справедливо и должно сделать, но вместо того он только больше раздражал себя.
«Первый встречный показался – и отец и всё забыто, и бежит кверху, причесывается и хвостом виляет, и сама на себя не похожа! Рада бросить отца! И знала, что я замечу. Фр… фр… фр… И разве я не вижу, что этот дурень смотрит только на Бурьенку (надо ее прогнать)! И как гордости настолько нет, чтобы понять это! Хоть не для себя, коли нет гордости, так для меня, по крайней мере. Надо ей показать, что этот болван об ней и не думает, а только смотрит на Bourienne. Нет у ней гордости, но я покажу ей это»…
Сказав дочери, что она заблуждается, что Анатоль намерен ухаживать за Bourienne, старый князь знал, что он раздражит самолюбие княжны Марьи, и его дело (желание не разлучаться с дочерью) будет выиграно, и потому успокоился на этом. Он кликнул Тихона и стал раздеваться.
«И чорт их принес! – думал он в то время, как Тихон накрывал ночной рубашкой его сухое, старческое тело, обросшее на груди седыми волосами. – Я их не звал. Приехали расстраивать мою жизнь. И немного ее осталось».
– К чорту! – проговорил он в то время, как голова его еще была покрыта рубашкой.
Тихон знал привычку князя иногда вслух выражать свои мысли, а потому с неизменным лицом встретил вопросительно сердитый взгляд лица, появившегося из под рубашки.
– Легли? – спросил князь.
Тихон, как и все хорошие лакеи, знал чутьем направление мыслей барина. Он угадал, что спрашивали о князе Василье с сыном.
– Изволили лечь и огонь потушили, ваше сиятельство.
– Не за чем, не за чем… – быстро проговорил князь и, всунув ноги в туфли и руки в халат, пошел к дивану, на котором он спал.
Несмотря на то, что между Анатолем и m lle Bourienne ничего не было сказано, они совершенно поняли друг друга в отношении первой части романа, до появления pauvre mere, поняли, что им нужно много сказать друг другу тайно, и потому с утра они искали случая увидаться наедине. В то время как княжна прошла в обычный час к отцу, m lle Bourienne сошлась с Анатолем в зимнем саду.
Княжна Марья подходила в этот день с особенным трепетом к двери кабинета. Ей казалось, что не только все знают, что нынче совершится решение ее судьбы, но что и знают то, что она об этом думает. Она читала это выражение в лице Тихона и в лице камердинера князя Василья, который с горячей водой встретился в коридоре и низко поклонился ей.