Serial Peripheral Interface

Serial Peripheral Interface (SPI) is een synchrone seriële data link tussen ten minste 2 mediums. Er is altijd sprake van 1 master en 1 slave. De communicatie tussen de Master en de Slave gebeurt te allen tijde in full duplex. De start van de communicatie gebeurt door de master chip. Het is mogelijk om meerdere slave’s te hebben maar ze moeten dan ieder een aparte chip select hebben. Er zijn altijd 4 poorten voor communicatie nodig, daarom spreken we over een four-wire seriële bus.
Benaming
- SCLK : seriële clock: wordt geleverd door de master.
- MOSI : Master output Slave input: op deze lijn wordt de data verzonden die de output van de master en de input van de slave is.
- MISO: Master input slave output: de data van de slave wordt hierover naar de master gestuurd.
- SS: Slave select: Deze lijn wordt actief laag aangestuurd. De lijn voor de geselecteerde slave zal laag zijn. Wanneer de communicatie met de slave gedaan is zal de lijn een logische 1 krijgen.
Configuratie
Meestal heeft iedere slave een eigen slave select-lijn, maar in sommige gevallen kunnen verschillende slaves in een keten (daisy-chain) zijn opgenomen, waarbij de MISO-poort van iedere slave is verbonden met de MOSI-poort van de eerstvolgende slave in de keten. De MISO-poort van de laatste slave in de keten is verbonden met de MISO-poort van de master. Alle Slave select-poorten in de keten zijn met elkaar verbonden. Deze configuratie maakt individuele adressering overbodig, maar gaat ten koste van de datasnelheid.
Start communicatie
De communicatie start met het selecteren van een juiste werk snelheid of anders verwoord het selecteren van een kloksnelheid. Deze snelheid kan behoorlijk variëren van 1 MHz tot 100 MHz. De snelheid moet binnen het bereik van de master en de slave liggen. Het is mogelijk dat de master tegen grotere snelheid kan werken dan de slave maar het omgekeerde kan ook.
Vervolgens zal op de juiste slave select lijn een logische 0 gestuurd worden. Als er maar 1 chip (slave) is kan men deze lijn permanent op 0 houden. Het is mogelijk dat de chip pas werkt wanneer hij een edge (van hoog naar laag) detecteert. In dit geval mogen we de lijn niet op een logische 0 houden. Deze slave select hangt zeer nauw samen met het sturen van de klokpulsen. Sommige chips hebben een wachtperiode nodig vooraleer je de klokpulsen naar de slave mag sturen zoals een dac of adc. Vervolgens zal er per klok cyclus een volledig duplex signaal doorgestuurd worden. Namelijk zowel de master als de slave zullen een bit doorsturen. De master zal over de MOSI lijn sturen en de slave zal van deze lijn aflezen. Het omgekeerde zal op de MISO lijn gebeuren. De slave zal data sturen en de master zal van deze lijn aflezen. In vele gevallen wordt er gebruik gemaakt van shift registers. Meestal is de register grootte 8 bits en wordt de least significant bit eerst gestuurd maar dit is niet altijd het geval. Bij de MS5607-02BA01 Micro Altimeter Module, with LCP cap wordt een register van 24 bits gebruikt en de most significant bit wordt als eerste gestuurd. Wanneer het complete register is doorgestuurd wordt de data verwerkt. Dit kan inhouden dat de data weggeschreven wordt naar het geheugen. Wanneer er meer data verstuurd moet worden zal de data ingeladen worden en beginnen we weer vanaf het begin.
Voordelen
- Full duplex
- Snellere communicatie dan bijvoorbeeld de I²C-bus
- Geen limiet aan woord grootte dat doorgestuurd moet worden
- Eenvoudige hardware
- geen behoefte aan adressering
- geen oscillator voor slave apart
- laag energieverbruik
- geen transceivers nodig
- maar 4 pinnen nodig
- 1 pin per slave extra boven 1
- Kan zeer hoge kloksnelheden aan
Nadelen
- Meer pinnen dan I²C nodig
- Geen controle door de slave (master kan klok vertragen slave niet)
- Geen controle of er wel iets verbonden is
- Maar 1 master maximaal
- Geen error checking
- Gevoelig voor ruis