SPI

SPI står for Serial Peripheral Interface. Det er en hurtig seriel bus, der ofte bruges til sensorer, displays, flashhukommelse og andre moduler, hvor man gerne vil have højere datarater end I2C tilbyder.

Den simple forbindelse

En enkel SPI-forbindelse mellem en controller og én peripheral bruger normalt fire signaler:

Simpel SPI-forbindelse mellem en controller og en peripheral med COPI, CIPO, SCK og CS
SPI har typisk 4 signalledninger mellem controller og én peripheral. Derudover skal enhederne have fælles GND og passende forsyning.

Arduino-dokumentationen bruger de nyere betegnelser controller/peripheral og COPI/CIPO. Mange datablad og biblioteker bruger stadig master/slave og MOSI/MISO, så begge navnesæt er vist her.

Hvad SPI typisk bruger

Hvorfor bruge SPI?

Hastighed i byte

SPI flytter typisk én bit for hvert clockslag. Derfor svarer en clock på 1 MHz til højst ca. 125 kB/s i hver retning; 8 MHz svarer til ca. 1 MB/s i hver retning. SPI er fuld-duplex, så afsender og modtager kan overføre samtidigt.

Det er en øvre beregning uden pauser. Den tilsluttede enheds datablad bestemmer den maksimale SPI-clock; chip-select-skift, kommandoer og softwarebehandling sænker nyttedata-raten.

På Arduino Uno

Fordele og ulemper

Flere peripherals på samme bus

Flere SPI-enheder kan dele COPI, CIPO og SCK. Hver peripheral får normalt sin egen CS-ledning, så controlleren kan aktivere præcis én enhed ad gangen.

SPI-bus med en controller og tre peripherals, der deler COPI, CIPO og SCK, men har hver sin CS
De tre busledninger deles; CS1, CS2 og CS3 er separate, så kun den valgte peripheral svarer.

Timing og SPI-modes

SPI har ikke én fast timingform. En peripheral skal bruge den rigtige kombination af clock polarity og clock phase, ofte angivet som SPI mode 0, 1, 2 eller 3. Datasheetet for den konkrete peripheral bestemmer, på hvilken clockkant data skifter og samples.

Forenklet SPI mode 0-tidslinje med CS, SCK, COPI og CIPO
Forenklet SPI mode 0: SCK er lav i hvile, data skifter typisk på den faldende kant og samples på den stigende kant. Kontroller altid peripheralens datablad.

Kilder