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á |
|---|---|
| SCLK | hodiny, generuje je řídicí strana |
| MOSI | data od řídicí strany k podřízené |
| MISO | data zpátky |
| CS / SS | vý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žim | CPOL | CPHA | vzorkuje se na |
|---|---|---|---|
| 0 | 0 | 0 | náběžné hraně |
| 1 | 0 | 1 | sestupné hraně |
| 2 | 1 | 0 | sestupné hraně |
| 3 | 1 | 1 | ná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.