Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper...

30
na_SPI 1 Corso introduttivo sui microcontrollori A. S. 2013 – 2014 Il Bus SPI (Serial Peripheral Interface) Vedi anche: l’interfaccia SPI di Mauro Laurenti [http://www.Laurtec.it] Nicola Amoroso [email protected]

Transcript of Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper...

Page 1: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 1

Corso introduttivo sui

microcontrollori

A. S. 2013 – 2014

Il Bus SPI (Serial Peripheral Interface)Vedi anche: l’interfaccia SPI di Mauro Laurenti [http://www.Laurtec.it]

Nicola Amoroso

[email protected]

Page 2: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 2

Il Bus SPI

Il Serial Peripheral Interface o SPI è un sistema di comunicazione tra unmicrocontrollore e opportune periferiche o tra più microcontrollori.

È un bus standard di comunicazione introdotto dalla Motorola (ora FreeScale) esviluppato, in una sua variante, anche dalla National Semiconductor (acquisito daTexas Instruments) con il nome di bus MicrowireTM

La trasmissione avviene tra un dispositivo detto master e uno o più slave. Ilmaster controlla il bus, emette il segnale di clock, decide quando iniziare eterminare la comunicazione.

Il bus SPI si definisce:• di tipo seriale• sincrono per la presenza di un clock che coordina la trasmissione e ricezione

dei singoli bit e determina la velocità di trasmissione• Full duplex in quanto il "colloquio" può avvenire contemporaneamente in

trasmissione e ricezioneDa Wikipedia, l'enciclopedia libera

Page 3: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 3

Il Bus SPI

Il bus SPI è un bus di comunicazione seriale a quattro fili master/slave.

I quattro segnali sono clock (SCLK), output master/input slave (MOSI), input master/output slave (MISO) e select slave (SS).

Ogni volta che due dispositivi comunicano, uno si identifica come master e l’altro come slave. Il master guida il clock seriale. I dati vengono simultaneamente trasmessi e ricevuti, rendendolo un protocollo full-duplex.

Piuttosto che avere indirizzi unici per

ogni dispositivo sul bus, SPI usa la linea

SS per specificare quale dato viene

trasferito verso o dal dispositivo.

Quindi, ogni dispositivo sul bus necessita il suo proprio segnale SS dal master. Se ci sono tre dispositivi slave, allora esistono tre guide SS provenienti dal master, una per ogni slave, come evidenziato in figura.

Page 4: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 4

Il Bus SPI

Ogni volta che due dispositivi comunicano, uno si identifica come master e

l’altro come slave.

Il master gestisce il clock seriale. I dati vengono simultaneamente trasmessi e

ricevuti, rendendo la comunicazione full-duplex.

MOSI : Master Output Slave InMISO : Master Input Slave OutputSCLK : Serial Clock (generato dalMaster)SS : Slave Select (Selezione delloSlave)

Oltre a questa nomenclatura, più o meno standard, possono esistere altre denominazioni.

Per esempio i microcontrollori PIC18 della Microchip, fanno uso di una nomenclatura leggermente differente

ma comunque intuitiva.

Per esempio la linea MOSI viene anche nominata: SDO (Serial Data Out), DO (Data Out), DOUT e SO

(Serial Out)

La linea MISO viene anche nominata: SDI (Serial Data In), DI (Data In), DIN e SI (Serial In)

La linea di Clock viene anche nominata: CLK, SCK (Serial Clock), SCK.

La linea di Enable viene anche nominata: CS (Chip Select), CE (Chip Enable)

Page 5: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 5

Il Bus SPI

La comunicazione SPI prevede la presenza di un SS (Slave Select), per cui

anche se la comunicazione avviene tra un solo Master e un solo Slave, il

Master può selezionare lo Slave con cui avviare la comunicazione, sia per

scrivere che leggere dati.

Nel caso di collegamento con più slave, si ha ancora un unico Master, che ha ilcompito di selezionare lo Slave con il quale avviare la comunicazione; infatti un

solo Slave alla volta deve essere attivo.

Questo collegamento è possibile solo se la periferica

Slave supporta l’opzione di avere la linea MISO di

tipo three states o floating (alta impedenza).

In particolare lo stato di alta impedenza deve

essere impostato ogni qual volta lo Slave risulti

disattivo.

Questo è richiesto poiché tutti i MISO sono collegati

in parallelo, e non è cosa buona avere uscite in

parallelo che abbiano livelli logici differenti (si

potrebbero avere dei cortocircuiti che porterebbero

alla rottura dei dispositivi stessi).

Page 6: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 6

Il Bus SPI

Mentre il master riversa bit sulla linea MOSI lo slave può a sua volta inviare dati al master

utilizzando la linea MISO (trasmissione full duplex)

La semplicità dell'hardware non ha indotto a sviluppare specifiche ufficiali

Il protocollo di comunicazione è libero

In alcuni casi, quando la comunicazione dallo slave al master non è richiesta, il segnale MISO può essere

escluso totalmente.

La dimensione del registro a scorrimento non è specificata, ma spesso la sua dimensione è di 8 bit.

In microcontrollori a 16 o 32 bit, per la dimensione stessa dei registri interni , si può spesso avere l’opzione di

selezionare la dimensione del registro, usando le dimensioni comuni 8, 16, 32 bit.

Il meccanismo hardware utilizzato

è molto semplice.

Il componente base è uno shift register (per

lo più a 8 bit) presente sia nel master che

nello slave.

Page 7: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 7

Il Bus SPIla trasmissione di un byte

Dopo l’attivazione dello Slave, i bit interni al registro a scorrimento del Master vengono traslati all’esterno

(linea MOSI) a partire dal bit più significativo MSB (Most Significant Bit).

Il bit traslato entra nel registro dello Slave, il quale a sua volta inizia a svuotare il proprio registro inviando il

bit più significativo attraverso la linea MISO. La comunicazione termina quando l’ottavo bit viene trasmesso.

Da quanto detto si capisce che se il Master volesse leggere dallo Slave deve comunque inviargli un dato

fittizio. Allo stesso modo, se il Master volesse solo impostare lo Slave o inviare solo Dati, riceverà

comunque dei dati fittizi, a meno di ignorare e non collegare la linea MISO.

Prima di avviare una comunicazione, il

Master attiva la linea SS relativa allo

Slave con cui vuole effettuare la

comunicazione e successivamente il

clock alla frequenza con cui avverrà la

trasmissione.

Page 8: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 8

Il Bus SPILa trasmissione di un byte

Rispetto a quanto appena detto ci sono naturalmente delle eccezioni, in particolare la linea SS potrebbe

non essere usata qualora nel sistema si abbia un solo Slave.

In alcune periferiche, quali per esempio gli ADC (Analog to Digital Converter), la linea SS è quasi sempre

obbligatoria, visto che oltre a rappresentare la linea Slave Select, svolge spesso la mansione di avvio

conversione (Start Conversion).

In situazioni come queste potrebbe essere necessario ritardare il Clock prima di poter effettivamente

leggere il risultato della conversione.

E’ bene tenere presente che diversi microcontrollori hanno l’opzione di trasmettere il byte in uscita non a

partire dal bit più significativo ma da quello meno significativo (comunicazione 3 Wire half-duplex [3 Wire

communication in cui la linea SS è presente ma le linee MOSI e MISO sono unite in una unica linea per

formare una comunicazione half-duplex]).

Come ogni opzione utilizzata si deve avere la premura di controllare che lo Slave sia compatibile con tale

opzione.

Il modulo SPI è spesso supportato da interrupt in modo da poter armonizzare l’utilizzo dello

stesso con il resto delle attività della CPU

Page 9: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 9

Il Bus SPIConnessione daisy-chained (connessione a catena)

Abbiamo precedentemente visto la possibilità di connessione di un Master con più Slave

mediante il collegamento di selezione SS (una linea di selezione per ogni slave); esiste

comunque un altro modo con cui si possono collegare tra loro più Slave, il daisy-

chained (connessione a catena).

La catena di Slave è ottenuta collegando l’uscita MISO

del primo Slave all’ingresso MOSI del Secondo Slave e

cosi via. L’ultimo Slave avrà il MISO collegato al Master.

La catena di Slave viene attivata da una sola linea SS,

quindi si ha la possibilità di risparmiare diversi pin

altrimenti necessari per ogni singolo Slave.

Per comunicare con un dispositivo è necessario inviare

sempre tre byte (uno per periferica) anche se il

dispositivo con cui si vuole colloquiare è il primo (in

lettura è obbligatorio, mentre in sola scrittura si potrebbe

evitare).

Questa configurazione, seppur interessante non permette di collegare un numero elevato di periferiche.

A seconda della frequenza del segnale di clock e dalla tipologia delle periferiche utilizzate potrebbe essere

necessario dover rispettare dei tempi minimi e massimi di lettura o scrittura.

Page 10: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 10

Il Bus SPILa modalità di comunicazione

La trasmissione dei dati sul bus SPI si basa sul

funzionamento dei registri a scorrimento (shift register).

Ogni dispositivo sia master che slave è dotato di un

registro a scorrimento interno i cui bit vengono emessi

e, contemporaneamente, immessi, rispettivamente,

tramite l'uscita MOSI e l'ingresso MISO. Il registro può

avere dimensione arbitraria (ma uguale per i dispositivi

master e slaves) anche se usualmente ha la

dimensione di 8 bit.

Il registro a scorrimento è un'interfaccia completa mediante la quale vengono impartiti comandi e trasmessi

dati che arrivano in modo seriale ma che internamente sono prelevati, a fine trasmissione, in modo parallelo.

Ad ogni impulso di clock i dispositivi che stanno comunicando sulle linee del bus emettono un bit dal loro

registro interno rimpiazzandolo con un bit emesso dall'altro interlocutore.

La sincronizzazione è fatta sui fronti di clock di salita o di discesa regolata da 2 parametri

impostabili: CPOL e CPHA.

Da Wikipedia, l'enciclopedia libera

Page 11: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 11

Il Bus SPILa modalità di comunicazione

A seconda del valore cheassumono i due parametriCPOL e CPHA restano definiti4 modi di funzionamento

CPOL regola la polarità del clock ovvero determina lo stato normale di riposo cui si porta la linea di

clock quando non è attivo

CPOL =0, il clock, nel suo stato di riposo, si porta a livello logico basso;

CPOL = 1, il clock si porta a livello logico alto durante il tempo di inattività

CPHA regola il fronte di clock in cui il ricevente campiona il segnale in ingresso.

Se CPOL=0, impostando CPHA=0 si può campionare il dato sul fronte di discesa del segnale di clock,

impostando CPHA=1 si può campionare il dato sul fronte di salita del segnale di clock

Se CPOL=1, impostando CPHA=0 si può campionare il dato sul fronte di salita del segnale di clock,

impostando CPHA=1 si può campionare il dato sul fronte di discesa del segnale di clock.

Alcuni microcontrollori, come per esempio i PIC18, richiedono CPHA invertito.

Se secondo lo standard Freescale si richiede la modalità CPOL=0 e CPHA=0, per questi microcontrollori potrebbe

essere CPOL=0 e CPHA=1.

Page 12: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 12

Il Bus SPILa modalità di comunicazione

CPOL, come detto, definisce la modalità dei fronti (salita/discesa) del segnale di clock sul quale

avvengono determinate operazioni. Consideriamo il caso CPOL=0, CPHA=1 (mode 1)

1- Il Master attiva lo Slave Select 2- Il Master attiva il Clock 3- Sul fronte di salita del

clock il bit MSB dei registri a scorrimento interni, viene posto sulla linea MOSI (dal Master) e sulla linea MISO

(dallo Slave) 4- Sul fronte di discesa il Master e lo Slave campionano (sampling) il bit e lo traslano nel registro

interno 5- Sul nuovo fronte di salita il nuovo bit viene posto sulle linee MOSI e MISO 6- Identica

procedura fino all’ultimo bit ….

2

1

6………4

3 5

Page 13: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 13

Il Bus SPIModalità di comunicazione

Nel caso in cui CPOL=1 e CPHA=1 (mode 3), in corrispondenza dei fronti di discesa i bit vengono

messi sulle linee di uscita MOSI (il master) e MISO (lo slave) mentre il campionamento avviene in

corrispondenza del fronte di salita del segnale di clock.

Nel funzionamento in mode 1 (CPOL=0, CPHA=1) e in quello in mode 3 (CPOL =1, CPHA=1) la

linea SS rimane attiva per tutta la trasmissione. Se ulteriori byte devono essere inviati, la linea SS può

rimanere ininterrottamente attiva; questo significa che moduli con interfaccia SPI con registri a 8 bit,

possono leggere e scrivere periferiche che hanno registri a scorrimento a 16 bit (come anche 3

o più byte).

Page 14: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 14

Il Bus SPIModalità di comunicazione

Consideriamo il caso CPOL=0, CPHA=0 (mode 0)

1- Il Master attiva lo Slave Select 2- Sul fronte di discesa del segnale SS il bit MSB dei registri a

scorrimento interni, viene posto sulla linea MOSI (dal Master) e sulla linea MISO (dallo Slave) 3- Il Master

attiva il Clock 4- Sul fronte di salita il Master e lo Slave campionano (sampling) il bit e lo traslano nel

registro interno 5- Sul nuovo fronte di discesa il nuovo bit viene posto sulle linee MOSI e MISO

6- Identica procedura fino all’ultimo bit ….

2

1

6………4

3

5

Page 15: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 15

Il Bus SPIModalità di comunicazione

Nel caso in cui CPOL=1 e CPHA=0 (mode 2), Sul fronte di discesa del segnale SS il bit MSB dei

registri a scorrimento interni, viene posto sulla linea MOSI (dal Master) e sulla linea MISO (dallo

Slave), gli altri bit in corrispondenza dei fronti di salita del segnale di clock vengono messi sulle

linee di uscita MOSI (il master) e MISO (lo slave); il campionamento avviene invece, in

corrispondenza del fronte di discesa del segnale di clock.

Per funzionamento in mode 0 e mode 2 è necessario che ad ogni invio di byte la linea SS venga

disattivata e riattivata. Infatti il bit MSB viene posto rispettivamente sulle linee MOSI e MISO sul

fronte di discesa della linea stessa. In queste modalità si capisce che non si può fare a meno della

linea SS e che master con registri interni a 8 bit possono colloquiare solo con Slave che hanno il

registro interno di ugual dimensione.

Page 16: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 16

Il Bus SPILa comunicazione SPI nei PIC

Nei dispositivi PIC è presente un modulo hardware, chiamato SSP o MSSP, che permette di

implementare il protocollo SPI e I2C. La sigla SSP (Synchronous Serial Port) ovvero porta seriale

sincrona vale sia per a comunicazione SPI che per quella I2C. La lettera M presente nell'acronimo

MSSP sta per MASTER e si riferisce all'I2C e non riguarda le prestazioni del protocollo SPI, per cui

per l'SPI si possono usare entrambi i moduli SSP o MSSP.

Nei microcontrollori PIC della Microchip, per la rappresentazione dei segnali di comunicazione, spesso si usa

una nomenclatura leggermente differente ma comunque intuitiva.

Per esempio la linea MOSI viene anche nominata: SDO (Serial Data Out), DO (Data Out), DOUT e SO

(Serial Out)

La linea MISO viene anche nominata: SDI (Serial Data In), DI (Data In), DIN e SI (Serial In)

La linea di Clock viene anche nominata: CLK, SCK (Serial Clock), SCK.

La linea di Enable viene anche nominata: CS (Chip Select), CE (Chip Enable)

Page 17: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 17

Il Bus SPILa comunicazione SPI nei PIC

il modulo SSP nella configurazione SPI utilizza alcuni registri interni dedicati e un blocco di controllo. Questo

blocchetto, denominato CONTROL ha funzioni diverse a seconda della natura del dispositivo: nel caso del

dispositivo MASTER genera e trasmette il clock sulla linea SCK e attiva il segnale SS in base al codice: SS

è messo basso (attivo basso) durante il trasferimento ed è riportato al livello alto alla fine della stessa. Nel

caso di un dispositivo SLAVE il blocco CONTROL riceve i segnali SCK e SS inviati dal MASTER e li usa per

processare i dati SPI presenti sulla linea SDI

Se più dispositivi SLAVE sono connessi al bus:

solo il dispositivo SLAVE con il segnale SS

basso è coinvolto nella comunicazione mentre i

rimanenti SLAVE con il segnale SS alto non

sono interessati allo scambio di dati.

In una tipica connessione SPI realizzata mediante micro che dispongono del modulo SSP I dati di uscita dal

MASTER sono presenti sulla linea SDO mentre i dati in ingresso al MASTER sono presenti sulla linea SDI. Il

segnale di clock, generato dal MASTER, è presente sulla linea SCK. La linea SS permette al MASTER di

selezionare un determinato dispositivo SLAVE.

Page 18: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 18

Il Bus SPILa comunicazione SPI nei PIC

Quando si usa la SPI nei PIC, bisogna settare correttamente alcuni registri. Poiché ci sono modi differenti

di settare l'SPI e un certo numero di dispositivi differenti, i valori per regolare questi registri

possono variare e devono essere valutati di caso in caso. Conviene comunque sempre consultare il

datasheet del dispositivo per avere maggiori dettagli.

Il modulo MSSP ha 4 registri associati per la comunicazione SPI:

• MSSP Control Register 1 (SSPCON1)

• MSSP Status Register (SSPSTAT)

• Serial Receive/Transmit Buffer Register (SSPBUF)

• MSSP Shift Register (SSPSR) Not directly accessible

SSPCON1 e SSPSTAT sono i registri di controllo e di stato; configurando opportunamente alcuni bit di

questi registri, si definiscono le modalità operative nella comunicazione SPI.

Come visto in precedenza, considerando le indicazioni Motorola (FreeScale), lo scambio dei dati tra il master

e lo slave può avvenire secondo Quattro diverse modalità. La sincronizzazione è fatta sui fronti di clock di

salita o di discesa regolata da 2 parametri impostabili: CPOL e CPHA

Page 19: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 19

Il Bus SPILa comunicazione SPI nei PIC

A seconda del valore cheassumono i due parametriCPOL e CPHA restano definiti4 modi di funzionamento

CPOL regola la polarità del clock ovvero determina lo stato normale di riposo cui si porta la linea di clock

quando non è attivo, CPHA regola il fronte di clock in cui il ricevente campiona il segnale in ingresso.

Nei Pic i quatto differenti modi operativi, nella comunicazione SPI, vengono impostati mediante due

particolari bit dei registri SSPCON1 e SSPSTAT indicati in precedenza e precisamente:

1. CKP (Clock Polarity, equivalente a CPOL) 2. CKE (Clock edge, equivalente a CPHA)

Come si può notare, CKP è identico a

CPOL, mentre CKE è complementare

rispetto a CPHA per i quattro differenti

modi operativi

Page 20: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 20

Il Bus SPILa comunicazione SPI, considerazioni

La comunicazione SPI non ha una frequenza operativa prefissata o standard, ed in particolare lavorando

sui fronti del clock non è nemmeno necessario che abbia valori particolari (per esempio non c’è un valore

minimo formale sotto il quale non si può andare). Questa peculiarità discende dal fatto che il clock è fornito

dal Master e lo Slave si adegua a quest’ultimo. Applicazioni con interfaccia SPI fanno uso di comunicazioni

a frequenze che partono da poche decine di KHz fino ad arrivare a decine di MHz (80MHz-100MHz). Il

limite massimo viene a dipendere dalle periferiche di cui si sta facendo uso. Per esempio molti

microcontrollori supportano frequenze massime fino a 10MHz.

L’interfaccia SPI, oltre a non specificare la frequenza operativa non impone alcun vincolo sulle tensioni che

caratterizzano i livelli logici. Ciononostante si capisce che due dispositivi al fine di comunicare tra loro

debbano lavorare con gli stessi livelli logici, altrimenti non si potrebbero capire. Qualora due dispositivi

lavorino a tensioni diverse, per esempio uno a 3.6V e uno a 5V, è necessario far uso di traslatori di livello.

Valori tipici di tensione sono: 1.8V, 3.3V, 3.6V e 5V.

Device e applicazioni tipiche che fanno uso dell'interfaccia SPI sono: Real Time Clock Calendar, Memorie

RAM, Memorie EEPROM, Amplificatori a Guadagno variabile, Controllori video, convertitori analogico

digitali (ADC), convertitori Digitali Analogico (DAC).

Page 21: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 21

Il Bus SPIEsempio comunicazione SPI, na_TC72

Vediamo ora un semplice esempio di comunicazione SPI tra un microcontrollore Pic18F4620 e un device

della MicroChip, il sensore digitale di temperatura TC72.

Il Pic18F4620 include un modulo hardware per la comunicazione seriale, il MASTER SYNCHRONOUS

SERIAL PORT (MSSP) MODULE.

Il modulo MSSP gestisce la comunicazione seriale con opportune periferiche o altri microcontrollori in due

possibili modalità operative: 1. Serial Peripheral Interface (SPI) 2. Inter-Integrated Circuit (I2C - Full

Master mode e Slave mode (with general address call)).

Ogni modalità operativa può essere selezionata mediante il setup di opportuni bit in alcuni registri speciali

del microcontrollore (cfr. Data Sheet pic18f4620).

Per il setup della modalità di comunicazione, per il nostro esempio, sfrutteremo la semplicità applicativa del

Pic Wizard in dotazione al CCS Pic-C compiler.

Dal Data Sheet del TC72, nella sezione relativa alla modalità di comunicazione seriale si evidenzia che il

device opera come slave, è compatibile con le specifiche del bus SPI e il modo operativo può essere il

mode 1 oppure il mode 3.

Page 22: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 22

Il Bus SPIEsempio comunicazione SPI, na_TC72

Come visto in precedenza, ricordiamo che i possibili modi operativi nella comunicazione SPI, per i

microcontrollori MicroChip, sono leggermente diversi rispetto a quanto introdotto originariamente da

Freescale (Motorola).

A seconda del valore che

assumono i due parametri

CPOL e CPHA restano

definiti 4 modi di

funzionamento

(FreeScale/Motorola)

Nei Pic i quatto differenti modi operativi, nella comunicazione SPI, vengono

impostati mediante due particolari bit dei registri SSPCON1 e SSPSTAT e

precisamente:

1. CKP (Clock Polarity, equivalente a CPOL) 2. CKE (Clock edge, equivalente a

CPHA)

Come si può notare, CKP è identico a CPOL, mentre CKE è complementare rispetto a CPHA per i

quattro differenti modi operativi

Page 23: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 23

Il Bus SPIEsempio comunicazione SPI, na_TC72

Lo schema elettrico e di simulazione – Proteus Isis/VSM

Page 24: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 24

Il Bus SPIEsempio comunicazione SPI, na_TC72

Di seguito il codice sorgente per l’esempio considerato; il codice è opportunamente commentato e di facile

comprensibilità. Naturalmente è indispensabile consultare il data-sheet del TC72 per seguire quanto

riportato.

CCS Pic wizard setup -> Impostazioni device

Page 25: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 25

Il Bus SPIEsempio comunicazione SPI, na_TC72

Di seguito il codice sorgente per l’esempio considerato; il codice è opportunamente commentato e di facile

comprensibilità. Naturalmente è indispensabile consultare il data-sheet del TC72 per seguire quanto

riportato.

CCS Pic wizard setup -> Impostazioni modalità di comunicazione

Main source file [na_TC72hw.c] – Impostazioni modulo

MSSP per comunicazione SPI del pic18F4620

Page 26: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 26

Il Bus SPIEsempio comunicazione SPI, na_TC72

Na_TC72hw.c – Main source file

Page 27: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 27

Il Bus SPIEsempio comunicazione SPI, na_TC72

Na_TC72.c – Library file

TC72 Library file – Set modalità operativa del device

Page 28: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 28

Il Bus SPIEsempio comunicazione SPI, na_TC72

Na_TC72.c – Library file

TC72 Library file – Lettura valori di temperatura

Page 29: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 29

Il Bus SPIEsempio comunicazione SPI, na_TC72

Na_TC72.c – Library file

TC72 Library file – Composizione stringa valori letti

Page 30: Corso introduttivo sui microcontrollori - …²selezionareloSlaveconcuiavviarelacomunicazione,siaper scriverecheleggeredati. Nelcasodicollegamentoconpiùslave,sihaancoraununicoMaster,chehail

na_SPI 30

Il Bus SPIEsempio comunicazione SPI, na_TC72

Na_TC72.c – Library file

TC72 Library file – Rappresentazione su display della stringa