Spi vakujelzések normál működés közben. Mi az SPI interfész

Az SPI (Serial Peripheral Interface) egy soros, szinkron, full-duplex adatátviteli szabvány, amelyet a Motorola fejlesztett ki a mikrokontrollerek és perifériák egyszerű és olcsó interfészének biztosítására. Az SPI-t néha négyvezetékes interfésznek is nevezik.Az SPI egy szinkron protokoll, amelyben minden átvitelt a gazdagép (processzor) által generált közös órajelhez szinkronizálnak. A vevő periféria (slave) szinkronizálja a bitsorozat vételét az órajellel. Egy fő IC egyetlen soros periféria interfészéhez több IC csatlakoztatható. A master kiválasztja az átvitelre szánt slave-et a szolga chipen lévő chipválasztó jel aktiválásával. A processzor által nem kiválasztott perifériák nem vesznek részt az SPI átvitelben.
Az SPI négy digitális jelet használ:

  • MOSI vagy SI - master kimenet, slave bemenet (angolul Master Out Slave In). Adatok átvitelére szolgál a masterről a slave-re;
  • MISO vagy SO - master bemenet, slave kimenet (angol Master In Slave Out). Adatok átvitelére szolgál a slave-ről a masterre.
  • SCK vagy SCLK - soros órajel (eng. Serial CLocK). A slave eszközök órajelének továbbítására szolgál.
  • CS vagy SS - chip kiválasztása, slave kiválasztása (angol Chip Select, Slave Select) A chip kiválasztása általában alacsony logikai szint alapján történik.

A polaritás és az órafázis kombinációktól függően négy SPI üzemmód létezik.

SPI mód időzítési diagram
SPI0 mód

SPI1 mód
Az aktív pulzusszint magas.

SPI2 mód

Először pattintás, majd váltás.

SPI3 mód
Az aktív impulzusszint alacsony.
Először műszak, aztán csattanó.

A táblázat elfogadja:

  • MSB - legjelentősebb bit;
  • Az LSB a legkisebb jelentőségű bit.

A masternek igazodnia kell a slave által használt üzemmódhoz.
Az SPI interfészen keresztüli adatcsere során a mikrokontroller masterként (Master mód) vagy slaveként (Slave mód) működhet. Ebben az esetben a felhasználó a következő paramétereket állíthatja be:

  • üzemmód a táblázat szerint;
  • átviteli sebesség;
  • átviteli formátum (a legkisebb jelentőségű bittől a legjelentősebbig vagy fordítva).

Két mikrokontroller csatlakoztatása a master - slave szerkezet szerint az SPI interfészen keresztül a következő séma szerint történik.

A mester mikrokontroller SCK, CS érintkezői kimenetek, a szolga mikrokontroller bemenetei.

Az adatátvitel az alábbiak szerint történik. A mester mikrokontroller SPI adatregiszterébe írva elindul az SPI modul órajel generátora, és elkezdődik az adatok bitenkénti kibocsátása a MOSI pin és ennek megfelelően a slave MOSI pin felé. mikrokontroller. Az aktuális bájt utolsó bitjének kiadása után az órajel-generátor leáll, amikor az "Adás vége" jelzőt egyidejűleg "1"-re állítja. Ha az SPI-modulból származó megszakítások támogatottak és engedélyezettek, megszakítási kérés jön létre. Ezt követően a mester mikrokontroller megkezdheti a következő bájt továbbítását, vagy a slave SS bemenetére "1" logikai szintű feszültséget kapcsolva várakozási állapotba helyezheti azt.

A masterről a slave-re történő adatátvitellel egyidejűleg ellentétes irányú átvitel történik, feltéve, hogy a slave SS bemenetén alacsony szintű feszültség van jelen. Így minden műszakciklusban adatcsere történik az eszközök között. Minden ciklus végén a megszakítási jelző "1"-re van állítva mind a mester mikrokontrollerben, mind a slave-ben. A fogadott bájtokat a vételi pufferek tárolják későbbi felhasználás céljából.

Adatok fogadásakor a vett bájtot ki kell olvasni az SPI adatregiszterből, mielőtt a következő bájt utolsó bitje belépne a shift regiszterbe. Ellenkező esetben az első bájt elvész.

Az SS láb az aktív slave kiválasztására szolgál, és mindig egy bemenet Slave módban. Minden alkalommal, amikor az SS érintkezőt a logikai 1-re kapcsolják, az SPI-modul alaphelyzetbe áll. Ha az adatátvitel során ennek a tűnek az állapotváltozása következik be, akkor mind a vétel, mind az adás azonnal leáll, és az elküldött és fogadott bájtok elvesznek.

Ha a mikrokontroller Master módban van, az SS tűn keresztüli adatátvitel irányát a felhasználó határozza meg. Ha egy érintkező kimenetként van konfigurálva, az általános célú érintkezőként működik, és nincs hatással az SPI-modul működésére. Általában ebben az esetben a Slave módban működő mikrokontroller SS tűjének vezérlésére szolgál.

Ha a láb bemenetként van konfigurálva, akkor az SPI-modul megfelelő működéséhez feszültség alá kell helyezni. magas szint. Ha erre a bemenetre bármilyen külső áramkörről alacsony szintű feszültséget kapcsolunk, akkor az SPI-modul a mikrokontroller szolgaként való választásaként érzékeli (ebben az esetben az adatok átvitelre kerülnek rá).

Az SPI-interfész STM32 mikrokontrollerekhez való használatára vonatkozó példát részletesen leírjuk

10 Ohm és 1 MΩ közötti névleges teljesítménnyel);

  • összekötő vezetékek (például itt van egy ilyen jó készlet);
  • személyi számítógép az Arduino IDE fejlesztői környezettel.
  • 1 A sorozat leírása SPI interfész

    SPI – Soros periféria interfész vagy "soros periféria interfész" egy szinkron kommunikációs protokoll a párosításhoz mester eszköz Val vel perifériák(rabszolga). A fő eszköz gyakran egy mikrokontroller. Az eszközök négy vezetéken keresztül kommunikálnak, ezért az SPI-t néha „négy vezetékes interfésznek” is nevezik. Itt vannak a gumik:

    Négy átviteli mód van ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), az óraimpulzusok polaritásának kombinációja miatt (MAGAS vagy LOW szinten dolgozunk), Óra polaritása, CPOL, és az óraimpulzusok fázisa (szinkronizálás az óraimpulzus kezdő- vagy hátsó élén), Órafázis, CPHA.

    Az ábra magyarázza ezt a táblázatot.

    Az SPI interfész számos lehetőséget kínál a slave eszközök csatlakoztatására: függetlenÉs lépcsőzetes. Az SPI-buszhoz való független csatlakozással a mester eszköz minden szolgaeszközhöz külön-külön hozzáfér. A kaszkádcsatlakozásnál a slave eszközök felváltva működnek, mintha kaszkádban lennének.


    Az SPI interfészen keresztül működő csatlakoztató eszközök típusai: független és kaszkád

    2 SPI interfész megvalósítása az Arduino család tábláin

    Az Arduino-ban az SPI interfész buszok meghatározott portokon vannak. Minden táblának megvan a saját tűkiosztása. Az egyszerűség kedvéért a következtetéseket megismételjük, és külön oldalon is elhelyezzük. ICSP csatlakozó(A Circuit Serial Programming során egy áramkörbe tartozó eszköz programozása soros protokoll segítségével). Kérjük, vegye figyelembe, hogy az ICSP csatlakozón nincs szolga kiválasztási tű - SS. feltételezhető, hogy az Arduino lesz a hálózat fő eszköze. De ha szükséges, bármely Arduino digitális tűt hozzárendelhet SS-ként.

    Az ábra az Arduino UNO és Nano SPI-buszokkal való érintkezését mutatja.


    3 Könyvtár a munkához SPI interfésszel

    Az Arduino számára egy speciális könyvtárat írtak, amely megvalósítja az SPI protokollt. Így kapcsolódik: a program elején add #include SPI.h.

    Az SPI protokollon való munka megkezdéséhez meg kell adnia a beállításokat, majd inicializálnia kell a protokollt az eljárással SPI.beginTransaction(). Ezt egyetlen kijelentéssel megteheti: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))

    Ez azt jelenti, hogy az SPI protokollt 14 MHz-es frekvencián inicializáljuk, az adatátvitel MSB-ről (legjelentősebb bit) indul, SPI_MODE0 módban.

    Az inicializálás után válassza ki a slave eszközt a megfelelő SS pin állapotba állításával ALACSONY.

    Ezután paranccsal továbbítjuk az adatokat a slave eszközre SPI.transfer().

    Az átadás után visszaadjuk az SS-t az államnak MAGAS.


    A protokollal végzett munka a paranccsal fejeződik be SPI.endTransaction().

    Kívánatos az SPI.beginTransaction() és az SPI.endTransaction() utasítások közötti átvitel végrehajtási idejét minimalizálni, hogy ne legyen átfedés, ha egy másik eszköz különböző beállításokkal próbálja meg inicializálni az adatátvitelt.

    4 Műszaki regiszter csatlakoztatása az Arduinóhoz

    Fontolgat gyakorlati használat SPI interfész. A LED-eket úgy világítjuk meg, hogy egy 8 bites shift regisztert vezetünk az SPI buszon keresztül. Csatlakozzon az Arduino-hoz műszakregiszter 74HC595. A regiszter mind a 8 kimenetéhez egy korlátozó ellenálláson keresztül egy 220 Ohm névleges értékű LED-et csatlakoztatunk. A séma az ábrán látható.


    5 Shift regiszter vezérlő vázlat SPI interfészen keresztül

    Írjunk vázlatot.

    #beleértve const int pinSelect = 8; // regisztráció kiválasztási pin void setup()( SPI.begin(); // az SPI interfész inicializálása pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // slave kiválasztása (regiszter) SPI.transfer(0); // a regiszter tartalmának törlése digitalWrite(pinSelect, HIGH); // átvitel vége Serial.begin(9600); } void loop() ( for (int i=0; i )

    Először is csatlakoztatjuk az SPI könyvtárat, és inicializáljuk az SPI felületet. Határozzuk meg a 8-as érintkezőt SS slave kiválasztási lábként. Törölje a műszakregisztert a "0" érték elküldésével. Inicializálja a soros portot.

    Egy adott LED megvilágításához műszakregiszter, 8 bites számot kell alkalmaznia a bemenetére. Például az első LED világításához a 00000001 bináris számot adjuk meg, a másodikhoz - 00000010, a harmadikhoz - 00000100 stb. Ezek a bináris számok decimális számrendszerre fordítva a következő sorozatot alkotják: 1, 2, 4, 8, 16, 32, 64, 128, és kettő hatványai 0-tól 7-ig.

    Ennek megfelelően a ciklusban hurok() a LED-ek számával 0-ról 7-re számoljuk át. Funkció pow(bázis, kitevő) 2-t emel a hurokszámláló hatványára. A mikrokontrollerek nem működnek túl pontosan a "dupla" típusú számokkal, ezért a kerekítési függvényt használjuk az eredmény egész számmá alakítására. kerek(). És a kapott számot átvisszük a műszakregiszterbe. Az egyértelműség kedvéért a soros port monitor megjeleníti a művelet során kapott értékeket: egység "fut át" a kisüléseken - a LED-ek hullámszerűen világítanak.

    6 "Futóhullám" LED-ekből

    A LED-ek felváltva világítanak, és megfigyeljük a fények futó "hullámát". A LED-ek vezérlése egy shift regiszter segítségével történik, amelyhez SPI interfészen keresztül csatlakoztunk. Ennek eredményeként mindössze 3 Arduino érintkezőt használnak 8 LED vezérlésére. Ha a LED-eket közvetlenül az Arduino digitális portokhoz kötnénk, akkor minden LED-hez külön portot kellene használnunk.

    Tanulmányoztuk az Arduino SPI busszal való működésének legegyszerűbb példáját. Külön cikkben nézzük meg közelebbről több, egymástól független és kaszkád kapcsolattal rendelkező műszakregiszter működését.

    SPI – Serial Peripheral Interface – soros

    periféria interfész

    Az SPI egy soros szinkron adatátviteli szabvány a mikroáramkörök között full duplex módban.

    Ezt az interfészt eredetileg a Motorola fejlesztette ki a mikrokontrollerek és perifériák egyszerű és olcsó interfészének biztosítására, és jelenleg számos gyártó termékében használják.

    Az SPI interfész az I2C-vel együtt az egyik legszélesebb körben használt interfész a chipek csatlakoztatására. A neve a „Serial Peripheral Interface” (angol, SPI-busz) rövidítése.

    SPI busz), amely tükrözi a célját - egy busz külső eszközök csatlakoztatására. Az SPI busz mester-szolga alapon van megszervezve. A busz master általában egy mikrokontroller, de lehet programozható logikai, DSP vezérlő vagy ASIC is. Bus csatlakoztatva a masterhez külső eszközök szolga buszt alkotnak. Szerepüket különféle mikroáramkörök töltik be, pl. tárolóeszközök (EEPROM, Flash-memória, SRAM), valós idejű óra (RTC), ADC/DAC, digitális potenciométerek, speciális vezérlők stb.

    Az SPI interfész fő összetevője egy hagyományos shift regiszter, melynek szinkronizálása és bitfolyam be-/kimeneti jelei alkotják az interfész jeleit. Így az SPI protokollt helyesebben nem adatátviteli protokollnak, hanem két műszakregiszter közötti adatcsere-protokollnak nevezik, amelyek mindegyike egyszerre látja el a vevő és az adó funkcióját.

    1. Elektromos kapcsolat

    BAN BEN eltér a szabványos soros porttól (eng. szabványos soros port ), az SPI egy szinkron interfész, amelyben bármely átvitel szinkronizálva van a master (processzor) által generált közös órajelhez. A vevő periféria (slave) szinkronizálja a bitsorozat vételét az órajellel. Egy fő IC egyetlen soros periféria interfészéhez több IC csatlakoztatható. A master kiválasztja a slave-et az átvitelhez a szolga chipen lévő chipválasztó jel aktiválásával. A processzor által nem kiválasztott perifériák nem vesznek részt

    SPI átvitelben.

    Az SPI négy digitális jelet használ:

    MOSI (Eng. Master Out Slave In) - master kimenet (alternatív megnevezése DO, SDO, DOUT), egy slave eszköz bemenete soros adatvételhez (alternatív megnevezés DI, SDI, DIN). Adatátvitelre szolgál a masterről a slave-re.

    MISO (Eng. Master In Slave Out) - a master eszköz bemenete soros adatvételhez (alternatív jelölése DI, SDI, DIN), a slave eszköz kimenete soros adatátvitelhez (alternatív megnevezése DO, SDO, DOUT). Adatok átvitelére szolgál a slave-ről a masterre.

    SCLK (eng. Serial clock) - soros órajel (alternatív megnevezése DCLOCK, CLK, SCK). A slave eszközök órajelének továbbítására szolgál.

    CS vagy SS - chip kiválasztása, slave kiválasztása

    (angol Chip Select, Slave Select).

    Az SPI-buszhoz háromféle csatlakozás létezik, amelyek mindegyike négy jelet tartalmaz. A legegyszerűbb csatlakozás, amelyben csak két mikroáramkör vesz részt, az 1. ábrán látható.

    Rizs. 1. A legegyszerűbb csatlakozás az SPI buszhoz

    Itt a busz master a MOSI vonalon a saját generált SCLK jelével szinkronban továbbítja az adatokat, a slave pedig a vett órajel bizonyos szélein rögzíti az átvitt adatbiteket. Ezzel egy időben a slave elküldi az adatcsomagját. A bemutatott séma leegyszerűsíthető a MISO sor elhagyásával, ha a használt slave IC nem rendelkezik, vagy nem köteles visszaküldeni az adatokat. Az egyirányú adatátvitel olyan mikroáramkörökben található, mint a DAC-k, digitális potenciométerek, programozható erősítők és meghajtók. Így a slave IC csatlakoztatásának megfontolt lehetőségéhez 3 vagy 4 kommunikációs vonalra van szükség. Ahhoz, hogy a slave IC adatokat tudjon fogadni és továbbítani, az órajel megléte mellett az is szükséges, hogy az SS vonal alacsonyra legyen hajtva. Ellenkező esetben a slave IC inaktív lesz. Ha csak egy külső IC-t használunk, csábító lehet az SS vonal kizárása a slave IC kiválasztó bemenetének kemény beállításával. Egy ilyen megoldás nagyon nem kívánatos, és kudarcokhoz, vagy akár az adatátvitel ellehetetlenüléséhez vezethet, mert. a lapkaválasztó bemenet az IC kezdeti állapotába való visszaállítására szolgál, és néha kezdeményezi az adat első bitjének kimenetét.

    Ha több mikroáramkört kell csatlakoztatni az SPI buszhoz, akkor vagy független (párhuzamos) csatlakozást (2. ábra), vagy kaszkád (soros) csatlakozást (3. ábra) használunk.

    Rizs. 2. Független csatlakozás az SPI buszhoz

    Rizs. 3. Lépcsőzetes SPI buszra

    Az önálló kapcsolódás gyakoribb, mert. bármilyen SPI-kompatibilis chip használatával érhető el. Itt a chipek megválasztásán kívül minden jel párhuzamosan van kapcsolva, és a busz master egyik vagy másik SS jel alacsony állapotba átvitelével beállítja, hogy melyik slave IC-vel cseréljen adatot. Az ilyen kapcsolat fő hátránya, hogy további vonalakra van szükség a szolga mikroáramkörök címezéséhez (a kommunikációs vonalak teljes száma 3 + n, ahol n a szolga mikroáramkörök száma). A kaszkádolás mentes ettől a hiányosságtól, mert innen

    több mikroáramkör alkot egy nagy váltóregisztert. Ehhez az egyik IC adási adatkimenetét a másik vételi adatbemenetéhez kell csatlakoztatni, amint az a 3. ábrán látható. A chipválasztó bemenetek itt párhuzamosan kapcsolódnak, így a kommunikációs vonalak száma 4 marad. A kaszkádolás azonban csak akkor lehetséges, ha annak támogatását a használt chipek dokumentációja előírja. Ennek kiderítéséhez fontos tudni, hogy egy ilyen kapcsolatot angolul "daisy-chaining"-nak hívnak.

    2. Átviteli protokoll

    Az SPI átviteli protokoll rendkívül egyszerű, és valójában megegyezik a shift regiszter logikájával, amely egy eltolási művelet végrehajtásából és ennek megfelelően a szinkronizációs jel bizonyos szélein adatok bitenkénti be- és kimenetéből áll. . Az adatbeállítás az adáskor és a lehívás vételkor mindig a szemközti óraéleken történik. Erre azért van szükség, hogy az adatok a megbízható megállapítást követően lekérésre kerüljenek. Ha figyelembe vesszük, hogy a felfutó vagy lefutó él az első élként működhet az átviteli ciklusban, akkor az SPI interfész logikájára négy lehetőség kínálkozik. Ezeket az opciókat SPI-módoknak nevezzük, és két paraméter írja le őket:

    CPOL - a szinkronizációs jel kezdeti szintje (ha CPOL=0, akkor az átviteli ciklus kezdete előtt és a vége utáni szinkronizációs vonal alacsony szinttel rendelkezik (azaz az első él emelkedik, az utolsó él pedig csökken), egyébként, ha CPOL=1, - magas (azaz az első front esik, az utolsó pedig emelkedik));

    CPHA - szinkronizálási fázis; ez a paraméter határozza meg az adatok beállításának és mintavételezésének sorrendjét (ha CPHA=0, akkor az adatok a szinkronizálási ciklus felfutó élén lesznek mintavételezve, majd a lefutó élen lesznek beállítva az adatok

    adat; ha CPHA=1, akkor az adatok az óraciklus felfutó élén lesznek beállítva, és a lekérés a lefutó élen történik.

    A különböző SPI módokban működő master és slave chipek nem kompatibilisek, ezért fontos tisztázni, hogy a szolga chipek kiválasztása előtt a busz master mely módokat támogatja. A mikrokontrollerekbe integrált SPI hardvermodulok a legtöbb esetben támogatják bármely SPI mód kiválasztását, így bármilyen SPI szolga mikroáramkör csatlakoztatható hozzájuk (csak független csatlakozási lehetőségre vonatkozik). Ezenkívül az SPI-protokoll bármelyik módban könnyen megvalósítható szoftverben.

    Tab. 1. SPI módok

    Ideiglenes

    diagram

    szinkronizálás

    3. Összehasonlítás az I2 C busszal

    Mint már említettük, a mikroáramkörök dokkolásánál a 2-vezetékes nem kevésbé népszerű. soros busz I2 C. Az alábbiakban megtalálja azokat az előnyöket, amelyeket ez vagy az a soros busz nyújt.

    Az SPI busz előnyei

    Az I2C busz előnyei

    A protokoll rendkívüli egyszerűsége

    átvitel a fizikai rétegben

    biztosítja a nagy megbízhatóságot és

    átviteli sebesség. korlátozó

    Az SPI busz sebességét mérik

    Az I2 C busz továbbra is kétvezetékes,

    több tíz megahertz, és ezért azt

    számától függetlenül

    streaminghez ideális

    mikroáramkör csatlakozik hozzá.

    nagy mennyiségű adatot és széles körben

    nagy sebességgel használják

    DAC/ADC, LED meghajtók

    kijelzők és memóriachipek

    Az összes SPI buszvonal

    egyirányú, ami elengedhetetlen

    Multi-master képesség

    leegyszerűsíti a problémamegoldást

    működését a buszra csatlakoztatva

    szintű konverziók és

    több vezető mikroáramkör.

    mikroáramkörök galvanikus leválasztása

    Az I2C protokoll több

    szabványosított, tehát

    A szoftver implementálásának egyszerűsége

    I2C chip felhasználó több

    SPI protokoll.

    védve a problémáktól

    a kiválasztottak összeférhetetlensége

    alkatrészek.

    4. Származtatott és kompatibilis protokollok

    MIKROVEZETÉS.

    A National Semiconductor MICROWIRE protokollja megegyezik a 0 módú SPI protokollal (CPOL = 0, CPHA = 0).

    Maxim 3 vezetékes interfész

    A különbség ennél az interfésznél az, hogy a két egyirányú vonalon keresztüli full-duplex átvitel helyett egy kétirányú DQ vonalon keresztül félduplex átvitelt hajt végre.

    QSPI

    Az SPI-nél magasabb szintű protokoll, amely lehetővé teszi az automatizált adatátvitelt CPU bevonása nélkül.

    Ezen túlmenően az SPI interfész számos speciális interfész felépítésének alapja, pl. JTAG hibakereső interfész és Flash memóriakártya interfészek, beleértve SD és MMC.

    Utasítás

    SPI- Soros periféria interfész vagy "Soros periféria interfész" egy szinkron átviteli protokoll a fő eszköz (Master) és a perifériás eszközök (Slave) összekapcsolására. A fő eszköz gyakran . Az eszközök négy vezetéken keresztül kommunikálnak, ezért az SPI-t néha „négy vezetékes interfésznek” is nevezik. Itt vannak a gumik:
    MOSI (Master Out Slave In)- adatátviteli vonal a mestertől a szolga eszközökig;
    MISO (Master In Slave Out)- átviteli vezeték a slave-től a masterig;
    SCLK (soros óra)- a mester által generált szinkronizálási óra;
    SS (Slave Select)- slave eszköz kiválasztási vonal; ha a vonal "0", a slave eszköz "érti", hogy most hozzáfér.
    Négy adatátviteli mód létezik (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3) az óra polaritás kombinációja miatt (MAGAS vagy LOW szinten dolgozunk), Óra polaritása, CPOL, és az óraimpulzusok fázisa (szinkronizálás az óraimpulzus kezdő- vagy hátsó élén), Órafázis, CPHA.
    Az ábrán két lehetőség látható az SPI protokollt használó eszközök csatlakoztatására: független és lépcsőzetes. Az SPI-buszhoz való független csatlakozással a mester eszköz minden szolgaeszközhöz külön-külön hozzáfér. Kaszkáddal - az eszközök egymás után, lépcsőzetesen működnek.

    Az Arduino-ban az SPI interfész buszok meghatározott portokon vannak. Minden táblának megvan a saját tűkiosztása. A kényelem kedvéért a következtetéseket megkettőzzük, és egy külön ICSP-csatlakozóra is helyezzük (In Circuit Serial Programming, az áramkörben lévő eszköz, soros protokollt használva). Kérjük, vegye figyelembe, hogy az ICSP csatlakozón nincs szolga kiválasztási tű - SS. feltételezhető, hogy az Arduino lesz a hálózat fő eszköze. De ha szükséges, bármelyik Arduino tűt hozzárendelhet SS-ként.
    Az ábra az Arduino UNO és Nano SPI-buszokkal való érintkezését mutatja.

    Az Arduino számára egy speciálisat írtak, amely megvalósítja az SPI protokollt. Így kapcsolódik: a program elején add #include SPI.h
    Az SPI protokollal való munka megkezdéséhez be kell állítania a beállításokat, majd inicializálnia kell a protokollt az SPI.beginTransaction() eljárással. Ezt egyetlen kijelentéssel megteheti: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0)).
    Ez azt jelenti, hogy az SPI protokollt 14 MHz-en inicializáljuk, az adatok továbbítása az MSB-től kezdve (legjelentősebb bit), "0" módban történik.
    Az inicializálás után kiválasztjuk a slave eszközt a megfelelő SS pin LOW állapotba átvitelével.
    Ezután az SPI.transfer () paranccsal továbbítjuk az adatokat a slave eszközre.
    Az átvitel után az SS-t visszaállítjuk a HIGH állapotba.
    A protokollal végzett munka az SPI.endTransaction() paranccsal fejeződik be. Célszerű minimalizálni az SPI.beginTransaction() és SPI.endTransaction() utasítások közötti átvitel végrehajtási idejét, hogy ne legyen átfedés, ha egy másik eszköz különböző beállításokkal próbálja meg inicializálni az adatátvitelt.

    Fontolja meg az SPI interfész gyakorlati alkalmazását. A LED-eket úgy világítjuk meg, hogy egy 8 bites shift regisztert vezetünk az SPI buszon keresztül. Csatlakoztassa a 74HC595 regisztert az Arduinohoz. Mind a 8 kimenethez csatlakoztatunk egy LED-et (egy korlátozó ellenálláson keresztül). A séma az ábrán látható.

    Írjunk vázlatot.
    Először is csatlakoztatjuk az SPI könyvtárat, és inicializáljuk az SPI felületet. Határozzuk meg a 8-as lábat szolga kiválasztási lábként. Törölje a műszakregisztert a "0" érték elküldésével. Inicializálja a soros portot.
    Egy bizonyos LED eltolási regiszter segítségével történő megvilágításához egy 8 bites számot kell alkalmazni a bemenetére. Például az első LED világításához a 00000001 bináris számot adjuk meg, a másodikhoz - 00000010, a harmadikhoz - 00000100 stb. Ezek a bináris számok a decimális számrendszerbe lefordítva a következő sorozatot alkotják: 1, 2, 4, 8, 16, 32, 64, 128, és 0-tól 7-ig terjedő hatványok.
    Ennek megfelelően a loop() ciklusban 0-ról 7-re számolunk újra a LED-ek számával. pow(bázis, kitevő) 2-t emel a hurokszámláló hatványára. A mikrokontrollerek nem működnek túl pontosan a "double" típusú számokkal, ezért a round() függvényt használjuk az eredmény egész számmá alakítására. És a kapott számot átvisszük a műszakregiszterbe. Az egyértelműség kedvéért a soros port monitor megjeleníti a művelet során kapott értékeket: az egység végigfut a számokon - a LED-ek hullámban világítanak.

    Bevezetés

    Az SPI (3-wire) egy népszerű interfész a mikroáramkörök közötti soros adatcseréhez. Az SPI interfész az I 2 C mellett az egyik legszélesebb körben használt interfész mikroáramkörök csatlakoztatására. Eredetileg a Motorola találta fel, és jelenleg számos gyártó termékeiben használják. A neve a "Serial Peripheral Bus" rövidítése, ami a célját tükrözi - egy busz külső eszközök csatlakoztatására. Az SPI busz mester-szolga alapon van megszervezve. A busz master általában egy mikrokontroller, de lehet programozható logikai, DSP vezérlő vagy ASIC is. A master buszra csatlakoztatott külső eszközök alkotják a slave buszt. Szerepüket különféle mikroáramkörök töltik be, pl. tárolóeszközök (EEPROM, Flash-memória, SRAM), valós idejű óra (RTC), ADC/DAC, digitális potenciométerek, speciális vezérlők stb.

    Az SPI interfész fő összetevője egy hagyományos shift regiszter, melynek szinkronizálása és bitfolyam be-/kimeneti jelei alkotják az interfész jeleit. Így az SPI protokollt helyesebben nem adatátviteli protokollnak, hanem két műszakregiszter közötti adatcsere-protokollnak nevezik, amelyek mindegyike egyszerre látja el a vevő és az adó funkcióját. Az SPI buszon történő adatátvitel elengedhetetlen feltétele a busz órajelének előállítása. Ez a jel csak a mester busz létrehozására jogosult, és a slave busz működése teljes mértékben ettől a jeltől függ.

    Elektromos kapcsolat

    Az SPI-buszhoz három csatlakozási típus létezik, amelyek mindegyike négy jelet tartalmaz (a fő és alternatív jelöléseiket lásd az 1. táblázatban). A legegyszerűbb, mindössze két chipet magában foglaló kapcsolat az 1. ábrán látható. Itt a buszmaster az általa generált SCLK jellel szinkronban továbbítja az adatokat a MOSI vonalon, és a slave a továbbított adatbiteket a csatorna bizonyos szélein rögzíti. vett órajelet. Ezzel egy időben a slave elküldi az adatcsomagját. A bemutatott séma leegyszerűsíthető a MISO sor elhagyásával, ha a használt slave IC nem rendelkezik, vagy nem köteles visszaküldeni az adatokat. Az egyirányú adatátvitel olyan mikroáramkörökben található, mint a DAC-k, digitális potenciométerek, programozható erősítők és meghajtók. Így a slave IC csatlakoztatásának megfontolt lehetőségéhez 3 vagy 4 kommunikációs vonalra van szükség. Ahhoz, hogy a slave IC adatokat tudjon fogadni és továbbítani, az órajel megléte mellett az is szükséges, hogy az SS vonal alacsonyra legyen hajtva. Ellenkező esetben a slave IC inaktív lesz. Ha csak egy külső IC-t használunk, csábító lehet az SS vonal kizárása a slave IC kiválasztó bemenetének kemény beállításával. Egy ilyen megoldás nagyon nem kívánatos, és kudarcokhoz, vagy akár az adatátvitel ellehetetlenüléséhez vezethet, mert. a lapkaválasztó bemenet az IC kezdeti állapotába való visszaállítására szolgál, és néha kezdeményezi az adat első bitjének kimenetét.


    Rizs. 1. A legegyszerűbb csatlakozás az SPI buszhoz

    Ha több mikroáramkört kell csatlakoztatni az SPI buszhoz, akkor vagy független (párhuzamos) csatlakozást (2. ábra), vagy kaszkád (soros) csatlakozást (3. ábra) használunk. Az önálló kapcsolódás gyakoribb, mert. bármilyen SPI-kompatibilis chip használatával érhető el. Itt a chipek megválasztásán kívül minden jel párhuzamosan van kapcsolva, és a busz master egyik vagy másik SS jel alacsony állapotba átvitelével beállítja, hogy melyik slave IC-vel cseréljen adatot. Az ilyen kapcsolat fő hátránya, hogy további vonalakra van szükség a szolga mikroáramkörök címezéséhez (a kommunikációs vonalak teljes száma 3 + n, ahol n a szolga mikroáramkörök száma). A kaszkádolás mentes ettől a hiányosságtól, mert itt több mikroáramkörből egy nagy eltolási regisztert alakítanak ki. Ehhez az egyik IC adási adatkimenetét a másik vételi adatbemenetéhez kell csatlakoztatni, amint az a 3. ábrán látható. A chipválasztó bemenetek itt párhuzamosan kapcsolódnak, így a kommunikációs vonalak száma 4 marad. A kaszkádolás azonban csak akkor lehetséges, ha annak támogatását a használt chipek dokumentációja előírja. Ennek kiderítéséhez fontos tudni, hogy egy ilyen kapcsolatot angolul "daisy-chaining"-nak hívnak.


    Rizs. 2. Független csatlakozás az SPI buszhoz


    Rizs. 3. Lépcsőzetes SPI buszra

    Átviteli protokoll

    Az SPI átviteli protokoll rendkívül egyszerű, és valójában megegyezik a shift regiszter logikájával, amely egy eltolási művelet végrehajtásából és ennek megfelelően a szinkronizációs jel bizonyos szélein adatok bitenkénti be- és kimenetéből áll. . Az adatbeállítás az adáskor és a lehívás vételkor mindig a szemközti óraéleken történik. Erre azért van szükség, hogy az adatok a megbízható megállapítást követően lekérésre kerüljenek. Ha figyelembe vesszük, hogy a felfutó vagy lefutó él az első élként működhet az átviteli ciklusban, akkor az SPI interfész logikájára négy lehetőség kínálkozik. Ezeket az opciókat SPI-módoknak nevezzük, és két paraméter írja le őket:

    • CPOL - a szinkronizációs jel kezdeti szintje (ha CPOL=0, akkor az átviteli ciklus kezdete előtt és a vége utáni szinkronizációs vonal alacsony szinttel rendelkezik (azaz az első él emelkedik, az utolsó él pedig csökken), egyébként, ha CPOL=1, - magas (azaz az első front esik, az utolsó pedig emelkedik));
    • CPHA - szinkronizálási fázis; ez a paraméter határozza meg az adatok beállításának és lekérésének sorrendjét (ha CPHA=0, akkor az adatok mintavételezése a szinkronizálási ciklus felfutó élén, majd a lefutó élen történik az adatok beállítása; ha CPHA= 1, akkor a beállítási adatok az óraciklusban a felfutó élen kerülnek vételre és a lefutó élen mintavételezésre kerülnek). Az SPI-módokkal kapcsolatos információkat a 2. táblázat foglalja össze.

    A különböző SPI módokban működő master és slave chipek nem kompatibilisek, ezért fontos tisztázni, hogy a szolga chipek kiválasztása előtt a busz master mely módokat támogatja. A mikrokontrollerekbe integrált SPI hardvermodulok a legtöbb esetben támogatják bármely SPI mód kiválasztását, így bármilyen SPI szolga mikroáramkör csatlakoztatható hozzájuk (csak független csatlakozási lehetőségre vonatkozik). Ezenkívül az SPI-protokoll bármelyik módban könnyen megvalósítható szoftverben.

    Összehasonlítás az I 2 C gyűjtősínnel

    Mint már említettük, a 2 vezetékes I 2 C soros busz nem kevésbé népszerű mikroáramkörök dokkolásánál. Az alábbiakban láthatja, milyen előnyökkel jár ez vagy az a soros busz.

    Az SPI busz előnyei Az I2C busz előnyei
    Az átviteli protokoll rendkívüli egyszerűsége a fizikai rétegben meghatározza az átvitel nagy megbízhatóságát és sebességét. Az SPI-busz sebességkorlátozása több tíz megahertzben van mérve, ezért ideális nagy adatfolyamokhoz, és széles körben használják nagy sebességű DAC/ADC-ben, LED-es kijelzőmeghajtókban és memóriachipekben. Az I 2 C busz a csatlakoztatott chipek számától függetlenül kétvezetékes marad.
    Minden SPI buszvonal egyirányú, ami nagyban leegyszerűsíti a szintátalakítás és a mikroáramkörök galvanikus leválasztásának feladatát. Több masteres működés lehetősége, ha több master mikroáramkör csatlakozik a buszhoz.
    Az SPI protokoll egyszerű szoftveres implementációja. Az I2C protokoll szabványosabb, ezért az I2C chipek felhasználója jobban védett a kiválasztott komponensek összeférhetetlenségi problémáival szemben.

    Származtatott és kompatibilis protokollok

    • MIKROVEZETÉS.

      A National Semiconductor MICROWIRE protokollja megegyezik a 0 módú SPI protokollal (CPOL = 0, CPHA = 0).

    • Maxim 3 vezetékes interfész

      A különbség ennél az interfésznél az, hogy a két egyirányú vonalon keresztüli full-duplex átvitel helyett egy kétirányú DQ vonalon keresztül félduplex átvitelt hajt végre.

    • QSPI

      Az SPI-nél magasabb szintű protokoll, amely lehetővé teszi az automatizált adatátvitelt CPU bevonása nélkül.

    Ezen túlmenően az SPI interfész számos speciális interfész felépítésének alapja, pl. JTAG hibakereső interfész és Flash memóriakártya interfészek, beleértve SD és MMC.

    Tab. 1. SPI busz elektromos jelek

    Vezető gumiabroncsok rabszolgabusz
    Alap megnevezés Alternatív jelölés Leírás Alap megnevezés Alternatív jelölés Leírás
    MOSI DO, SDO, DOUT MOSI DI, SDI, DIN
    MISO DI, SDI, DIN Soros vételi bemenet MISO DO, SDO, DOUT Soros kimenet
    SCLK DCLOCK, CLK, SCK Adatátviteli szinkronizálás kimenet SCLK DCLOCK, CLK, SCK Szinkronizálási bemenet fogadása
    SS CS Slave kiválasztási kimenet (chip kiválasztása) SS CS Slave kiválasztási bemenet (chip kiválasztása)


    Betöltés...
    Top