Сериен периферен интерфейс
SPI(Английски Serial Peripheral Interface, SPI bus - сериен периферен интерфейс, SPI шина) е стандарт за сериен синхронен трансфер на данни в пълен дуплексен режим, предназначен да осигури просто и евтино високоскоростно взаимодействие на микроконтролери и периферни устройства. SPI понякога се нарича и четирижилен (на английски four-wire) интерфейс.
За разлика от стандартния сериен порт (англ. standard serial port), SPI е синхронен интерфейс, при който всяко предаване се синхронизира с общ тактов сигнал, генериран от главното устройство (процесор). Получаващото (подчинено) периферно устройство синхронизира получаването на последователността от битове с тактовия сигнал. Множество IC могат да бъдат свързани към един сериен периферен интерфейс на главна IC. Главният избира подчинения за предаване чрез активиране на сигнала за избор на чип на подчинения чип. Периферните устройства, които не са избрани от процесора, не участват в SPI трансфера.
Съдържание
SPI използва четири цифрови сигнала:
- MOSI - главен изход, подчинен вход (англ. Master out slave in). Използва се за прехвърляне на данни от главния към подчинения.
- MISO - главен вход, подчинен изход (англ. Master in slave out). Служи за прехвърляне на данни от slave към master.
- SCLK или SCK - сериен часовников сигнал (англ. Serial clock). Служи за предаване на тактов сигнал за подчинени устройства.
- CS или SS - избор на чип, избор на подчинен (англ. Chip Select, Slave Select).
Конкретните имена на SPI портове може да варират в зависимост от производителя на хардуера, но са възможни следните:настроики:
- MOSI: SIMO, SDI (на устройството), DO, DON, SI, MRSR;
- MISO: SOMI, SDO (на устройство), DI, DIN, SO, MTST;
- SCLK: SCK, CLK;
- SS: nCS, CS, CSB, CSN, nSS, STE, SYNC.
Интервалите на битовете в линиите за данни се определят от SCK тактовия сигнал, генериран от главния, подчинените устройства използват часовниковия сигнал, за да определят кога битовете на линията за данни се променят, докато подчинените устройства не могат да повлияят на битовите интервали по никакъв начин. И главният, и подчиненият имат брояч на тактови импулси (битове). Броячът в подчиненото устройство позволява на последното да определи кога предаването на пакета е приключило. Броячът се нулира, когато SPI подсистемата е изключена, която винаги е налична в главния. В подчинения броячът обикновено се нулира чрез деактивиране на сигнала на SS интерфейса.
Тъй като действията на главния и подчинения се тактират от един и същ сигнал, няма изисквания за стабилността на този сигнал, с изключение на ограничението за продължителността на полупериодите, което се определя от максималната работна честота на по-бавното устройство. Това позволява SPI да се използва в системи с ниски стабилни тактови честоти и също така улеснява софтуерната емулация на главния.
Предаването се извършва на партиди. Дължината на пакета обикновено е 1 байт (8 бита), докато SPI реализациите са известни с други дължини на пакети, като 4 бита. Главното устройство инициира комуникационен цикъл чрез издърпване ниско на щифта за избор на подчинен (SS) на устройството, към което ще се свърже. Когато SS сигналът е нисък:
- подчинената схема е в активно състояние;
- щифтът MISO се поставя в режим "изход";
- часовникът SCLK от главния се усеща от подчинения и кара входа MOSI да прочете стойностите, предадени от главния, и да измести регистъра на подчинения.
Главните и подчинените данни, които трябва да бъдат предадени, се поставят в регистри за смяна. След това главното устройство започва да генерира тактови импулси по линията SCLK, което води до взаимен обмен на данни. Данните се предават бит по бит от главния по линията MOSI и от подчинения по линията MISO. Предаването се извършва, като правило, като се започне с най-значимите битове, но някои производители позволяват промяна на реда на предаване на битове чрез софтуерни методи. След предаване на всеки пакет данни, главното устройство може да постави SS линията във високо състояние, за да синхронизира подчиненото устройство.
Възможни са четири комбинации от фаза (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 интерфейсът ви позволява да свържете няколко подчинени устройства към едно главно устройство, като връзката може да се осъществи по няколко начина.
Първият метод ви позволява да реализирате радиална комуникационна структура (звезда топология), счита се за основния начин за свързване на няколко подчинени устройства. В този случай, за да комуникира с повече от един подчинен, главният трябва да генерира подходящ брой сигнали за избор на подчинено устройство (SS). Когато комуникирате с подчинено устройство, съответният SS сигнал е настроен на активно (ниско) състояние, докато всички други SS сигнали са в неактивно (високо) състояние. MISO изводите за данни на подчинените устройства са свързани паралелно, докато са в неактивно състояние и преди да започне обменът, един от изходите (на избраното подчинено устройство) преминава в активен режим.
Вторият метод ви позволява да реализирате структура на връзка от типа "пръстен". В този случай един SS сигнал се използва за активиране на няколко подчинени устройства едновременно, а изходите за данни на всички устройства са свързани последователно и образуват затворена верига. Когато пакет се предава от главен, този пакет се получава от първия подчинен, който на свой ред излъчва своя пакет към следващия подчинен и т.н. За да може пакет от главния да достигне до конкретен подчинен, главният трябва да изпрати още няколко пакета.
Предимства
недостатъци
- Необходими са повече пинове, отколкото за I²C интерфейса.
- Подчиненото устройство не може да контролира потока от данни.
- Няма потвърждение за получаванеданни от подчиненото устройство (главното устройство може да предава данни "до никъде").
- Няма стандартно дефиниран протокол за откриване на грешки.
- Липсата на официален стандарт, което прави невъзможно сертифицирането на устройствата.
- По отношение на обхвата на предаване на данни SPI интерфейсът е по-нисък от такива стандарти като UART и CAN.
- Наличието на много опции за внедряване на интерфейса.
- Липса на поддръжка за устройства с горещо включване.
По-долу е даден пример за софтуерна реализация на SPI master на език C. Линията CS (избор на чип, избор на чип) трябва да бъде активирана (в повечето случаи изтеглена ниско) преди да започне обменът на данни и деактивирана след приключване на обмена. Повечето устройства изискват множество сесии за предаване с активна CS линия. Тази функция може да бъде извикана няколко пъти, докато линията е активна.