====== SPI ======
{{tag>busz spi}}
en: Serial Peripheral Interface
A Serial Peripheral Interface busz (SPI) egy szinkron soros kommunikációs interfész specifikáció, amelyet rövid távú adatátvitelre ([[hu:comm:start#microlan|MicroLAN]]) használnak, elsősorban beágyazott rendszerekben. A felületet 1980-as évek végén fejlesztette ki a Motorola és az de facto szabvánnyá vált. Tipikus SPI alkalmazások közé tartozik az SD kártyákkal és a folyadékkristályos kijelzőkkel folytatott kommunikáció.
Az SPI eszközök [[hu:comm:start#duplex|full-duplex]] módban kommunikálnak [[hu:comm:comdict#master-slave|master-slave]] architektúrán keresztül. A hálozaton egy master tartózkodhat csak. Több slave eszköz esetén az egyes egységek a slave-select (SS) funkción keresztül érhetők el.
Néha az SPI-t négyvezetékes soros busznak is nevezik/jellemzik.
A busz sebessége az eredeti specifikáció szerint **100 kbps** volt, ez emelkedett az 1998-as specifikációval **3,4 Mbps**-re.
A busz maximális távolsága nagyjából 8 m.
===== Az SPI lehetséges portjai =====
* SCLK: Soros óra (master kimenet).
* MOSI: Master Output Slave Input, vagy Master Out Slave In
* MISO: Master Input Slave kimenet, vagy Master In Slave Out
* SDIO: Soros adat I/O (kétirányú I / O)
* SS: Slave Select (master kimenet)
===== SPI hálózatkonfiguráció =====
Az SPI hálózat alapvelően két struktúra szerint épülhet fel:
=== Független slave konfiguráció ===
{{:wiki:comm:spi_conf_1.png|Független slave konfiguráció}}
Ebben a struktúrában a master-nek annyi kiválasztó SS porttal kell rendelkeznie, ahány slave található a hálózatban. Ezek közül mindig csak a kiválasztott slave-vel folytat kétirányú kommunikációt. Mivel a slave-ek MISO kimenetei össze vanna kötve, azoknak három áramszinttel kell rendelkezniük: alacsony, magas, magas impedancia.
=== Daisy chain konfiguráció ===
{{:wiki:comm:spi_conf_2.png|Daisy chain konfiguráció}}
Ebben az esetben a master által kiadott MOSI jelsor először az első slave MOSI-jára kerül, majd onnan a MISO kimeneten keresztül jut el a következő slave MOSI-jára, és így tovább.
===== Az SPI kommunikáció =====
{{ :wiki:comm:spi_conf_0.png|SPI kommunikáció}}
Az SPI-ben mindig a master kezdeményezi a kommunikációt azzal, hogy a kiválasztott slave felé az SS jel állapotát magasról alacsonyra váltja. Ez után a master által kiadott órajellel a forgalmazás mindkét csatornán egyidejűleg történik, az adatátvitelre alkalmazott regiszterek szinkronban kerülnek feltöltésre, általában a legmagasabb helyiértékekkel kezdve.
A regiszterek feltötése után azokat tárolja mindkét egység, és ismétli a regisztertöltést az átvitel végéig. A regiszterek leggyakrabban 8 bitesek, de előfordulhat 16 / 12 bites változatuk is.
Az átvitel végeztével a master leállítja az SLCK órajelet és az SS kiválasztót ismét magas állapotba teszi.
===== Óra polaritás =====
Az órajel kezdő polaritása (CPOL) lehet felfutóél vezérelt (CPHA=0) és lefutóél vezérelt (CPHA=1) is, úgy, mint ahogy ez a lenti képen követhető:
{{:wiki:comm:spi_clock_pol.png|Óra polaritás}}
===== Mód =====
Az SPI-ben négy kommunikációs mód áll rendelkezésre (MODE 0, 1, 2, 3), melyek alapvetően az SCLK élfigyelését határozzák meg:
{{:wiki:comm:spi_mode.jpg|SPI mód}}
===== SPI / Arduino =====
**spi.h**
#ifndef _SPI_H_
#define _SPI_H_
#include
extern void spi_init();
extern void spi_transfer_sync (uint8_t * dataout, uint8_t * datain, uint8_t len);
extern void spi_transmit_sync (uint8_t * dataout, uint8_t len);
extern uint8_t spi_fast_shift (uint8_t data);
**spi.c**
#include "spi.h"
#include
#include
#define PORT_SPI PORTB
#define DDR_SPI DDRB
#define DD_MISO DDB4
#define DD_MOSI DDB3
#define DD_SS DDB2
#define DD_SCK DDB5
void spi_init()
// Initialize pins for spi communication
{
DDR_SPI &= ~((1<
===== Az SPI alkalmazása =====
[[hu:arduino:start#arduino_spi|Arduino SPI]] \\
[[hu:arduino:comm_example#arduino_spi_com|Arduino SPI kommunikáció]] \\
===== Források =====
https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus \\