Sunteți pe pagina 1din 8

Capitolul 11

BLOCUL SPI
11.1. Introducere
Interfaa SPI (Serial Peripheral Interface) este o interfa serial introdus de firma Motorola. n cadrul microcontrolerelor HCS12 este implementat un bloc ce permite conectarea acestora la interfaa SPI. Blocul SPI permite: comunicaia sincron i bidirecional, operarea n modul Master sau Slave, operarea n modul testare de bit (polling) sau n ntrerupere, rat de transfer programabil, funcionarea n modul de ateptare (wait) etc. Registrele utilizate de blocul SPI: SPIBR registru de fixare a ratei de transfer, SPICR1 i SPICR2 registre de control, SPISR registru de stare i SPIDR registru de date. Conexiunile externe utilizate de blocul SPI: - MOSI/PM4, n modul Master este ieire de date iar n modul Slave este intrare de date; MISO/PM2, n modul Master este intrare de date iar n modul Slave este ieire de date;

SS /PM3, n modul Slave este intrare de selecie. n modul Master acest pin poate fi neutilizat, utilizat ca ieire de selecie Slave sau ca intrare de supraveghere a traficului de pe interfa; - SCK/PM5, n modul Master este ieire de tact iar n modul Slave este intrare de tact. Exist dou configuraii de funcionare a interfeei SPI, configuraia paralel i configuraia serie. Cea mai utilizat configuraie este cea paralel, structura acestei configuraii este dat n figura 11.1. Se consider c dispozitivul Master este un microcontroler HCS12 iar cele n dispozitive Slave pot fi de tipuri diferite, eventual i un microcontroler HCS12. Conexiunile de acelai tip MOSI, MISO i SCK, de la dispozitivul Master i dispozitivele Slave, se conecteaz mpreun. Tactul este generat prin conexiunea SCK de dispozitivul Master i este recepionat de dispozitivele Slave. Dispozitivul Master genereaz datele prin pinul MOSI i recepioneaz datele prin pinul MISO. Dispozitivele Slave recepioneaz datele prin pinul MOSI i genereaz datele prin pinul MISO. Datele se vehiculeaz n serie i pe octei. Iniiativa unui transfer de date este luat de dispozitivul Master care valideaz un dispozitiv Slave prin selectarea acestuia adic trecerea la nivel cobort a intrrii de selecie /SS. n acest scop dispozitivul Master poate utiliza pinul dedicat /SS sau alt pin de port de intrare i ieire (Sel 2, , Sel n-1). Configuraia paralel are avantajul ratei mari de transfer de date dar are dezavantajul utilizrii unui numr mare de pini ai dispozitivului Master (n+3 pini n cazul existenei a n dispozitive Slave).
88

11.1. Introducere

Structura serie cunoscut i sub denumirea daisy chain SPI, prezentat n figura 11.2, utilizeaz numai patru pini ai dispozitivului Master. Reducerea numrului de pini se realizeaz prin utilizarea unei singure linii de selecie i deci toate dispozitivele Slave vor fi selectate simultan. Aceast configuraie este mai lent dect configuraia paralel. De exemplu: dac se dorete citirea dispozitivului Slave i (1i<n), informaia din acesta trebuie s treac prin toate dispozitivele Slave de la dreapta acestuia iar dac se dorete programarea dispozitivului Slave i (1<in), informaia pentru acesta trebuie s treac prin toate dispozitivele Slave de la stnga acestuia. Numai dispozitivele Slave care permit tranzitarea informaiei se preteaz s comunice prin interfaa SPI n configuraia serie. Un exemplu este poteniometrul digital ISL22416 compatibil cu interfaa SPI.
Interfaa SPI MISO MOSI SCK MASTER /SS Microcontroler MC9S12C32 Sel n-1 Sel 2 MISO MOSI SCK Slave 1 /SS Microcontroler MC9S12C32

MISO MOSI SCK Slave 2 /SS

Alt dispozitiv Slave SPI

MISO MOSI Slave n SCK /SS

Alt dispozitiv Slave SPI

Figura 11.1. Configuraia paralel a interfeei SPI.


SCK MASTER MOSI Microcontroler MC9S12C32 /SS sau pin I/O MISO Slave 1 SCK MISO MOSI /SS Slave 2 SCK MISO MOSI /SS Slave n SCK MISO MOSI /SS

Figura 11.2. Configuraia serie a interfeei SPI. 89

BLOCUL SPI

11.2. Descrierea blocului SPI


Activarea blocului SPI se realizeaz prin setarea bitului SPICR1_SPE (SPICR1_SPE = 0/1 dezactivare/activare bloc SPI), caz n care blocul controleaz pinii dedicai interfeei. Blocul SPI poate lucra n
modul Master sau n modul Slave (SPICR1_MSTR = 1/0 modul Master/Slave). Iniiativa unui transfer de date cade n sarcina dispozitivului Master care va genera i tactul de sincronizare prin pinul SCK. Frecvena tactului care stabilete rata de transfer (RataSPI) se obine prin divizarea frecvenei de magistral fBUS. Rata de transfer este dat de relaia (11.1), unde (SPPR) este valoarea exprimat n binar a biilor SPIBR_[SPPR2SPPR0] iar (SPR) este valoarea exprimat n binar a biilor SPIBR_[SPR2SPR0].
Rata SPI = (( SPPR) + 1) 2 ( SPR )+1 f BUS

(11.1)

n modul Master rata de transfer este cuprins n domeniul fBUS/2048 fBUS/2 iar n modul Slave rata de transfer admis este cuprins n domeniul 0 fBUS/4. De exemplu: pentru fBUS = 8MHz, n modul Master rata este cuprins n domeniul 4KHz 4MHz iar n modul Slave rata este cuprins n domeniul 0 2 MHz. Exist dou moduri de funcionare ale interfeei, modul normal i modul bidirecional. Programarea modului se face cu ajutorul bitului SPICR2_SPC0 (SPICR2_SPC0=0/1 mod normal/bidirecional). n modul normal emisia are loc simultan cu recepia (comunicaie duplex), datele circul prin pinii MOSI i MISO, primul bit care se transfer poate fi bitul MSB sau LSB (SPICR1_LSBFE = 0/1 primul bit care se transfer este bitul MSB/LSB). n figura 11.3 sunt prezentate conexiunile tipice i programarea modului normal de comunicaie. Dispozitivul Master genereaz datele prin MOSI, recepioneaz datele prin MISO, genereaz tactul prin SCK i controleaz linia SS de ieire i selecie Slave. Dispozitivul Slave genereaz datele prin MISO, recepioneaz datele prin MOSI, recepioneaz tactul prin SCK i este controlat prin linia de intrare SS .
Master SPI
Registru de deplasare MISO MISO MOSI MOSI SCK Generator de rat SPICR1_SPE=1 validare SPI SPICR1_MSTR=1- Master SPI SPICR1_MODFEN=1 /SS la SPI SPICR1_SSOE=1-/SS ieire sel. Slave SPICR2_SPC0=0 mod normal /SS SCK /SS SPICR1_SPE=1 validare SPI SPICR1_MSTR=0 Slave SPI SPICR2_SPC0=0 mod normal Registru de deplasare

Slave SPI

Figura 11.3. Modul normal de conectare i control a interfeei SPI. 90

11.2. Descrierea blocului SPI

Master SPI
Registru de deplasare MOMI SISO MOSI MISO BIDIROE=0/1 SCK Generator de rat /SS SPICR1_SPE=1 validare SPI SPICR1_MSTR=1- Master SPI SPICR1_MODFEN=1 /SS la SPI SPICR1_SSOE=1 /SS ieire sel. Slave SPICR2_SPC0=1 mod bidirecional SPICR2_BIDIROE=0/1 MOMI este intrare /intrare i ieire /SS SCK

Slave SPI

BIDIROE=1/0

Registru de deplasare

SPICR1_SPE=1 validare SPI SPICR1_MSTR=0 Slave SPI SPICR2_SPC0=1 mod bidirectional SPICR2_BIDIROE=0/1 SISO este intrare/ intrare i ieire

Figura 11.4. Modul bidirecional de conectare i control a interfeei SPI.

n figura 11.4 sunt prezentate conexiunile tipice i programarea modului bidirecional de comunicaie. n acest mod exist dou faze de comunicaie (comunicaie semiduplex). n una din faze, dispozitivul Master genereaz datele prin MOMI/MOSI (SPICR2_BIDIROE=1), genereaz tactul prin SCK i controleaz linia SS de ieire i selecie Slave. n acest timp dispozitivul Slave recepioneaz datele prin SISO/MISO (SPICR2_BIDIROE=0), recepioneaz tactul prin SCK i este controlat prin linia de intrare SS . n cealalt faz, dispozitivul Master recepioneaz datele prin MOMI/MOSI (SPICR2_BIDIROE=0), genereaz tactul prin SCK i controleaz linia SS de ieire i selecie Slave. n acest timp dispozitivul Slave genereaz datele prin SISO/MISO (SPICR2_BIDIROE=1), recepioneaz tactul prin SCK i este controlat prin linia de intrare SS . Att n cazul transferului normal ct i n cazul transferului bidirecional de date, a fost utilizat linia de selecie SS a dispozitivului Slave. Dup trecerea de ctre Master a liniei SS n 0 logic, dispozitivul Slave recunoate tactul de la intrarea SCK, accept datele de la intrarea de date, genereaz datele la ieirea de date i deplaseaz datele n registrul su de deplasare. La trecerea liniei SS n 1 logic, dispozitivul Slave ignor impulsurile de tact de la intrarea SCK i pune ieirea sa n nalt impedan. n cazurile n care comunicaia se face numai ntre un dispozitiv Master i un dispozitiv Slave exist posibilitatea ca linia de intrare

SS a dispozitivului Slave s fie pus permanent la mas. Linia SS a


dispozitivului Master este disponibil. La fel sunt situaii cnd selecia dispozitivelor Slave se face cu ajutorul liniilor porturilor generale de intrare i ieire. Modurile de utilizare a liniei SS , n regimurile Master i Slave i biii de control sunt prezentate n tabelul 11.1.
91

BLOCUL SPI Tabelul 11.1. Modurile de utilizare a liniei


SPICR2_MODFEN 0 0 1 1 SPICR1_SSOE 0 1 0 1

SS .

Modul Master Linia SS este neutilizat Linia SS este neutilizat Linia SS este intrare MODF Linia SS este ieire de selecie Slave

Modul Slave Linia SS este intrare de selecie Linia SS este intrare de selecie Linia SS este intrare de selecie Linia SS este intrare de selecie

O situaie aparte apare n cazul n care SPICR2_MODFEN=1 i SPICR1_SSOE=0 iar portul SPI este programat ca Master (SPICR1_MSTR = 1). n acest caz pinul SS devine intrare i supravegheaz linia general SS a interfeei SPI. Dac la aceast intrare apare un nivel logic 0 asta nseamn c alt dispozitiv Master ncearc s acceseze interfaa SPI ceea ce constituie o eroare. Acest aspect este indicat de setarea bitului SPISR_MODF i trecerea automat n modul Slave. n timpul unui transfer de date, emisia are loc simultan cu recepia att la dispozitivul Master ct i la dispozitivul Slave. Pentru transferul corect de date, trebuie s existe o anumit sincronizare ntre momentul activrii unui dispozitiv Slave (trecerea liniei SS n 0 logic) i momentele de eantionare a intrrilor i de tranziie a biilor de date din registrele de deplasare. Aceste aspecte sunt precizate de biii SPICR1_CPOL i SPICR1_CPHA care selecteaz patru combinaii n ceea ce privete polaritatea iniial i faza tactului SCK generat de Master. Polaritatea iniial a tactului poate fi 0 sau 1, aspect mai puin important. Important este faza tactului care stabilete unul dintre cele dou formate de transfer de date. Modul de transfer este dictat de dispozitivul Slave, dispozitivul Master poate lucra n orice mod. n figura 11.5 este prezentat formatul 0 de transfer corespunztor valorii SPICR1_CPHA=0. Acest format este utilizat la transferul de date cu dispozitivele Slave care imediat ce sunt selectate (linia SS trecut n 0 logic) genereaz primul bit la ieire i accept primul bit la intrare. Astfel c la primul front de tact (frontul nr. 1) se eantioneaz (se achiziioneaz) primul bit de la intrrile de date. La urmtorul front de tact (frontul nr. 2) se realizeaz deplasarea biilor din registrele de deplasare i se stabilesc noii bii la ieiri. Aceti bii vor fi eantionai cu frontul urmtor al tactului (frontul nr. 3) etc. Ultimul bit este eantionat cu frontul 15 al tactului. Dup frontul 16 al tactului ieirea MOSI trece n 1 logic iar la ieirea MISO este transferat primul bit din octetul urmtor. La transmisii succesive n modul Slave, linia SS trebuie trecut pentru un timp scurt n 1 logic ntre octei, altfel se va recepiona numai ultimul octet.

92

11.2. Descrierea blocului SPI


Nr. front SCK SCK pentru CPOL=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

SCK pentru CPOL=1 Eantionare MOSI/MISO

Tranziia de la ieirea MOSI Tranziia de la ieirea MISO Pin /SS

nceput transfer

CPHA=0

Sfrit transfer Un nou transfer

Figura 11.5. Formatul de transfer 0 (SPICR1_CPHA=0).


Nr. front SCK SCK pentru CPOL=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

SCK pentru CPOL=1 Eantionare MOSI/MISO

Tranziia de la ieirea MOSI Tranziia de la ieirea MISO Pin /SS

nceput transfer

CPHA=1

Sfrit transfer Un nou transfer

Figura 11.6. Formatul de transfer 1 (SPICR1_CPHA=1).

n figura 11.6 este prezentat formatul 1 de transfer corespunztor valorii SPICR1_CPHA=1. Acest caz corespunde dispozitivelor SPI Slave care necesit un front activ de tact pentru a depune la ieirea MISO primul bit. Deplasarea primului bit la ieirea MISO se realizeaz cu primul front al tactului (frontul 1). La urmtorul front al tactului (frontul 2) se realizeaz eantionarea intrrilor. Cu frontul urmtor al tactului (frontul 3) se realizeaz deplasarea biilor din registrele
93

BLOCUL SPI

de deplasare i se stabilesc noii bii la ieiri. Aceti bii vor fi eantionai cu frontul urmtor al tactului (frontul nr. 4) etc. Ultimul bit este eantionat cu frontul 16 al tactului. Datele de emisie i recepie se vehiculeaz prin registrul de date SPIDR. Pentru emisia i recepia corect trebuie analizai indicatorii de ntrerupere sau trebuie de rspuns la ntreruperile generate. Indicatorii de ntrerupere i biii de validare sunt prezentai n tabelul 11.2.
Tabelul 11.2. Indicatorii i biii de validare a ntreruperilor.
Indicatorii de ntrerupere SPISR_SPIF Biii de validare SPICR1_SPIE Observaii ntrerupere generat la recepia complet a unui caracter i transferul acestuia n registrul de date SPIDR. Se terge la citirea registrului SPISR (a bitului SPISR_SPIF) urmat de citirea registrului de date SPIDR. ntrerupere generat la detectarea nivelului 0 pe linia de intrare /SS n modul Master cu bitul SPICR2_MODFEN =1. ntrerupere generat la transferul datei de emisie n registrul de deplasare. tergerea bitului se realizeaz prin citirea registrului SPISR (a bitului SPISR_SPTEF) urmat de ncrcarea registrului de date SPIDR.

SPISR_MODF SPISR_SPTEF SPICR1_SPTIE

11.3. Registrele ataate blocului SPI


SPICR1 SPICR2 SPIBR SPISR SPIDR SPIE0 x0 x0 SPIF0R BIT70 SPE0 x0 SPPR20 x0 BIT60 SPTIE0 x0 SPPR10 SPTEF1R BIT50 MSTR0 MODFEN0 SPPR00 MODF0R BIT40 CPOL0 BIDIROE0 x0 x0 BIT30 CPHA1 x0 SPR20 x0 BIT20 SSOE0 SPISWAI0 SPR10 x0 BIT10 LSBFE0 SPCO0 SPR00 x0 BIT00

Legend: notaia biilor Bita din registre: Bit numele bitului, x bit neimplementat (se citete 0 iar scrierea nu are efect); a valoare de reset, R bit de tip read only.

11.4. Programarea blocului SPI


Programarea blocului SPI depinde foarte mult de configuraia n care acesta va funciona (mod normal, mod bidirecional, funcionare sau nu n ntreruperi, dac se utilizeaz i emisia i recepia sau numai una dintre acestea, dac se utilizeaz legtura SS , funcionarea n modul de detectarea erorilor etc.). Aceste aspecte se selecteaz din registrele SPICR1 i SPICR2. n modul Master mai trebuie programat i rata de transfer (se va utiliza relaia 11.1 i registrul SPIBR). Scrierea i citirea registrului de date SPIDR se va face n urma testrii indicatorilor de ntrerupere SPISR_SPTEF i SPISR_SPIF. Dm un exemplu de programare a blocului SPI pentru urmtoarea configuraie: mod normal de funcionare, fr ntreruperi, Master, se utilizeaz legtura /SS, primul bit care se transmite este MSB, formatul de transfer al datelor
94

11.4. Programarea blocului SPI

este formatul 1 cu polaritatea iniial 1 a tactului, funcionare normal n modul de ateptare, rat de transfer 1 Mbit/s (pentru fBUS = 8 MHz).
void SPIInit(void) {
SPICR1=0b01011110; SPICR2=0b00010000; SPIBR=0x02; } //SPIE=0, SPE=1, SPTIE=0, MSTR=1, CPOL-CPHA=11, SSOE=1, LSBFE=0 //X, X, X, MODFEN=1, BIDIROE=0, X, SPIWAI=0, SPCO=0 //X,SPPR2=0,SPPR1=0,SPPR0=0, X,SPR2=0, SPR1=1, SPR0=0, divizare prin 8

Scrierea unui caracter n vederea emisiei se face cu secvena:


while(!SPISR_SPTEF); SPIDR=char; .................................. //ateapt ca registrul de date SPIDR s fie disponibil //ncarc char n registrul de date

Citirea unui caracter recepionat se va face cu secvena:


while(!SPISR_SPIF); char=SPIDR; .................................. //ateapt ca registrul de date SPIDR s recepioneze un caracter //ncarc registrul SPIDR n char

Note bibliografice
[1] Peripheral Interface (SPIV3) Block Description) Block 01.24, 05/2010, Freescale Semiconductors.
MC9S12C Family/MC9S12GC Family Reference Manual (Chapter 14 Serial Description), Rev

95

S-ar putea să vă placă și