Bus-ul SPI (Serial Peripheral Interface)

A trecut mult timp de când nu am mai scris nimic pe blog, nemaiavând timp. Încep de astăzi să public o serie de extrase din documentaţia proiectului audio. Post-urile nu ating direct partea de FPGA dar, cred eu, prezintă informaţii interesante. Update(7.11.2011):  în curând cod. Stay tuned!

Serial Peripheral Interface, pe scurt SPI, este un bus serial de transfer sincron, definit de Motorola şi operează în modul full duplex. Dispozitivele aflate pe bus sunt fie slave, fie master, masterul fiind cel care iniţiază data frame-ul. Bus-ul permite interconectarea unui master cu mai mulţi slave, folosind pentru selecţia dispozitivului dorit semnalul chip select. Este asemănător cu busul I2C prin faptul că oferă suport pentru comunicaţii între periferice de viteza mică, deşi este capabil şi de viteze mai mari decât I2C-ul.

În standard sunt definite 4 semnale:
• SCLK – semnalul de clock (output de la master);
• MOSI/SIMO – Master Output, Slave Input (output de la master);
• MISO/SOMI – Master Input, Slave Output (output de la slave);
• SS – Slave Select (activ pe nivel logic „0”, output de la master). Semnal ce este folosit pentru a selecta slave-ul către care se transmit datele.

Alternativ mai sunt folosite şi următoarele denumiri pentru semnale:
• SCK, CLK – Serial Clock
• SDI, DI, SI – Serial Data In, Data In, Serial In
• SDO, DO, SO – Serial Data Out, Data Out, Serial Out
• nCS, CS, CSB, CSN, nSS, STE – Chip Select, Slave Transmit Enable

În mod evident în cazul în care se folosesc notaţiile SDI/SDO (DI/DO, SI/SO) SDO-ul master-ului trebuie conectat la SDI-ul slave-ului şi viceversa. De asemenea de notat, chip select nu este niciodata activ pe nivel logic “1” desi denumirile SS, CS (în loc de nSS, nCS) sugerează contrariul.

După cum se observă, bus-ul SPI nu defineşte nici un semnal de întrerupere dar nici nu interzice folosirea unuia, de aceea, se întamplă destul de des ca acolo unde se foloseşte bus-ul SPI să se folosească şi un semnal de întrerupere. (de exemplu semnalul care transmite atingerea ecranului în cazul unui ecran de tip touchscreen)

După cum spuneam, bus-ul SPI poate opera având un master şi unul sau mai mulţi slave. Sunt posibile următoarele configuraţii:

• un singur slave. Cea mai simplă interconectare, în acest caz pinul de slave select poate fi conectat la masa.

File:SPI single slave.svg
sursă figură: http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus

• mai mulţi slave, master-ul având un pin de slave select pentru fiecare din aceşti slave. Este cea mai comună metodă de interconectare prin bus SPI. După cum se vede, pinii MISO sunt interconectaţi, aşa încât este necesar ca ei să fie pini tristate.

File:SPI three slaves.svg

sursă figură: http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus

• Mai mulţi slave conectaţi la master prin intermediul unei conexiuni de tip daisy-chain: ieşirea primului slave este conectată la intrarea celui de-al doilea slave, etc. Port-ul SPI al fiecărui slave primeşte într-o primă etapa date pe care apoi, într-o a doua etapa, le copiaza întocmai pe ieşire. În acest caz nu e nevoie decât de un singur semnal de slave select.

File:SPI three slaves daisy chained.svgsursă figură: http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus

Etapele parcurse în transmiterea datelor prin SPI sunt urmatoarele:

• Master-ul configureaza clock-ul, frecvenţa aleasă fiind mai mică sau egală cu frecvenţa maximă admisă de slave. În mod normal acest lucru înseamna o frecvenţă între 1 şi 70 MHz.

• Masterul selecteză slave-ul prin negarea semnalului aferent repectivului dispozitiv. În cazul în care e nevoie de un timp de asteptare (de exemplu la conversia analogic digitală) master-ul se conformează aşteptând pâna începe să transmită impulsuri de ceas.

• În timpul fiecărui ciclu al ceasului are loc o transmisie full-duplex:

  • masterul transmite un bit pe linia MOSI iar slave-ul îl recepţionează prin intermediul aceleiasi lini;
  •  slave-ul transmite un bit pe linia MISO iar masterul îl recepţionează prin intermediul aceleiaşi lini.

În mod normal transmiterea unor date între master şi slave implică mai multe cicluri de ceas. Când nu mai sunt date de transmis masterul opreşte semnalul de clock si deselectează slave-ul prin trecerea semnalului pe nivel logic ‘1’.

Comunicaţia între master şi slave se desfăşoara, în mod normal, sub forma unor cuvinte de 8-biţi, dar acest lucru nu constituie o regulă. Cuvinte de 16-biţi sunt folosite de către controllerele de touchscreen sau de audio CODEC-uri. Cuvintele de 12-biti sunt comune pentru convertoarele digital-analogice si analogic-digitale.

Un gând despre „Bus-ul SPI (Serial Peripheral Interface)

  1. Pingback: Busul I2S | FPGA în limba română

Lasă un răspuns

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s