Obvody rozhraní SPI

Obvody rozhraní SPI

Nejdříve se seznámímes popisem  sběrnice  SPI

Sběrnice SPI (Serial Peripheral Interface) představuje jednu ze sériových externích sběrnic pro multiprocesorovou komunikaci. Sběrnice SPI je předurčena pro vzájemné propojení dvou či více mikroprocesorových obvodů, kde jeden je v roli takzvaného řadiče sběrnice (master), ostatní podřízené obvody pracují v režimu slave. Obvod, který pracuje jako master, obsahuje zdroj  hodinového signálu. Hodinový signál je dále rozveden do všech ostatních podřízených obvodů připojených ke sběrnici. Tímto způsobem je zabezpečen obousněrný synchronní přenos dat na sběrnici. Hodinový signál je rozváděn vodičem označovaným symbolem SCK. Kromě vodiče s hodinovým signálem jsou uzly propojeny dvojicí vodičů označovaných většinou symboly MISO (Master In, Slave Out) a MOSI (Master Out, Slave In), pomocí nichž se obousměrně (full duplex) přenáší data. Posledním signálem, který se u této sběrnice používá, je signál SSEL (Slave Select), jenž slouží – jak již jeho název napovídá – k výběru některého uzlu pracujícího v režimu slave. V následujícím popisu  si ukážeme, jak a kdy se tento signál používá. Všechny čtyři signály – SCK, MISO, MOSI i SSEL, pro svoji funkci vyžadují pouze jednosměrné porty, což přispívá k jednoduché a především levné implementaci této sběrnice.

 

Přednosti a zápory sběrnice SPI

Výhodou sběrnice SPI její jednoduchost a snadná implementace. Představuje rozhraní sběrnice s piny kompatibilními s technologií TTL a  CMOS.  SPI je konstruováno jako několik propojených posuvných registrů, přičemž posun je řízen jednotným hodinovým signálem. Jednoduchost přenosového protokolu je dána tím, že data jsou přenášena obousměrně a to tak, že každý směr má svůj samostaný vodič. Z toho vyplývá, že není nutné realizovat přepínání mezi  příjmem a vysíláním. Přenosová rychlost je pro mnoho aplikací dostačující. Hodinová frekvence,rychlost (bitrate), se v běžných případech pohybuje v rozsahu 1 MHz až 10 MHz Při  dodržení konstrukčních zásad, jako malá kapacita vodičů sběrnice  je však možné použít i poměrně vysokou frekvenci až 70 MHz, což odpovídá 140×106 obousměrně přeneseným bitům za sekundu.

Nevýhody sběrnice SPI je existence pouze jednoho zařízení, které může pracovat v režimu master. Existuje sice možnost použít zapojení označované multiple master, ale to již vyžaduje použití složitějšího přenosového protokolu, takže se vytrácí jednoduchost celého řešení. Pomocí SPI je také možné přenášet data pouze na kratší vzdálenosti, což je dáno jednak nutností synchronizace hodinového signálu s přenášenými daty (shodné zpoždění), tak i neexistencí signálu typu ACK (acknowledge), kterým by se potvrzoval příjem dat a dovoloval tak řídit rychlost přenosu dat v případě, že některé zařízení nedokáže data rychle zpracovat. Další nevýhodou je fakt, že u SPI je možné použít několik způsobů synchronizace dat hodinovým signálem – lze použít obě polarity hodin, synchronizovat na náběžnou či sestupnou hranu atd. Proto například mnoho mikrořadičů obsahuje konfigurační registry, pomocí nichž je možné zvolit, jakým způsobem se má hodinový signál generovat (master) či naopak interpretovat (slave). Poslední nevýhodou, která však kvůli komunikaci na menší vzdálenosti není tak patrná, je nutnost použít minimálně čtyři vodiče pro obousměrnou komunikaci – SCK, MISO, MOSI a GND (signálová zem). Alternativní způsob zapojení (MISO a MOSI spojené do jednoho vodiče SISO) se příliš často nepoužívá.

 

Princip komunikace po sběrnici SPI

Na obrázku je nakreslen způsob propojení dvou uzlů (například mikrořadičů) pomocí sběrnice SPI. Oba uzly obsahují v tom nejjednodušším případě dva registry – datový záchytný registr Serial Input Buffer – SSPBUF a posuvný registr Shift Register – SSPSR. Do registru SSPSR je zapsán bajt (celá osmice bitů), který byl korektně přijat, ale ještě nebyl zpracován, tj. mikrořadič si jeho obsah nepřečetl. Tento registr tedy slouží jako jednoprvková fronta zabezpečující, že při korektní obsluze nedojde ke ztrátě dat. Posuvný registr SSPSR slouží současně k vysílání i příjmu jednoho bitu z celé osmice přenášených bitů – každý posun obsahu tohoto registru doprava znamená, že se vysunutý bit pošle na pin SDO (v případě uzlu typu master se jedná o vodič MOSI) a naopak logická hodnota přečtená na pinu SDI (MISO) je zapsána do nejnižšího bitu posuvného registru. Jeden z uzlů pracuje v režimu master, druhý v režimu slave. Vysílání i příjem jednoho bitu je tedy nedělitelná operace, která vždy proběhne ve stejný okamžik.

Obr. 1: Schéma komunikace na sběrnici SPI

Uzel pracující v režimu master generuje hodinové impulsy, které jsou posílány po vodiči SCK. Pomocí hodinových pulsů je prováděna synchronizace vysílání i příjmu dat, tj. časy, ve kterých dochází ke změně posuvných registrů SSPSR. U většiny zařízení je možné nakonfigurovat polaritu hodin i to, zda se má posun provést při sestupné či vzestupné hraně hodinového signálu – důvod byl uveden v předchozí kapitole. Čtyři možné tvary hodinového signálu jsou zobrazeny na osmém obrázku. Konfiguračním bitem CKP je určena polarita hodinového signálu, tj. především jeho klidová úroveň (idle), která představuje stav, kdy se neprovádí vysílání dat. Naproti tomu konfigurační bit CKE určuje, zda se platná data, tj. doba, ve které dochází k posunu v posuvném registru, oznamují vzestupnou či sestupnou hranou hodinového signálu (pro CKP=1 je signál invertován a tím dochází i k otočení smyslu hrany). Povšimněte si, že k vysílání i příjmu dat dochází vždy až po ustálení obou datových vodičů (MISO i MOSI), tj. uprostřed bitového intervalu.

 

Obr. 2: Časové průběhy signálů na sběrnici SPI

 

Komunikace s více uzly

Na následujícím obrázku byla ukázána ta nejjednodušší konfigurace sběrnice SPI, při které se data přenášela mezi dvojicí uzlů, přičemž každý uzel mohl data současně vysílat i přijímat. V praxi se však často stává, že je nutné propojit větší množství uzlů – může se například jednat o různá vstupní zařízení (teplotní čidla, světelné sondy, A/D převodníky) či naopak zařízení výstupní (LCD a LED). Pokud je nutné data přenášet bez většího zpoždění, a to i v případě, že některé ze zařízení nemusí pracovat, použije se zapojení naznačené na devátém obrázku. V tomto zapojení existuje jeden uzel pracující v režimu master. Ten generuje hodinový signál použitý při obousměrném přenosu dat. Kromě toho však také obsahuje piny označené CSx nebo SSELx, kterými se vybírá právě jeden z uzlů typu slave. V jeden okamžik může být vybrán vždy pouze jeden uzel typu slave, jinak by došlo ke kolizi na vodiči SDI (MISO) ve chvíli, kdy by více uzlů typu slave na tento vodič začalo vysílat data. Předností tohoto způsobu zapojení je prakticky okamžitý výběr uzlu, se kterým se má komunikovat, nevýhodou pak rostoucí počet vodičů CSx a tím pádem i výstupních pinů, které je nutné v uzlu typu master „obětovat“. Podobně jako u všech podobných výběrových signálů (CS, OE), je i zde použit invertovaný vstup, tj. zařízení se vybírá logickou nulou (úroveň L) a nikoli jedničkou (úroveň H).

 

Obr. 3: Multiprocesorová komunikace na sběrnici SPI

 

Komunikaci zahajuje řadič master prvkem startu, když fyzicky je vyvolána sestupná hrana signálu na vodiči SDA při současné HIGH hodnotě na vodiči sběrnice SCL.  Vysílaný osmibitový znak je vysílán po vodiči SDA počínaje nejvýzamnějším bitem , úroveň  na vodiči SDA musí zůstat stabilní po celou dobu trvání úrovně HIGH signálu sběrnicového vodiče SCL. Vyslaný znak je potvrzován přijímačem stažením signálu SDA na úroveň LOW v době, která odpovídá devátému bitu ( prvek ACK).

Přijímač může pozastavit vysílač podržením signálu SCL na úrovni LOW (prvek HOLD). To se týká každé periody signálu SCL a pozastavení může vyvolat libovolný prvek sběrnice.. Sestupná hrana signálu SCL navíc synchronizuje generátory signálu SCL připojených prvků.

Zdroje
  • HRBÁČEK, Jiří. Komunikace mikrokontroléru s okolím. 1. vyd. Praha: BEN - technická literatura, 1999, 159 s. ISBN 80-86056-42-21.
  • MATOUŠEK, David. Práce s mikrokontroléry ATMEL AVR ATmega16. 1. vyd. Praha: BEN - technická literatura, 2006, 319 s. μC. ISBN 80-730-0174-8.
  • VÁŇA, Vladimír. Mikrokontroléry ATMEL AVR: programování v jazyce C : popis a práce ve vývojovém prostředí CodeVisionAVR C. 1. vyd. Praha: BEN - technická literatura, 2003, 215 s. ISBN 80-730-0102-0.

Obrázky

  • Obr. 1, 2, 3: [online]. [cit. 2015-01-30]. Dostupné z: http://www.best-microcontroller-projects.com/spi-interface.html
Zapamatuj si
  • Prostřednictvím rozhraní SPI zpravidla programujeme mikrořadič. Tento způsob označujeme jako  ISP programování.
  • Jedná se o synchronní sériové rozhranní čtyř vodičové sběrnice.
  • Při multiobvodové komunikaci musí jednotlivé obvody připojené ke sběrnici SPI  být aktivovány  výběrem - signálem CS - SS.