LinkLab linka je dohoda, ne drát

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

SPI: hodiny na drátě a čtyři režimy

Nejjednodušší ze sběrnic v téhle kapitole, protože se u ní nemuselo nic vymýšlet: hodiny se prostě přidají jako čtvrtý vodič. Tím zmizí celý problém z kapitoly 4 — obě strany odměřují čas podle stejné hrany.

vodičco dělá
SCLKhodiny, generuje je řídicí strana
MOSIdata od řídicí strany k podřízené
MISOdata zpátky
CS / SSvýběr zařízení — a zároveň „teď začíná zpráva“

Vysílá a přijímá se zároveň: každou hranou hodin jde jeden bit tam a jeden zpátky. Není to volitelné — je to posuvný registr propojený do kruhu, a když se nemá co poslat, posílají se nuly.

Čtyři režimy, a proč je to past

Dva parametry: CPOL říká, jestli hodiny v klidu drží nízkou nebo vysokou úroveň, a CPHA, jestli se data vzorkují na první, nebo druhé hraně. To dává čtyři kombinace, kterým se říká režim 0 až 3.

režimCPOLCPHAvzorkuje se na
000náběžné hraně
101sestupné hraně
210sestupné hraně
311náběžné hraně

Špatný režim se projeví posunem o jeden bit, a to je příznak, který se snadno splete s něčím jiným: přijde hodnota, která vypadá jako polovina té správné, nebo jako dvojnásobek. Kdo hledá chybu v přepočtu čidla, může u toho strávit hodiny. Nejrychlejší kontrola je poslat příkaz „přečti identifikátor“ — ten má v katalogovém listu známou hodnotu.

Co SPI nemá

  • Žádnou kontrolu. Ani paritu. Když rušení změní bit, dostanete jiné číslo a nikde se nic nedozvíte. Lepší čidla proto nesou kontrolní součet uvnitř zprávy.
  • Žádné potvrzení. Řídicí strana nepozná, jestli tam vůbec něco je. Odpojené čidlo obvykle vrací samé nuly nebo samé jedničky — a to je hodnota, kterou musí program poznat sám, protože sběrnice mlčí.
  • Žádné adresy. Každé zařízení potřebuje vlastní vodič CS, takže deset čidel znamená deset vývodů navíc.

Za to je rychlé: desítky MHz jsou běžné, a u převodníků se přes SPI přenáší celý datový tok. Je to sběrnice pro krátké spoje uvnitř desky, kde je rušení málo a rychlost všechno.