3.21. Základy SPI¶
SPI (Serial Peripheral Interface) je synchronní sériová sběrnice navržená pro krátké, vysokorychlostní spoje mezi jedním řadičem a jedním nebo více periferními zařízeními na stejné desce. Je to standardní rozhraní pro SD karty, displeje, flash paměť, ADC a DAC a širokou škálu senzorů.
Zatímco UART neměl sdílené hodiny a obnovoval časování přímo z datové linky, SPI vede vedle datových vodičů i hodinový vodič. Řadič řídí hodiny libovolnou rychlostí, jakou si zvolí, a všechna ostatní zařízení na sběrnici vzorkují data v synchronizaci s těmito hodinami. Žádné odhadování přenosové rychlosti (baud rate) ani režie rámcování – jen hodinové hrany a bity.
3.21.1. Čtyři vodiče¶
Plně duplexní sběrnice SPI má čtyři vodiče:
SCK (sériové hodiny). Řízené řadičem. Každý bit je vyslán nebo přijat na hraně tohoto signálu.
MOSI (výstup řadiče, vstup periferie). Výstupní linka řadiče; periferie z ní vzorkuje bity.
MISO (vstup řadiče, výstup periferie). Výstupní linka periferie; řadič z ní vzorkuje bity.
CS (chip select), někdy nazývané SS (peripheral select). Samostatná linka pro každou periferii. Řadič stáhne CS na nízkou úroveň pro zahájení transakce a zpět na vysokou úroveň pro její ukončení; jakákoli periferie s deaktivovaným CS sběrnici zcela ignoruje a přestane řídit svůj výstup MISO.
Jeden bajt SPI: CS jde na nízkou úroveň pro výběr periferie, SCK vyšle osm bitů a MOSI a MISO přenesou po jednom bajtu v opačných směrech.¶
Každá hodinová hrana přesune jeden bit v každém směru současně. Jediný impulz SCK zároveň odešle jeden bit na MOSI a přijme jeden bit na MISO – SPI je plně duplexní na úrovni vodičů. Software nemusí používat oba směry: transakce pouze pro zápis a pouze pro čtení jsou běžné, přičemž nepoužitá linka je buď ignorována, nebo udržována na vysoké úrovni.
3.21.2. Polarita a fáze hodin¶
Dva konfigurační bity přesně určují, která hodinová hrana přesouvá data:
Polarita hodin (
polarity, někdyCPOL) – klidový stav SCK.0znamená, že hodiny jsou v klidu na nízké úrovni a pulzují na vysokou;1znamená, že hodiny jsou v klidu na vysoké úrovni a pulzují na nízkou.Fáze hodin (
phase, někdyCPHA) – která hrana vzorkuje data.0vzorkuje na první hraně každého hodinového impulzu (náběžná hrana);1vzorkuje na druhé hraně (sestupná hrana).
Společně tyto bity dávají čtyři režimy, obvykle nazývané Mode 0 až Mode 3. Mode 0 (polarity=0, phase=0) je nejběžnější a bezpečná výchozí volba pro neznámá zařízení.
Zásadní pravidlo je, že obě strany se musí shodnout na režimu. Neshodující se režimy dávají nesmyslná data, i když jsou hodinové a datové linky zapojeny správně; pokud zařízení vrací při první transakci nesmysly, režim je první věc, kterou je třeba zkontrolovat.
3.21.3. Více periferií¶
Několik periferií může sdílet stejné linky SCK, MOSI a MISO, pokud každá z nich má vlastní linku CS řízenou řadičem:
Všechny periferie vidí stejné hodiny a data, ale každá sleduje svou vlastní linku CS. S deaktivovaným CS (vysoká úroveň) periferie zcela ignoruje SCK a MOSI a ponechává MISO ve stavu vysoké impedance, aby nebojovala s ostatními zařízeními o linku.
Řadič aktivuje vždy přesně jedno CS, provede transakci a deaktivuje CS, čímž uvolní sběrnici.
Mikrokontrolér s jediným hardwarovým blokem SPI může komunikovat s tolika periferiemi, kolik má volných pinů GPIO k dispozici pro linky CS – na samotné sběrnici není žádné adresování.
3.21.4. Silné a slabé stránky¶
Silné i slabé stránky SPI plynou z jeho návrhu:
Rychlé. Na krátkých stopách s jednoduchým převodem úrovní lze dosáhnout desítek megahertzů. Čtečky SD karet a SPI displeje toho využívají.
Jednoduché na úrovni vodičů. Žádné adresování, žádná potvrzování, žádné speciální podmínky start/stop – jen bity na vodičích synchronizované s hodinami.
Náročné na piny. Tři sdílené linky plus jedno CS na periferii. Deska s pěti zařízeními SPI používá osm pinů (tři + pět).
Krátký dosah. SPI předpokládá čisté, rychlé hrany, což znamená krátké stopy na stejné desce. Pro delší spoje je vhodnější I2C nebo některá z rámcovaných sběrnic.