Fórum témák

» Több friss téma
Cikkek » SPI használata AVR-rel
SPI használata AVR-rel
Szerző: Fizikus, idő: Jún 13, 2011, Olvasva: 32108, Oldal olvasási idő: kb. 3 perc
Lapozás: OK   2 / 8

SPI

Az alábbi ábra két SPI-vel rendelkező eszköz közötti kapcsolatot ábrázolja:

A hagyományos SPI interfész 3 vagy 4 vezetéket használ egyetlen SPI eszközzel történő kommunikációra. Ezek a Shift Clock (léptető órajelimpulzus - SCK), Master Ki Slave Be (Master Out Slave In - MOSI), Master Be Slave Ki (Master In Slave Out - MISO) és az alacsony állapotban aktív Slave Kiválasztó (Slave Select - SS) vezeték (gyakran Chip Select-nek is hívják – CS).

Ha a Master csak egy Slave eszközzel kommunikál, akkor a Master SS lába egy felhúzóellenálláson keresztül a tápfeszültségre köthető. Az SPI eszköz Save Select (SS) lába pedig a földre köthető, ami engedélyezi az SPI-t az adott eszközön (lásd a köv. ábra b pontját). Ha egynél több SPI eszköz van ugyanarra a buszra kötve, akkor már négy vezetékre van szükség. Ezt a plussz vezetéket arra használjuk hogy kiválasszuk azt az SPI eszközt amelyikkel kommunikálni akarunk. A Slave eszközt a hozzá tartozó Slave Select (Slave kiválasztó / SS) láb alacsony állapotra kapcsolásával lehet kiválasztani. Egyetlen Slave eszköz használata esetén is 4 vezeték szükséges, ha az eszköz energiatakarékos alvás módját akarjuk használni. Ekkor az SS lábat használhatjuk az SPI aktiválására, mert az SS láb alacsonyra állítása automatikusan feléleszti a Slave eszközt az alvó módból.


Most vizsgáljuk meg kicsit részletesebben is az SPI interfész működését!

Az SPI lényegében két shift regiszterből és egy órajelgenerátorból áll, amire úgy is tekinthetünk, mint egy 16 bites körkörös szinkron shift regiszterre, aminek az egyik 8 bites fele a Master-ben, a másik 8 bites fele pedig a Slave-ben helyezkedne el.
 

A működés elve elég egyszerű:

  1. A Master eszköz kezdeményezi a kommunikációt, úgy hogy a megfelelő Slave eszközhöz tartozó Save Select (SS) lábat alacsony állapotra állítja, ezzel jelezve a Slave eszköznek, hogy adattovábbítás kezdődik.
  2. A Master és a Slave eszköz előkészíti a saját shift regiszterében a küldeni kívánt adatokat. Az adat a Master-től a Slave-hez mindig a Master Out Slave In (MOSI) vezetéken áramlik, a Slave-től a Master-hez pedig a Master In Slave Out (MISO) vezetéken. A Master egy adatbitet ír a MOSI vezetékre, és ezzel egy időben a Slave is egy adatbitet ír a MISO vezetékre.
  3. Amikor a Master az SCK vezetéken elküldi az adatcseréhez szükséges órajelimpulzust, akkor beolvassa a MISO vezetéken lévő értéket (amit előzőleg a Slave írt rá), ugyanekkor a Slave is beolvassa a MOSI vezetéken lévő értéket (amit előzőleg a Master írt rá). Adatbeolvasáskor a shift regiszter automatikusan továbblépteti a korábban beérkezett adatokat, helyet csinálva ezzel a bejövő adatnak. Az hogy az adatbeolvásás az órajelimpulzus felfutó vagy lefutó élére történjen, az attól függ hogy milyen SPI működési módot állítottunk be.
  4. A fenti lépéseket a 2.-ik ponttól ismételve, az órajel minden egyes impulzusára, az adatokat bitenként elküldhetjük.
  5. Minden adatcsomag után a Master a Slave Select vonalat magasra állítja, ezzel szinkronizálva a Slave eszközt.
     

Mivel az SPI protokol full duplex szinkron soros adatküldési módot használ, a slave eszközre történő adatküldéssel egy időben a Slave eszközről érkező adatokat is fogadni tudja a belső shift regiszterével.

A Master az aktív elem a rendszerben. Ő felel a kommunikáció kezdeményezéséért és vezérléséért, biztosítja a soros adatküldés folyamán az adó és a vevő közötti kommunikációt szinkronizáló órajelet. A Master eszköz felelőssége az is, hogy az SPI-t olyan módban használja amit a Slave elvár (az hogy az adatokat az SCK órajelimpulzus le vagy felfutó élére írjuk vagy olvassuk-e), és hogy az órajelimpulzus ne legyen túl gyors a Slave eszköznek.

A Slave eszköz nem képes órajel generálására, csak adatokat fogad és küld a Master által küldött órajelimpulzusok ütemére. A Master csak az adatküldés alatt generálja az órajelimpulzusokat, ezért ez azt jelenti, hogyha a Master adatot akar kiolvasni egy Slave eszközről, akkor ezzel egy időben adatot is kell küldenie.

A Master és a Slave közötti adatcsere folyamán egyszerre, egy órajelciklus alatt tolódik egy-egy adatbit a Master-ről a Slave-re és a Slave-ről a Master-re, ezért a két 8 bites shift regiszter úgy vehető mint egy egyetlen 16 bitből álló körkörös shift regiszter. Ez azt jelenti, hogy 8 SCK órajelimpulzus után az adat a Master és a Slave között kicserélődik.

A jobb érthetőség kedvéért nézzünk egy példát amelyben a Master az 0b11011101 bájtot akarja elküldeni a Slave-nek, és ezzel egy időben a slave eszköz pedig az 0b00110010 bájtot akarja elküldeni a Master-nek. A Slave eszköz CS (chip select) lábának logikai alacsony szintre kapcsolása után az eszköz kész az adat fogadására. Az első SCK órajelimpulzusra mind a Master, mind a Slave eszköz shift regisztere balra lépteti egy bit-tel a regiszter tartalmát. Az SPI Slave shift regisztere fogadja a Master-től jövő első bitet (ami az LSB-vel jelölt legkisebb helyiértékű bit helyére kerül). Ezzel egy időben az SPI Master shift regisztere is fogadja a Slave-től jövő adat első bitjét (ami ugyancsak a shift regiszter LSB-vel jelölt legkisebb helyiértékű bitjére kerül). A fenti eljárást minden bitre megismételve, az ábráról látható, hogy a teljes Master és Slave közötti adatcsere 8 SPI órajelütem alatt lezajlódik.
 


A cikk még nem ért véget, lapozz!
Következő: »»   2 / 8
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem