SPI (inglSerial Peripheral Interface)siin onsünkroonse järjestiksuhtluse liidese standard, mida kasutatakse enamasti lühidistantsiliseks suhtluseks ning mis leiab sageli kasutustmanussüsteemides. Standardi töötas väljaMotorola[1]. SPI võimaldab seadmete vaheltäisdupleks režiimisülem-alluv mudeliga suhtlust[2]. Sageli küündivad SPI suhtluskiirused kümnetesse megahertsidesse[1].
SPI-d võib kutsudaneljajuhtmeliseks järjestiksiiniks. Seejuures tuleb SPI-d eristadaSSI protokollist, mis on samuti neljajuhtmeline järjestiksiin, kuid rakendabdiferentsiaalset signaaliedastustsimpleks režiimis.
SPI liidese standard näeb ette signaale[2]:
Eelpool nimetatud signaalide nimetused on kõige populaarsemad, kuid levinud on ka teistsugused samatähenduslikud signaalide nimetused:
SPI ülem-alluv suhtlusmudelis võib alluvseadmeid olla mitu – ülemseade (sagelimikrokontroller) saab SS signaalidega valida, millise alluvaga suhtlust toimub. Juhul kui kasutusel on vaid üks alluvseade, võib SS signaali jäädavaltmadalaks tõmmata, kui alluvseade seda lubab – mõnel seadmel algatab SS signaali frondimuutus mingeid tegevusi. Ülema ja alluva vahelise SPI suhtluse toimimiseks, peab nende seadmete SPI konfiguratsioon olema vastastikku sobituv.[3]
Alluvseadmel on spetsifitseeritud, mis polaarsusega taktsignaali kasutatakse – kas signaal on vaikeolekus, kui taktsignaal on loogiline kõrge või madal. Lisaks on tarvis spetsifitseerida faas – kas andmeid loetakse taktsignaali esimesel või teisel frondil. Levinud tähised nendele sätetele on CPOL ja CPHA.[2]
CPOL (ingl Clock Polarity) määrab taktsignaali polaarsuse[2]:
SPI taktsignaali polaarsust saab vajadusel vahetadainverteriga.
CPHA (ingl Clock Phase) määrab taktsignaali faasi ehk konfigureerib MISO ja MOSI signaalide andmebittide ajastuse SCK signaali suhtes[2]:
Enamasti hoitakse MISO ja MOSI signaale stabiilsena kogu taktsignaali pooltsükli aja (kuni järgmise taktsignaali frondini) – see annab seadmetele suurema ajaakna andmete lugemiseks.[2]
SPI režiimideks nimetatakse polaarsuse ja faasi erinevaid kombinatsioone. CPOL ja CHPA vaadeldakse kuibinaararvu bitte – CPOL määrab režiimi numbrikõrgema biti ja CHPAmadalama biti.[4]
Mode | CPOL | CPHA |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 1 | 1 |
Režiimide nimetamiseks kasutatakse kaennikuid (CPOL, CHPA). Näiteks ennik (0, 1) tähendab CPOL = 0 ja CHPA = 1.[4]
Lisaks polaarsuse ja faasi seadistamisele tuleb ülemseadmes valida alluvseadmele sobiv taktsignaali sagedus (SPI puhul sageli kuni mitu MHz). Suhtluse algatamiseks tõmbab ülemseade SS signaali loogiliseks madalaks. Mõni seade võib pärast SS langevat fronti vajada teatud ooteaega.[3]
SPI andmevahetus aluseks on tüüpiliselt kaks 8-bitist (või rohkemabitilist) nihkeregistrit – üks ülem- teine alluvseadmes. Nihkeregistrid on ühendatud ringipidi – ülemseadme nihkeregistri väljund on ühendatud MOSI signaaliga alluvseadme registri sisendisse ning alluvseadme nihkeregistri väljund MISO signaaliga ülema nihkeregistri sisendisse.[2]
SPI täisdupleks suhtlus väljendub selles, et iga taktiga nihutatakse üks bit ülemalt alluvale ja vastupidi – tavaliselt välja saadetav bitt on nihkeregistri kõrgeim bitt ning loetud bitt pannakse nihkeregistri madalaimaks bitiks. Sama kehtib ka juhul, kui soovitakse saata andmeid ühes suunas – siis võib vastu võtta sooviv seade teisele tavaliselt nullbitte saata.[2]
Andmeid vahetatakse tavaliselt baidi kaupa seejuures järjestikku võidakse vahetada palju baite. Andmevahetuse lõppedes peatab ülemseade taktsignaali ning tavaliselt vabastab SS signaali tõstes selle loogiliseks kõrgeks. Levinud andmevahetuse andmeühik on ka 16-bittipuuteekraanide kontrollerite puhul ja 12-bittiADC-de puhul.[3]
SPI sõltumatute alluvatega suhtluseks on ülemseadmel iga alluvseadme jaoks oma SS signaal. Kui alluvseade ei ole parajasti aktiivne (vastav SS signaal on kõrge), peab selle alluvseadme MISO signaal olema kõrgeimpedantsilises olekus, sest kõigi alluvseadmete MISO signaalid on kokku ühendatud.[3]
Mõned SPI seadmed võimaldavadpärgvõrk (ingldaisy chain) ühendamist. Sel puhul on esimese seadme MISO ühendatud teise MOSI jne. Seadmetes paiknevaid nihkeregistreid mööda saab ülem alluvatele andmed saata ning nihkeregistrite ahelat mööda jõuavad alluvate andmed ka ülemale. Pärgvõrk konfiguratsiooni eeliseks on ülemseadme SS signaalide kokkuhoid.[3]
Kuigi paljudes seadmetes (mikrokontrollerites jasüsteemikiipides) on riistvaraline SPI tugi, võib SPI suhtluse implementeerida ka programmiliselt bitthaaval (inglbit-banging) andmeid vahetades[5]. Allpool onC keeles kirjutatud näide SPI koodist ülemseadmes, mille puhul SPI konfiguratsioon on CPOL = 0 ja CPHA = 0 ning andmeid vahetatakse baidi kaupa.
CPOL = 0 puhul peab SCK olema madal, enne SS signaali aktiveerimist. SS signaaliga tuleb aktiveerida alluvseade (tavaliselt madalaks tõmmata) ja suhtluse lõppedes vabastada (kõrgeks tõsta). Enamasti lubavad SPI seadmed vahetada SS signaali aktiveeritud oleku ajal minu baiti, seega antud funktsiooni võib välja kutsuda mitu korda.
/* * SPI bitthaaval baidi saatmine ja lugemine. * * CHPA = 0 ja CPOL = 0: * - sisenevad bitid loetakse tõusval SCK frondil. * - väljuvad bitid kirjutatakse langeval SCK frondil. * * Tagastab loetud baidi. */uint8_tSPI_transfer_byte(uint8_tbyte_out){uint8_tbyte_in=0;uint8_tbit;for(bit=0x80;bit;bit>>=1){/* Kirjuta MOSI liinile bit */write_MOSI((byte_out&bit)?HIGH:LOW);/* Viivitus - SCK madal */delay(SPI_SCLK_LOW_TIME);/* Tõsta SCK signaal kõrgeks */write_SCLK(HIGH);/* Loe ja jäädvusta MISO liinilt bit */if(read_MISO()==HIGH)byte_in|=bit;/* Viivitus - SCK kõrge */delay(SPI_SCLK_HIGH_TIME);/* Tõmba SCK madalaks */write_SCLK(LOW);}returnbyte_in;}
SPI leiab laialdast kasutustmanussüsteemides. Paljudes mikrokontrollerites on sisse ehitatud SPI välisseade, mis tavaliselt võimaldab konfigureerimist nii ülem- kui ka alluvseadmeks. SPI suhtlust kasutavad näiteks paljud ADC-d,andurid,puuteekraanid,LCD-kuvar,välkmälud,EEPORM-id jaSD-mälukaardid.[3]
SPI liides onde facto standard, milles ei spetsifitseerita suhtlusprotokolli. Formaalse standardi puudumise tõttu leidub SPI seadmeid, mis on mõeldud vaid ühes suunas andmeid saatma ja seadmeid, mis kasutavad täiendavaid signaale lisaks eelnimetatud neljale. Kasutatakse erinevaid andmeühiku suurus.[3]
Mõned SPI-ga sarnased või sellel põhinevad liidesed:
Arvutisiinide standardid | |||||||
---|---|---|---|---|---|---|---|
Üldine | |||||||
Standardid | SMBus · LPC · VME · VXI · VXS · PCI · PXI · CoreConnect · InfiniBand · PCI-X · PCI Express · Intel QuickPath Interconnect · HyperTransport | ||||||
Sülearvutid | |||||||
Salvestusseadmed | |||||||
Välisseadmed | MIDI · Jadavärat/RS-232 · DMX512-A · IEEE-488 (GPIB) · EIA/RS-422 · IEEE-1284 (rööpport) · UNI/O · 1-Wire · I²C · SPI · EIA/RS-485 · Paralleel-SCSI · Profibus · USB (3.0) · FireWire (1394) · Fibre Channel · Camera Link · Väline PCI Express x16 · Thunderbolt | ||||||
Vanemad siinid |
|