Spi мига сигнали по време на нормална работа. Какво е SPI интерфейс

SPI (Serial Peripheral Interface) е сериен, синхронен, пълен дуплекс стандарт за трансфер на данни, разработен от Motorola, за да осигури лесно и евтино взаимодействие на микроконтролери и периферни устройства. SPI понякога се нарича и четирипроводен интерфейс.SPI е синхронен протокол, при който всяко предаване се синхронизира с общ тактов сигнал, генериран от хоста (процесора). Получаващото периферно устройство (подчинено) синхронизира получаването на последователността от битове с тактовия сигнал. Множество IC могат да бъдат свързани към един сериен периферен интерфейс на главна IC. Главният избира подчинения за предаване чрез активиране на сигнала за избор на чип на подчинения чип. Периферните устройства, които не са избрани от процесора, не участват в SPI трансфера.
SPI използва четири цифрови сигнала:

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

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

SPI режим времева диаграма
Режим SPI0

Режим SPI1
Нивото на активния пулс е високо.

Режим SPI2

Първо щракане, след това преместване.

Режим SPI3
Нивото на активния импулс е ниско.
Първа смяна, после щракане.

Таблицата приема:

  • MSB - старши бит;
  • LSB е най-малкият бит.

Главният трябва да се настрои към режима, използван от подчинения.
При обмен на данни през SPI интерфейса микроконтролерът може да работи като главен (режим Master) или като подчинен (режим Slave). В този случай потребителят може да зададе следните параметри:

  • режим на работа по таблица;
  • скорост на предаване;
  • формат на предаване (от най-младшия бит до най-значимия или обратно).

Свързването на два микроконтролера според структурата master - slave през SPI интерфейса се осъществява по следната схема.

Изводите SCK, CS за главния микроконтролер са изходи, а подчинения микроконтролер са входове.

Прехвърлянето на данни се извършва по следния начин. Когато записвате в SPI регистъра на данните на главния микроконтролер, генераторът на тактов сигнал на SPI модула се стартира и данните започват да се подават бит по бит към MOSI щифта и съответно към MOSI щифта на подчинения микроконтролер. След подаване на последния бит от текущия байт, генераторът на тактов сигнал спира с едновременна настройка на флага "Край на предаването" на "1". Ако прекъсванията от SPI модула се поддържат и разрешават, се генерира заявка за прекъсване. След това главният микроконтролер може да започне да предава следващия байт или, като приложи напрежение на логическо ниво "1" към SS входа на подчинения, да го постави в състояние на изчакване.

Едновременно с прехвърлянето на данни от главния към подчинения се извършва прехвърляне в обратна посока, при условие че на входа SS на подчинения има ниско ниво на напрежение. Така във всеки цикъл на смяна се обменят данни между устройствата. В края на всеки цикъл флагът за прекъсване се настройва на "1" както в главния микроконтролер, така и в подчинения. Получените байтове се съхраняват в приемни буфери за по-късна употреба.

При получаване на данни полученият байт трябва да бъде прочетен от SPI регистъра на данните, преди последният бит от следващия байт да влезе в регистъра за изместване. В противен случай първият байт ще бъде загубен.

Пинът SS е за избор на активен подчинен и винаги е вход в режим подчинен. Всеки път, когато щифтът SS се захранва към логика 1, SPI модулът се нулира. Ако промяната на състоянието на този щифт настъпи по време на трансфер на данни, както приемането, така и предаването ще спрат незабавно и предадените и получените байтове ще бъдат загубени.

Ако микроконтролерът е в режим Master, посоката на трансфер на данни през SS щифта се определя от потребителя. Когато щифтът е конфигуриран като изход, той действа като щифт с общо предназначение и не засяга работата на SPI модула. По правило в този случай той се използва за управление на SS извода на микроконтролера, работещ в режим Slave.

Ако щифтът е конфигуриран като вход, той трябва да бъде захранван, за да може SPI модулът да функционира правилно. високо ниво. Прилагането на ниско ниво на напрежение към този вход от която и да е външна верига ще бъде възприето от SPI модула като избор на микроконтролера като подчинен (в този случай данните ще бъдат прехвърлени към него).

Пример за използване на интерфейса SPI за микроконтролери STM32 е добре описан в

С рейтинги от 10 Ohm до 1 MΩ);

  • свързващи проводници (например, тук е такъв добър комплект);
  • персонален компютър със среда за разработка Arduino IDE.
  • 1 Описание на сериала SPI интерфейс

    SPI - Serial Peripheral Interface или "Serial Peripheral Interface"е синхронен комуникационен протокол за сдвояване главно устройствос периферни устройства(роб). Главното устройство често е микроконтролер. Устройствата комуникират по четири проводника, поради което SPI понякога се нарича "интерфейс с четири проводника". Ето и гумите:

    Има четири режима на предаване ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), поради комбинацията от полярността на тактовите импулси (работим на ВИСОКО или НИСКО ниво), Полярност на часовника, CPOLи фазата на тактовите импулси (синхронизация на предния или задния фронт на тактовия импулс), Фаза на часовника, CPHA.

    Фигурата обяснява тази таблица.

    SPI интерфейсът предоставя няколко опции за свързване на подчинени устройства: независимаИ каскадно. С независима връзка към SPI шината, главното устройство има достъп до всяко подчинено устройство поотделно. При каскадна връзка подчинените устройства работят на свой ред, сякаш в каскада.


    Видове свързващи устройства за работа чрез SPI интерфейс: независими и каскадни

    2 Внедряване на SPI интерфейсана платки от семейството Arduino

    В Arduino SPI интерфейсните шини са на определени портове. Всяка платка има собствено разпределение на щифтовете. За удобство заключенията се дублират и също се поставят на отделна страница. ICSP конектор(При серийно програмиране на верига, програмиране на устройство, включено във верига, използвайки сериен протокол). Моля, обърнете внимание, че няма подчинен щифт за избор - SS на ICSP конектора. предполага се, че Arduino ще се използва като главно устройство в мрежата. Но ако е необходимо, можете да зададете всеки цифров щифт на Arduino като SS.

    Фигурата показва стандартното съответствие на щифтовете към SPI шините за Arduino UNO и Nano.


    3 Библиотека за работасъс SPI интерфейс

    За Arduino е написана специална библиотека, която реализира SPI протокола. Свързва се така: в началото на програмата доп #включете SPI.h.

    За да започнете да работите по протокола SPI, трябва да зададете настройките и след това да инициализирате протокола, като използвате процедурата SPI.beginTransaction(). Можете да направите това с едно изявление: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))

    Това означава, че инициализираме SPI протокола на честота от 14 MHz, трансферът на данни започва от MSB (най-значимия бит), в режим SPI_MODE0.

    След инициализацията изберете подчиненото устройство, като зададете съответния SS пин в състояние НИСКО.

    След това прехвърляме данните към подчиненото устройство с командата SPI.трансфер().

    След прехвърлянето връщаме SS на държавата ВИСОКО.


    Работата с протокола завършва с командата SPI.endTransaction().

    Желателно е да се сведе до минимум времето за изпълнение на трансфера между инструкциите SPI.beginTransaction() и SPI.endTransaction(), така че да няма припокриване, ако друго устройство се опита да инициализира трансфера на данни, използвайки различни настройки.

    4 Свързване на смяна регистъркъм Ардуино

    Обмисли практическа употреба SPI интерфейс. Ще запалим светодиодите, като задвижим 8-битов регистър за изместване през SPI шината. Свържете се с Arduino смяна регистър 74HC595. Към всеки от 8-те изхода на регистъра чрез ограничителен резистор ще свържем светодиод с номинална стойност 220 ома. Схемата е показана на фигурата.


    5 Контролна скица на регистъра на преместванечрез SPI интерфейс

    Да напишем етюд.

    #включи const int pinSelect = 8; // регистриране изберете щифт void setup()( SPI.begin(); // инициализация на SPI интерфейса pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // изберете подчинен (регистр) SPI.transfer(0); // изчистване на съдържанието на регистъра digitalWrite(pinSelect, HIGH); // край на предаването Serial.begin(9600); } void loop() (за (int i=0; i )

    Първо ще свържем SPI библиотеката и ще инициализираме SPI интерфейса. Нека дефинираме пин 8 като щифт за избор на подчинен SS. Изчистете регистъра за смяна, като му изпратите стойността "0". Инициализирайте серийния порт.

    За да запалите конкретен светодиод смяна регистър, трябва да приложите 8-битово число към неговия вход. Например, за да светне първият светодиод, ние подаваме двоичното число 00000001, за втория - 00000010, за третия - 00000100 и т.н. Тези двоични числа, когато се преведат в десетичната бройна система, образуват следната последователност: 1, 2, 4, 8, 16, 32, 64, 128 и са степени на две от 0 до 7.

    Съответно в цикъла цикъл ()по броя на светодиодите преизчисляваме от 0 до 7. Функция pow(основа, експонента)повишава 2 на степен на брояча на цикъла. Микроконтролерите не работят много точно с числа от тип "двойни", затова използваме функцията за закръгляване, за да преобразуваме резултата в цяло число. кръгъл(). И прехвърляме полученото число в регистъра за смяна. За по-голяма яснота мониторът на серийния порт показва стойностите, получени по време на тази операция: единството "протича" през разрядите - светодиодите светят вълна.

    6 "Бягаща вълна"от светодиоди

    Светодиодите светват на свой ред и наблюдаваме течаща "вълна" от светлини. Светодиодите се управляват с помощта на регистър за смяна, към който се свързахме чрез SPI интерфейс. В резултат на това само 3 пина на Arduino се използват за управление на 8 светодиода.Ако трябваше да свържем светодиодите директно към цифровите портове на Arduino, ще трябва да използваме отделен порт за всеки светодиод.

    Изучихме най-простия пример за работа на Arduino с SPI шината. Нека разгледаме по-подробно работата на няколко регистъра за преместване с независими и каскадни връзки в отделна статия.

    SPI - Serial Peripheral Interface - сериен

    периферен интерфейс

    SPI е стандарт за сериен синхронен трансфер на данни между микросхеми в пълен дуплексен режим.

    Този интерфейс първоначално е разработен от Motorola, за да осигури просто и евтино взаимодействие на микроконтролери и периферни устройства и в момента се използва в продукти от много производители.

    SPI интерфейсът, заедно с I2C, е един от най-широко използваните интерфейси за свързване на чипове. Името му е съкращение от "Serial Peripheral Interface" (английски, SPI bus -

    SPI шина), което отразява нейното предназначение - шина за свързване на външни устройства. Шината SPI е организирана на принципа главен-подчинен. Мастерът на шината обикновено е микроконтролер, но може да бъде и програмируема логика, DSP контролер или ASIC. Шина, свързана с главния външни устройстваобразуват подчинен автобус. Тяхната роля се играе от различни видове микросхеми, вкл. устройства за съхранение (EEPROM, Flash-памет, SRAM), часовник в реално време (RTC), ADC/DAC, цифрови потенциометри, специализирани контролери и др.

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

    1. Електрическа връзка

    IN различен от стандартния сериен порт (англ.стандартен сериен порт), SPI е синхронен интерфейс, в който всяко предаване се синхронизира с общ тактов сигнал, генериран от главния (процесор). Получаващото периферно устройство (подчинено) синхронизира получаването на последователността от битове с тактовия сигнал. Множество IC могат да бъдат свързани към един сериен периферен интерфейс на главна IC. Главният избира подчинения за предаване чрез активиране на сигнала за избор на чип на подчинения чип. Неизбраните от процесора периферни устройства не участват

    в SPI предаване.

    SPI използва четири цифрови сигнала:

    MOSI (англ. Master Out Slave In) - главен изход (алтернативно обозначение DO, SDO, DOUT), вход на подчинено устройство за серийно приемане на данни (алтернативно обозначение DI, SDI, DIN). Използва се за прехвърляне на данни от главния към подчинения.

    MISO (англ. Master In Slave Out) - вход на главното устройство за серийно приемане на данни (алтернативно обозначение DI, SDI, DIN), изход на подчиненото устройство за серийно предаване на данни (алтернативно обозначение DO, SDO, DOUT). Служи за прехвърляне на данни от slave към master.

    SCLK (англ. Serial clock) - сериен часовников сигнал (алтернативно обозначение DCLOCK, CLK, SCK). Служи за предаване на тактов сигнал за подчинени устройства.

    CS или SS - избор на чип, избор на подчинен

    (Английски Chip Select, Slave Select).

    Има три типа връзка към SPI шината, всяка от които включва четири сигнала. Най-простата връзка, в която участват само две микросхеми, е показана на фигура 1.

    Ориз. 1. Най-простата връзка към SPI шината

    Тук главната шина предава данни по MOSI линията в синхрон със собствения си генериран SCLK сигнал, а ведомата улавя предадените битове данни на определени краища на получения часовников сигнал. В същото време подчиненото устройство изпраща своя пакет данни. Представената схема може да бъде опростена чрез пропускане на линията MISO, ако използваната подчинена IC не предвижда или не се изисква да изпраща обратно данни. Еднопосочният трансфер на данни може да се намери в микросхеми като DAC, цифрови потенциометри, програмируеми усилватели и драйвери. По този начин разглежданият вариант за свързване на подчинена ИС изисква 3 или 4 комуникационни линии. За да може подчинената IC да получава и предава данни, в допълнение към наличието на часовников сигнал, е необходимо също SS линията да бъде управлявана ниско. В противен случай подчинената IC ще бъде неактивна. Когато се използва само една външна IC, може да бъде изкушаващо да се изключи и SS линията чрез твърда настройка на входа за избор на подчинената IC на ниско ниво. Такова решение е крайно нежелателно и може да доведе до неизправности или дори невъзможност за прехвърляне на данни, т.к. входът за избор на чип служи за нулиране на IC в първоначалното му състояние и понякога инициира изхода на първия бит данни.

    Ако е необходимо да се свържат няколко микросхеми към SPI шината, се използва или независима (паралелна) връзка (фиг. 2), или каскадна (серийна) връзка (фиг. 3).

    Ориз. 2. Самостоятелна връзка към SPI шината

    Ориз. 3. Каскадно към SPI шина

    Независимата връзка е по-често срещана, т.к. постигнато с помощта на всякакви SPI-съвместими чипове. Тук всички сигнали, с изключение на избора на чипове, се свързват паралелно, а главният шина, прехвърляйки един или друг SS сигнал в ниско състояние, задава с коя подчинена ИС ще обменя данни. Основният недостатък на такава връзка е необходимостта от допълнителни линии за адресиране на подчинени микросхеми (общият брой комуникационни линии е 3 + n, където n е броят на подчинените микросхеми). Каскадирането е лишено от този недостатък, т.к тук от

    няколко микросхеми образуват един голям регистър за смяна. За да направите това, изходът за данни за предаване на една IC е свързан към входа за данни за получаване на другия, както е показано на фигура 3. Входовете за избор на чип са свързани паралелно тук и по този начин общият брой комуникационни линии се поддържа на 4 Въпреки това, каскадирането е възможно само ако поддръжката му е посочена в документацията за използваните чипове. За да разберете, е важно да знаете, че подобна връзка се нарича на английски "daisy-chaining".

    2. Предавателен протокол

    Протоколът за прехвърляне на SPI е изключително прост и всъщност е идентичен с логиката на регистъра за смяна, която се състои в извършване на операция за смяна и съответно битово въвеждане и извеждане на данни на определени краища на сигнала за синхронизация . Наборът от данни при предаване и извличането при получаване винаги се извършват на противоположни фронтове на часовника. Това е необходимо, за да се гарантира, че данните се извличат, след като са били надеждно установени. Ако вземем предвид, че нарастващият или спадащият фронт може да действа като първи фронт в цикъла на предаване, тогава има четири възможни варианта за логиката на SPI интерфейса. Тези опции се наричат ​​SPI режими и се описват с два параметъра:

    CPOL - първоначалното ниво на сигнала за синхронизация (ако CPOL=0, тогава линията за синхронизация преди началото на цикъла на предаване и след края му има ниско ниво (т.е. първият фронт се покачва, а последният фронт пада), в противен случай, ако CPOL=1, - високо (т.е. първият фронт пада, а последният се покачва));

    CPHA - фаза на синхронизация; този параметър определя последователността, в която данните се задават и семплират (ако CPHA=0, тогава данните ще бъдат семплирани на нарастващия фронт в цикъла на синхронизация и след това, на спадащия фронт, данните ще бъдат зададени

    данни; ако CPHA=1, тогава данните ще бъдат зададени на нарастващия фронт на тактовия цикъл и извлечени на спадащия фронт).

    Главният и подчинените чипове, работещи в различни SPI режими, не са съвместими, така че е важно да се изясни кои режими се поддържат от главния автобус, преди да изберете подчинени чипове. SPI хардуерните модули, интегрирани в микроконтролерите, в повечето случаи поддържат възможността за избор на всеки SPI режим и следователно към тях могат да бъдат свързани всякакви SPI подчинени микросхеми (важи само за независима опция за свързване). В допълнение, SPI протоколът във всеки от режимите се внедрява лесно в софтуера.

    Раздел. 1. SPI режими

    Временно

    диаграма

    синхронизация

    3. Сравнение с I2 C шина

    Както вече споменахме, за докинг микросхеми, 2-жилният е не по-малко популярен. серийна шина I2 C. По-долу можете да намерите предимствата, които дава тази или онази серийна шина.

    Предимства на SPI шината

    Предимства на I2C шината

    Изключителна простота на протокола

    предаване на физическия слой

    осигурява висока надеждност и

    скорост на предаване. ограничаване

    Измерва се скоростта на SPI шината

    Шината I2 C остава двупроводна,

    десетки мегахерца и следователно го

    независимо от броя

    идеален за стрийминг

    микросхема, свързана към него.

    големи количества данни и широко

    използвани при висока скорост

    DAC/ADC, LED драйвери

    дисплеи и чипове памет

    Всички автобусни линии на SPI са

    еднопосочно, което е от съществено значение

    Multi-master възможност

    опростява решаването на проблеми

    работа, когато е свързан към автобуса

    преобразуване на ниво и

    няколко водещи микросхеми.

    галванична изолация на микросхеми

    I2C протоколът е повече

    стандартизиран, т.н

    Лесно изпълнение на софтуера

    Повече потребител на I2C чип

    SPI протокол.

    защитени от проблеми

    несъвместимост на избраните

    компоненти.

    4. Изведени и съвместими протоколи

    МИКРОЖИЦА.

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

    Максимален 3-жилен интерфейс

    Разликата с този интерфейс е, че вместо пълно дуплексно предаване по две еднопосочни линии, той извършва полудуплексно предаване по една двупосочна DQ линия.

    QSPI

    Протокол от по-високо ниво от SPI, който позволява автоматизиран трансфер на данни без участие на процесора.

    Освен това SPI интерфейсът е основа за изграждане на редица специализирани интерфейси, вкл. JTAG интерфейс за отстраняване на грешки и интерфейси за карта с флаш памет, вкл. SD и MMC.

    Инструкция

    SPI- Сериен периферен интерфейсили "Сериен периферен интерфейс"е протокол за синхронно предаване за взаимодействие на главно устройство (Master) с периферни устройства (Slave). Главното устройство често е . Устройствата комуникират по четири проводника, поради което SPI понякога се нарича "интерфейс с четири проводника". Ето и гумите:
    MOSI (Master Out Slave In)- линия за предаване на данни от главни към подчинени устройства;
    MISO (Master In Slave Out)- предавателна линия от slave към master;
    SCLK (сериен часовник)- часовник за синхронизация, генериран от главния;
    SS (избор на подчинен)- линия за избор на подчинено устройство; когато линията е "0", подчиненото устройство "разбира", че в момента има достъп до него.
    Има четири режима на пренос на данни (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3) поради комбинацията от полярност на часовника (ние работим на ниво HIGH или LOW), Полярност на часовника, CPOLи фазата на тактовите импулси (синхронизация на предния или задния фронт на тактовия импулс), Фаза на часовника, CPHA.
    Фигурата показва две опции за свързване на устройства, използващи протокола SPI: независими и каскадни. С независима връзка към SPI шината, главното устройство има достъп до всяко подчинено устройство поотделно. С каскада - устройствата работят последователно, каскадно.

    В Arduino SPI интерфейсните шини са на определени портове. Всяка платка има собствено разпределение на щифтовете. За удобство заключенията се дублират и също се поставят на отделен ICSP конектор (In Circuit Serial Programming, устройство, включено във веригата, използващо сериен протокол). Моля, обърнете внимание, че няма подчинен щифт за избор - SS на ICSP конектора. предполага се, че Arduino ще се използва като главно устройство в мрежата. Но ако е необходимо, можете да зададете всеки щифт на Arduino като SS.
    Фигурата показва стандартното съответствие на щифтовете към SPI шините за Arduino UNO и Nano.

    Написан е специален за Arduino, който прилага SPI протокола. Свързва се така: в началото на програмата доп #включете SPI.h
    За да започнете да работите с протокола SPI, трябва да зададете настройките и след това да инициализирате протокола с помощта на процедурата SPI.beginTransaction(). Можете да направите това с едно изявление: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0)).
    Това означава, че инициализираме SPI протокола на 14 MHz, данните се предават, започвайки от MSB (най-значимия бит), в режим "0".
    След инициализацията избираме подчиненото устройство, като прехвърляме съответния SS пин в състояние LOW.
    След това прехвърляме данните към подчиненото устройство с командата SPI.transfer ().
    След предаването връщаме SS в състояние HIGH.
    Работата с протокола завършва с командата SPI.endTransaction(). Желателно е да се сведе до минимум времето за изпълнение на трансфера между инструкциите SPI.beginTransaction() и SPI.endTransaction(), така че да няма припокриване, ако друго устройство се опита да инициализира трансфера на данни, използвайки различни настройки.

    Помислете за практическото приложение на SPI интерфейса. Ще запалим светодиодите, като задвижим 8-битов регистър за изместване през SPI шината. Свържете регистър 74HC595 към Arduino. Ще свържем светодиод към всеки от 8-те изхода (чрез ограничителен резистор). Схемата е показана на фигурата.

    Да напишем етюд.
    Първо ще свържем SPI библиотеката и ще инициализираме SPI интерфейса. Нека дефинираме щифт 8 като щифт за избор на подчинен. Изчистете регистъра за смяна, като му изпратите стойността "0". Инициализирайте серийния порт.
    За да запалите определен светодиод с помощта на регистър за преместване, трябва да приложите 8-битово число към неговия вход. Например, за да светне първият светодиод, ние подаваме двоичното число 00000001, за втория - 00000010, за третия - 00000100 и т.н. Тези двоични числа, преведени в десетичната бройна система, образуват следната последователност: 1, 2, 4, 8, 16, 32, 64, 128 и са степени от 0 до 7.
    Съответно в цикъла loop() преизчисляваме от 0 до 7 по броя на светодиодите. pow(основа, експонента)повишава 2 на степен на брояча на цикъла. Микроконтролерите не работят много точно с числа от тип "double", затова използваме функцията round(), за да преобразуваме резултата в цяло число. И прехвърляме полученото число в регистъра за смяна. За по-голяма яснота, мониторът на серийния порт показва стойностите, получени по време на тази операция: единството преминава през цифрите - светодиодите светят на вълна.

    Въведение

    SPI (3-проводник) е популярен интерфейс за сериен обмен на данни между микросхеми. Интерфейсът SPI, заедно с I 2 C, е един от най-широко използваните интерфейси за свързване на микросхеми. Първоначално е изобретен от Motorola и в момента се използва в продуктите на много производители. Името му е съкращение от "Serial Peripheral Bus", което отразява предназначението му - шина за свързване на външни устройства. Шината SPI е организирана на принципа главен-подчинен. Мастерът на шината обикновено е микроконтролер, но може да бъде и програмируема логика, DSP контролер или ASIC. Външните устройства, свързани към главната шина, формират подчинената шина. Тяхната роля се играе от различни видове микросхеми, вкл. устройства за съхранение (EEPROM, Flash-памет, SRAM), часовник в реално време (RTC), ADC/DAC, цифрови потенциометри, специализирани контролери и др.

    Основният компонент на SPI интерфейса е конвенционален преместващ регистър, чиито входно/изходни сигнали за синхронизация и побитов поток формират интерфейсните сигнали. По този начин протоколът SPI е по-правилно да се нарича не протокол за пренос на данни, а протокол за обмен на данни между два регистъра за изместване, всеки от които изпълнява едновременно функцията на приемник и функцията на предавател. Незаменимо условие за пренос на данни по SPI шината е генерирането на тактов сигнал на шината. Този сигнал има право да генерира само главната шина и работата на подчинената шина изцяло зависи от този сигнал.

    Електрическа връзка

    Има три типа свързване към SPI шината, всеки от които включва четири сигнала (вижте таблица 1 за техните основни и алтернативни обозначения). Най-простата връзка, която включва само два чипа, е показана на Фигура 1. Тук главната шина предава данни по MOSI линията в синхрон с SCLK сигнала, генериран от нея, а ведомата улавя предадените битове данни на определени краища на получен часовников сигнал. В същото време подчиненото устройство изпраща своя пакет данни. Представената схема може да бъде опростена чрез пропускане на линията MISO, ако използваната подчинена IC не предвижда или не се изисква да изпраща обратно данни. Еднопосочният трансфер на данни може да се намери в микросхеми като DAC, цифрови потенциометри, програмируеми усилватели и драйвери. По този начин разглежданият вариант за свързване на подчинена ИС изисква 3 или 4 комуникационни линии. За да може подчинената IC да получава и предава данни, в допълнение към наличието на часовников сигнал, е необходимо също SS линията да бъде управлявана ниско. В противен случай подчинената IC ще бъде неактивна. Когато се използва само една външна IC, може да бъде изкушаващо да се изключи и SS линията чрез твърда настройка на входа за избор на подчинената IC на ниско ниво. Такова решение е крайно нежелателно и може да доведе до неизправности или дори невъзможност за прехвърляне на данни, т.к. входът за избор на чип служи за нулиране на IC в първоначалното му състояние и понякога инициира изхода на първия бит данни.


    Ориз. 1. Най-простата връзка към SPI шината

    Ако е необходимо да се свържат няколко микросхеми към SPI шината, се използва или независима (паралелна) връзка (фиг. 2), или каскадна (серийна) връзка (фиг. 3). Независимата връзка е по-често срещана, т.к. постигнато с помощта на всякакви SPI-съвместими чипове. Тук всички сигнали, с изключение на избора на чипове, се свързват паралелно, а главният шина, прехвърляйки един или друг SS сигнал в ниско състояние, задава с коя подчинена ИС ще обменя данни. Основният недостатък на такава връзка е необходимостта от допълнителни линии за адресиране на подчинени микросхеми (общият брой комуникационни линии е 3 + n, където n е броят на подчинените микросхеми). Каскадирането е лишено от този недостатък, т.к тук един голям регистър за смяна се формира от няколко микросхеми. За да направите това, изходът за данни за предаване на една IC е свързан към входа за данни за получаване на другия, както е показано на фигура 3. Входовете за избор на чип са свързани паралелно тук и по този начин общият брой комуникационни линии се поддържа на 4 Въпреки това, каскадирането е възможно само ако поддръжката му е посочена в документацията за използваните чипове. За да разберете, е важно да знаете, че подобна връзка се нарича на английски "daisy-chaining".


    Ориз. 2. Самостоятелна връзка към SPI шината


    Ориз. 3. Каскадно към SPI шина

    Протокол за предаване

    Протоколът за прехвърляне на SPI е изключително прост и всъщност е идентичен с логиката на регистъра за смяна, която се състои в извършване на операция за смяна и съответно битово въвеждане и извеждане на данни на определени краища на сигнала за синхронизация . Наборът от данни при предаване и извличането при получаване винаги се извършват на противоположни фронтове на часовника. Това е необходимо, за да се гарантира, че данните се извличат, след като са били надеждно установени. Ако вземем предвид, че нарастващият или спадащият фронт може да действа като първи фронт в цикъла на предаване, тогава има четири възможни варианта за логиката на SPI интерфейса. Тези опции се наричат ​​SPI режими и се описват с два параметъра:

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

    Главният и подчинените чипове, работещи в различни SPI режими, не са съвместими, така че е важно да се изясни кои режими се поддържат от главния автобус, преди да изберете подчинени чипове. SPI хардуерните модули, интегрирани в микроконтролерите, в повечето случаи поддържат възможността за избор на всеки SPI режим и следователно към тях могат да бъдат свързани всякакви SPI подчинени микросхеми (важи само за независима опция за свързване). В допълнение, SPI протоколът във всеки от режимите се внедрява лесно в софтуера.

    Сравнение с шина I 2 C

    Както вече споменахме, двупроводната серийна шина I 2 C е не по-малко популярна за докинг микросхеми. По-долу можете да видите предимствата, които дава тази или онази серийна шина.

    Предимства на SPI шината Предимства на I2C шината
    Изключителната простота на протокола за предаване на физическия слой определя високата надеждност и скорост на предаване. Ограничението на скоростта на SPI шината се измерва в десетки мегахерци и следователно е идеално за поточно предаване на големи данни и се използва широко във високоскоростни DAC/ADC, драйвери за LED дисплеи и чипове памет Шината I 2 C остава двупроводна, независимо от броя на свързаните към нея чипове.
    Всички шини на SPI са еднопосочни, което значително опростява задачата за преобразуване на ниво и галванична изолация на микросхеми Възможност за многоглавна работа, когато няколко главни микросхеми са свързани към шината.
    Лесна софтуерна реализация на SPI протокола. Протоколът I2C е по-стандартизиран, следователно потребителят на I2C чипове е по-защитен от проблеми с несъвместимостта на избрани компоненти.

    Изведени и съвместими протоколи

    • МИКРОЖИЦА.

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

    • Максимален 3-жилен интерфейс

      Разликата с този интерфейс е, че вместо пълно дуплексно предаване по две еднопосочни линии, той извършва полудуплексно предаване по една двупосочна DQ линия.

    • QSPI

      Протокол от по-високо ниво от SPI, който позволява автоматизиран трансфер на данни без участие на процесора.

    Освен това SPI интерфейсът е основа за изграждане на редица специализирани интерфейси, вкл. JTAG интерфейс за отстраняване на грешки и интерфейси за карта с флаш памет, вкл. SD и MMC.

    Раздел. 1. Електрически сигнали на шина SPI

    Водещи гуми роб автобус
    Основно обозначение Алтернативна нотация Описание Основно обозначение Алтернативна нотация Описание
    MOSI DO, SDO, DOUT MOSI DI, SDI, DIN
    MISO DI, SDI, DIN Сериен вход за получаване MISO DO, SDO, DOUT Сериен изход
    SCLK DCLOCK, CLK, SCK Изход за синхронизиране на трансфер на данни SCLK DCLOCK, CLK, SCK Получаване на вход за синхронизация
    СС CS Подчинен избор на изход (избор на чип) СС CS Вход за избор на подчинен (избор на чип)


    Зареждане...
    Връх