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:
COPI – Controller Out, Peripheral In; tidligere kaldet MOSI
CIPO – Controller In, Peripheral Out; tidligere kaldet MISO
SCK – clock fra controlleren
CS – Chip Select, som vælger den aktive peripheral
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
SPI bruger typisk fire signaler: COPI/MOSI, CIPO/MISO, SCK og CS.
COPI/MOSI sender data fra controller til peripheral.
CIPO/MISO sender data fra peripheral til controller.
SCK er clock-signalet, og CS vælger den aktive peripheral.
Hvorfor bruge SPI?
Højere hastighed end I2C i mange tilfælde
God til kort-distance højhastighedsdata
Passende til SD-kort, visse displays og mere avancerede sensorer
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
Uno har indbyggede SPI-pins, som typisk er digital 11, 12 og 13.
Pin 10 bruges ofte som chip select eller CS, når der er flere enheder.
SPI er ofte lidt mere kompliceret end I2C, fordi flere pins og styringssignaler er involveret.
Fordele og ulemper
Fordel: hurtig og effektiv til mange typer moduler
Fordel: flere enheder kan deles på samme bus
Ulempe: kræver flere pins end I2C
Ulempe: hver enhed skal normalt have sin egen CS-pin
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.
De tre busledninger deles; CS1, CS2 og CS3 er separate, så kun den valgte peripheral svarer.
3 fælles signaler: COPI, CIPO og SCK
1 separat CS-ledning pr. peripheral
Fælles GND og passende forsyning
CS er normalt lav for aktiv og høj for inaktiv enhed
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: SCK er lav i hvile, data skifter typisk på den faldende kant og samples på den stigende kant. Kontroller altid peripheralens datablad.