SPI nei PIC



INTRODUZIONE

In questa tutorial analizzeremo la interfaccia SPI (Serial Peripheral Interface) e come questa è usata per trasferire i dati da/verso i microcontrollori PIC. Il protocollo SPI è frequentemente usato quando sono disponibili poche linee di ingresso/uscita, ma la comunicazione fra due o più dispositivi deve essere veloce e facile da effettuare. In primo luogo faremo una descrizione generale del protocollo SPI introducendo i concetti di base. Successivamente esamineremo l'uso della interfaccia SPI sui  MCU PIC esaminando nei dettagli come la SPI e' implementata in essi. Infine verrà mostrato un esempio di codice in cui saranno messi in evidenza le parti di codice relative al master e allo slave. Altre info nel tutorial SPI

Generalità sulla SPI

La acronimo SPI, che sta per Serial Peripheral Interface, si riferisce ad una periferica di interfaccia con caratteristiche seriali. Nella comunicazione SPI sono presenti un unico dispositivo principale detto " MASTER" e un certo numero di dispositivi secondario detti "SLAVE" connessi al MASTER mediante un bus a 4 fili su ci viaggiano i segnali necessari alla comunicazione SPI trai i vari dispositivi. 
L' SPI  usa i seguenti segnali per serializzare lo scambio di dato con un altro dispositivo:

SS - Questo segnale è conosciuto come "SLAVE Select ". Quando passa a livello basso, il dispositivo slave si mette in attesa pronto ad ascoltare il segnali di clock e i dati.

SCK - clock seriale generato dal MASTER che controlla l'invio e la ricezione dei dati

SDO - linea di uscita seriale dei dati di uscita da un dispositivo all'altro.

SDI - linea di ingresso seriale dei dati in ingresso ad un dispositivo SPI

I dati sono "scambiati" sempre fra i vari dispositivi collegati al bus. Nessun dispositivo può essere solo un trasmettitore o solo un ricevitore nel protocollo SPI. Ogni dispositivo ha due linee di dati, una di ingresso SDI e una di uscita SDO
Lo scambio di dati e' scandito da un segnale di temporizzazione detto clock presente sulla linea denominata con SCK.  Il clock e' generato dal MASTER che, tramite esso,  sincronizzazione gli eventi, controlla quando i dati possono cambiare in uscita e quando possono essere letti. Soltanto il dispositivo MASTER può controllare la linea di clock SCK. Questo e' un vantaggio  perché il clock può variare senza distruggere o corrompere i dati. La frequenza dei dati (data rate) cambierà semplicemente con i cambiamenti del clock. Ciò rende l' SPI ideale quando si  ha un clock impreciso come nel caso in cui si utilizzi un oscillatore RC.

La sincronizzazione con il segnale di clock SCK dei dati in uscita sul bus SDO avviene in corrispondenza dei fronti di salita o di discesa del clock. I dati presenti sul bus di ingresso SDI vengono logicamente letti in corrispondenza del fronte opposto a quello in cui si effettua il cambiamento in uscita. Si suppone che nel punto di lettura i dati siano gia validi. In figura 1 e' mostrato un esempio della comunicazione SPI

Fig. 1 diagramma temporale dei segnali SCK,SDO e SDI 

Le frecce indicano quando si verifica un fronte (salita o discesa) del clock e dei segnali su SDO. Nel caso del SDI il dato e' campionato sul fronte del clock opposto a quello in cui cambia l'uscita. La modalità di comunicazione SPI mostrata in figura e' detta SPI mode 1,1.
Tutti i dispositivi SLAVE, collegati allo stesso BUS, sono controllati dal clock generato dal l'unico MASTER che controlla il bus. I dispositivi SLAVE non possono controllare o alterare il segnale di clock.
Quando  nel sistema esiste più di uno SLAVE per selezionare il dispositivo con cui comunicare il MASTER  attiva il segnale conosciuto come SS (SLAVE Select). Il segnale è spesso attivo al livello basso per migliorare l'immunità al rumore del sistema. La relativa funzione è di resettare lo SLAVE in modo che sia pronto a ricevere il byte successivo.