SPI (Serial Peripherial Interface)

**SPI** **Busa** (ingelesez, ***S**erial **P**eripheral **I**nterface*) komunikazioen estandar bat da, batez ere zirkuitu integratuetan erabiltzen dena. Serie-periferikoen edo SPI busaren interfaze-busa estandar bat da, erloju batek erregulatutako serie-biten fluxua onartzen duen ia edozein gailu elektroniko digital kontrolatzeko (komunikazio sinkronoa).
thumb|307x307px|SPI Busa: master bat eta slave bat
thumb|310x310px|SPI Busa: master bat eta hiru slave
Erloju-linea bat, sarrera-datu bat, irteerako datu bat eta *chip select* pin bat ditu, norberak komunikatu nahi duen gailuaren eragiketa konektatzen edo deskonektatzen duena. Horrela, estandar honek erloju-lineak multiplexatzeko aukera ematen du.

Sistema digital askok konexio azkarra behar dute periferikoekin. Serieko bus baten abantailak dira eroale kopurua, pinak eta zirkuitu integratuaren tamaina minimizatzen dituela. Horrek elektronika fabrikatzeko, muntatzeko eta probatzeko kostua murrizten du. Serie-periferikoen bus bat aukerarik malguena da serie-periferiko mota desberdinak daudenean. Hardwarea *data in*, *data out*, *chip select* eta erloju-seinaleetan oinarritzen da, kontrolatu behar den zirkuitu integratu bakoitzerako. Ia edozein gailu-digital kontrola daiteke seinale konbinazio honekin. Gailuak aurreikusi daitekeen forma kopuruan bereizten dira. Batzuek erloju-pultsua igotzen denean irakurtzen dute datua, beste batzuek erloju-pultsua jaisten denean. Batzuek erlojuaren igoera-hegalean irakurtzen dute, eta beste batzuek jaitsiera-hegalean. Idaztea ia beti erlojuaren mugimendu-norabidearen kontrako norabidean egiten da. Gailu batzuek bi erloju dituzte, bat datuak atzitzeko edo erakusteko, eta bestea barne-gailurako.

## Operazioa 
SPI protokolo sinkronoa da. Sinkronizazioa eta datu-transmisioa 4 seinale bidez egiten da:

* **SCLK** (*Clock*): Sinkronizazioa markatzen duen pultsua da. Erloju honen pultsu bakoitzarekin, bit bat irakurtzen edo bidaltzen da. TAKT ere esaten zaio (alemanez).
* **MOSI** (*Master Output Slave Input*): Masterreko datuen irteera eta *Esklaboaren* datuen sarrera. SIMO ere esaten zaio.
* **MISO** (*Master Input Slave Output*): *Esklaboaren* datuen irteera eta Masterrerako datuen sarrera. SOMI ere esaten zaio.
* **SS/Select**: *Esklabo* bat aukeratzeko erabiltzen da, edo Masterrak *Esklaboari* aktiba dezala esateko. SSTE ere esaten zaio.

Bit-katea modu sinkronoan bidaltzen da erlojuaren pultsuekin; hau da, pultsu bakoitzarekin, Masterrak bit bat bidaltzen du. Transmisioa hasteko Masterrak SSTE edo SS/Select seinalea zerora jaisten du, honekin *Esklaboa* aktibatzen da eta transmisioa hasten da, erloju-pultsu batekin lehenengo bita irakurtzen den aldi berean. Kontuan izan behar da erloju-pultsuak programatuta egon daitezkeela bit transmisioa 4 modu desberdinetan egiteko moduan. Horri polaritatea eta transmisio-fasea esaten zaio:

# Igotzeko hegala atzerapenik gabe.
# Igotzeko hegala atzerapenarekin.
# Hegala atzerapenik gabe jaisten denean.
# Hegala atzerapenarekin jaisten denean.

## Abantailak eta desabantailak 
### Abantailak 
* Full Duplex komunikazioa.
* I²C edo SMBus-ekin baino transmisio-abiadura handiagoa.
* Transmititutako biten gaineko erabateko kontrola izateko protokolo malgua.
** Ez dago 8 biteko blokeen transferentziara mugatuta.
** Bit-bilberen tamaina, esanahia eta helburua hautatzea.
* Hardwarea ezartzeko erraza da.
** I²C edo SMBus baino energia gutxiago kontsumitzen du zirkuitu gutxiago dituelako (pull-up erresistentziak barne), eta zirkuitu horiek sinpleagoak dira.
** Ez da arbitrajerik edo akatsen aurrean erantzuteko mekanismorik behar.
** Gailuaren *bezeroek* zerbitzariak bidaltzen duen erlojua erabiltzen dute; beraz, ez dute berezko erlojua behar.
** Ez da nahitaezkoa transzeptore bat (igorlea eta hartzailea) inplementatzea; konektatutako gailu bat konfigura daiteke, bidaltzeko bakarrik, jasotzeko bakarrik edo biak batera egiteko.
* Txip/konektore bakoitzean, interfaze paralelo baliokide batek baino askoz terminal gutxiago erabiltzen ditu.
* Asko jota, *bezero* bakoitzarentzako seinale espezifiko bakarra (SS seinalea), gainerako seinaleak partekatu egin daitezke.

### Desabantailak 
* I²C baino txip gehiago kontsumitzen ditu, baita 3 hariko aldaeran ere.
* Helbideratzea linea espezifikoen bidez egiten da (bandatik kanpoko seinalizazioa), I²Cn ez bezala, txip bakoitza 7 biteko helbide baten bidez hautatzen da, eta busaren linea berberetatik bidaltzen da.
* Ez dago hardware bidezko fluxu-kontrolik.
* Ez dago onespen-seinalerik. Baliteke *zerbitzaria* informazioa bidaltzen aritzea *bezerorik* konektatu gabe, eta hau ez litzateke ezertaz konturatuko.
* Ez du erraz uzten *zerbitzari* bat baino gehiago busera konektatuta izatea.
* Distantzia laburretan bakarrik dabil, adibidez, RS-232, RS-485 edo CAN BUSean ez bezala.

## Inplementazioa 
Fabrikatzaile batzuen SPI busaren inplementazio partikular batzuk zerrendatzen dira jarraian:

* SPI ATmega8n

## Ikus, gainera 
* Datu-Busa
* I²C

## Kanpo estekak 
* Introduction to Serial Peripheral Interface embedded.com-eko artikulua
* Serial busen informazioari buruzko webgune ofiziala
* SPI Introducción diagramekin
* Serial Flash fabrikatzaileen eta SPI ereduen buruzko informazioa
* SPI - PICmicro Serial Peripheral Interface Microchip enpresaren tutoriala 
* OpenCores Implementación Open Source de SPI  Verilogen idatzita; simpler MC68HC11 version