Documente Academic
Documente Profesional
Documente Cultură
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
BLOCUL SPI
(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
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
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 .
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
nceput transfer
CPHA=0
nceput transfer
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.
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.
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
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