2014.06.22.
16:22

Írta: harsanyireka

13. /4) Kommunikációs könyvtárak: SPI

Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.

Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton

 

Az SPI (Serial Peripherial Interface) egy szinkron soros protokoll. Alapvető különbség az I2C-hez képest, hogy külön adatvonalat tart fenn a mestertől a szolga felé és az ellenkező irányú kommunikáció céljára, továbbá nem használ címzést, az egyetlen mester az eszközöket egyenként külön vonalakon engedélyezi. Mindezek együttesen egy gyorsabb soros adatátvitelt tesznek lehetővé a mikrokontroller és perifériái között. A közös adatvonalak a MISO (Master In Slave Out), amin keresztül a mester fogad adatokat, a MOSI (Master Out Slave In), amin a szolgák fogadnak adatokat és az SCK (Serial Clock) órajel a szinkronizáláshoz. Az eszközönként specifikus vonal az engedélyezéshez az SS (Slave Select). Amikor egy szolga SS vonala logikai alacsony szintre kerül, létrejön a kapcsolata a mesterrel, ha magas szinten tartjuk, akkor teljesen kimarad a buszon való kommunikációból, így nem zavarhatja a többi perifériát.

13.6. †bra SPI busz funkcion†lis rajza tîbb szolgaeszkîz esetÇn.png

SPI busz funkcionális rajza több szolgaeszköz esetén 

A nyílt fejlesztésű rendszernek és a közösségben együttműködő programozóknak köszönhetően az Arduinoval számtalan SPI alkatrész került implementálásra, és a könyvtár ebből a rutinból fakadóan rendelkezik olyan függvényekkel, amik megkönnyítik az új eszközök használatát. Mindazonáltal az SPI protokoll meglehetősen szabadon értelmezett az eszközgyártók körében, ezért, ha egy új alkatrészhez szeretnénk programot írni, akkor nézzük meg alaposan az adatlapját.

 

Eltérések a következő paraméterekben lehetnek:

  • MSB (Most Significant Bit): legnagyobb helyi értékű bitet küldi a szolga először.
  • LSB: (Less Significant Bit): legkisebb helyi értékű bitet küldi a szolga először.

A két változat között az SPI.setBitOrder() függvény biztosítja az átjárást.

  • Órajel frekvenciája: Az órajel sebességét az SPI.setClockDivider()-rel adhatjuk meg.
  • Órajel fázisa (CPHA): Az adatok az órajel negatív vagy pozitív élével vannak szinkronban.
  • Órajel polaritása (CPOL): A várakozás logikailag magas vagy alacsony szint.

Erről az SPI.setDataMode() függvény segítségével dönthetünk:

 

Mód

 

CPOL CPHA

SPI_MODE0

0

0

SPI_MODE1

0

1

SPI_MODE2

1

0

SPI_MODE3

1

1


táblázat: setDataMode függvény állapotai

 

Az SPI kivezetéseit megtalálhatjuk az Arduino alaplapján egy külön csatlakozón is, amit ICSP-nek (In Circuit Serial Programming) hívunk.

13.7. †bra ICSP csatlakoz¢ kioszt†sa.jpeg

ICSP csatlakozó kiosztása

Mivel ezen a csatlakozón keresztül tölthetjük fel az Arduino alapprogramját, a bootloadert is, ezért megtalálható minden típusú alaplapon ugyanebben a formában. Mint azt láttuk, a kivezetések sokszor több különböző funkciót is el tudnak látni, így nem meglepő, hogy az ICSP vonalait az eddig tárgyalt csatlakozók valamelyikén is megtaláljuk:

 

Típus

MOSI MISO SCK

SS (szolga)

SS (mester)

UNO

13

11

12

10

-

Mega

51

50

52

53

-

Leonardo

ICSP4

ICSP1

ICSP3

-

-

DUE

ICSP4

ICSP1

ICSP3

-

4, 10, 52

 

SPI csatornák kivezetései a különböző típusú Arduino alaplapokon

 

Az eltérések nem kizárólag az alapvető kommunikációban mutatkoznak meg, minden alkatrész rendelkezik saját utasításkészlettel és regiszterekkel.

Az SD kártyák is SPI buszon kommunikálnak, amiket viszonylag könnyen és nagyon sokféleképpen hasznosíthatunk arduinos projektjeinkben (háttértár, hangfelvétel, lejátszás, adatrögzítés, GPS). Példánkban a Libelium által gyártott microSD panelt fogjuk alkalmazni, aminek kialakításakor figyelembe vették mind a kétféle csatlakoztatási módot.

 13.8. †bra Arduino Libelium microSD modullal.png

Arduino Libelium microSD modullal

Az SD kártyák csatlakoztatása a modul megvásárlása nélkül is igen egyszerű, mindössze pár ellenállásra van szükség, amikkel az Arduino 5 V-os rendszerű SPI buszának vonalait a memóriakártyák által elfogadható 3,3 V-os szintűvé alakítjuk. Tulajdonképpen a bemutatásra kerülő modul sem tesz ennél többet. A kártya eléréséhez az SPI könyvtár egy módosított változatát fogjuk használni, ami képes FAT partíción fájlstruktúrák kezelésére.

 

Amire szükségünk lesz:

-       Arduino,

-       Libelium microSD modul, vagy

-       5 V – 3,3 V szintillesztő.

 

Arduino kód: 63SDkartya

 

- - - - - - - - - -

forrás: http://arduino.cc/en/Reference/SDhttp://arduino.cc/en/Tutorial/HomePage

 

 

Szólj hozzá!

Címkék: leckék könyvtárak SD SPI lektorált

A bejegyzés trackback címe:

https://harsanyireka.blog.hu/api/trackback/id/tr386398251

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása