vineri, 29 noiembrie 2013

Despre protoculul SPI..... (Partea 1)



       Cand m-am apucat sa lucrez pentru proiectul de licenta stiam inca de la inceput ca voi da nas in nas cu protocolul SPI . Mi-am zis atunci (la fel cum imi spun de fiecare data) ca nimic nu este imposibil si cu multa rabdare (si tutun) se poate invata si pune in practica.
      Necazul cu aceast protocol este faptul ca fiecare companie il implementeaza in modulele din uC (probabil din motive de copyright) in moduri si forme diferite. Ca sa se complice si mai mult problema fiecare compilator simte, din nu stiu ce motive, nevoia sa dea denumiri ale variabilelor ce intra in functiile ce utilizeaza acest protocol forme si nume diferite.  Dar stati linistiti: in final, esenta este de fiecare data aceasi. 

      Prescurtarea SPI vine de la Serial Peripheral Interface si, in esenta, nu este altceva decat un alt mod de a transmite datele pe cale seriala. Transmisia  seriala presupune transmitrea bit cu bit a informatiei digitale iar SPI face fix acest lucru cu multa rabdare si .... viteza.  Inainte de a intra in detalii despre cum se face acest lucru ar fi bine si util sa prezentam personajele care intra in scena : 

  1. Dispozitivul Master ( am vazut undeva traducerea in romana : Stapan)
  2. Dispozitivul Slave   (Sclav ) 
     Protocolul SPI este de tip Master-Slave (Let's play master and servant ). Poate suna putin pervers dar cam asa este.  Masterul are metodele sale de a-l tine in frau (Ooops) pe Slave. Cum? Sa privim urmatoarea imagine luata de pe Wikipedia:


Poza 1: Master controleaza Slave


     Prima metoda este SCLK ce se traduce in romana prin semnal de ceas. Masterul are ca instrument de control si opresiune semnalul de ceas pe care il genereaza. Asta inseamna ca SPI este o transmisie de date sincrona adica datele intra si ies in ritmul semnalului de ceas (clock-ului). Nimic nu se transmite si nimic nu se primeste daca nu exista un semnal de ceas. Din cele spuse mai sus rezulta ca acest protocol este sincron.
     Cea de-a doua metoda, de data asta una directa este SS, cu bara de deasupra de rigoare. Daca are bara atunci este active low. Pe romaneste: slave-ul nu asculta de stapan decat daca pe pinul fizic SS nu i se aplica zero volti. Concluzionand putem spune ca nimic nu se intampla pana ce nu sunt indeplinite doua conditii:

  1. Pinul SS nu este adus "low".
  2. Masterul nu incepe sa genereze semnalul de ceas.    
      Ca o simpla observatie se poate spune ca un Master poate avea mai multi sclavi. Cum? Simplu : legandu-i de el prin cate un fir SS dedicat. In acest mod Masterul tine fiecare pin SS HIGH ( rastaman vibration)  si cand vrea sa comande un Slave face pinul SS aferent acestuia LOW. Si cum o poza face cat o mie de cuvinte tot de pe Wikipedia:

Poza 2: Master controleaza trei slaves.



          

     Ce se intampla mai departe? Pai daca ne uitam in poza de mai sus putem observa alte doua denumiri ciudate: MOSI si MISO. MOSI vine de la "Master Out Slave In" (inca o data pervers...) iar MISO vine de la Master In Slave Out.  Pentru a intelege exact ce fac acesti doi pini trebuie sa tragem un pic cu ochiul in interiorul celor doi (Master & Slave). Sa inceapa disectia: Pentru a se impreuna si schimba informatii cei doi protagonisti au nevoie de ceva care sa retina (atat cat este nevoie) datele si de a le propaga mai departe. Acesta treaba se rezolva cu ajutorul a doua registre cu deplasare seriala (shift registers). Cate un astfel de registru se afla in interiorul fiecaruia. La fiecare semnal de ceas cate un bit intra si iese din fiecare dupa cum urmeaza: 
  • pe linia MOSI : bitul iese din Master si intra in slave 
  • pe linia MISO : bitul iese din Slave si intra in Master.
      Se poate spune ca , de exemplu,daca vrei doar sa ii spui ceva Slave-ului primesti o informatie la schimb fie ca este utila sau nu. Daca registrul de deplasare are lungimea de 8 biti (1 byte) se poate zice ca pentru a-l umple sunt necesare 8 semnale de ceas timp in care se transfera 16 biti : 8 de la Master la Slave si 8 de la Slave la Master. Practic totul se poate asemana cu un cerc pe a carui circumferita se afla doua puncte diametral opuse: unul  Master-ul iar celalalt Slave-ul informatia circuland simultan de la unul la celalalt pe cele doua jumatati de cerc. Ati prins ideea? Daca nu, sa facem economie de 1000 de cuvinte si sa privim imaginea:
      

Poza 3: Ne invartim in cerc

     Sa incepem luand ca referinta linia MOSI. Din registrul Master sa ne imaginam ca sageata pe care  scrie MOSI trage dupa ea toti bitii din registru cate o casuta. In urma acestei operatiuni  cel de-al saptelea bit al registrului ramane pe afara si este transferat in registrul Slave-ului. Cum in acesta din urma nu este loc decat pentru 8 biti se creaza un efect de carambol fiecare bit impingand cate o casuta bitul din fata bitul 7 fiind aruncat afara. Nu tocmai... Acesta este preluat de linia MOSI si depus in locul ramas gol in registrul Master-ului - in locul bitului zero. 


     In mare cam asta ar fi de zis in prima parte a articolului despre SPI.In cea de-a doua parte vom vedea care si cum sunt definite modurile de transmisie a informatiei.





Niciun comentariu:

Trimiteți un comentariu