vuoi
o PayPal
tutte le volte che vuoi

Martini Francesco CL. 5 ECA 2007/2008
TESINA
OGGETTO: Studio di un sistema di comunicazione tra più dispositivi: il
Protocollo IIC ( Inter Integrated Circuit)
1.1 INTRODUZIONE:
Un sistema di comunicazione è un complesso di dispositivi e regole che gestiscono la comunicazione
affinché questa si portata a buon fine. Le regole che permettono questo sono chiamate protocolli. Uno di
questi è il protocollo IIC che è stato brevettato dalla Philips, il quale prevede la comunicazione di due o più
dispositivi attraverso l’utilizzo di un bus composto da due linee. Questo sistema di comunicazione è
presente in molti microcontrollori ma anche altri dispositivi integrano questo modello che gli permette di
comunicare. Un esempio di dispositivo che integra questo modulo di comunicazione è il microcontrollore
MC9S08QG8 della Freescale utilizzato per l’appunto durante l’area di progetto per realizzare un sistema di
comunicazione con questo protocollo.
1.2 SPECIFICHE DEL PROTOCOLLO:
Iniziamo chiarendo il concetto di bus attraverso il quale avviene la comunicazione. Come abbiamo già detto
è costituito da due linee una chiamata “sda” e l’altra “scl”: la prima è utilizzata per la trasmissione dei
pacchetti dati mentre la seconda trasmette il segnale di clock, indispensabile per la sincronizzazione dei vari
dispositivi. Gli stati, che possono rappresentare le due linee, sono i livelli logici alto e basso (1 e 0) che
corrispondono rispettivamente alla tensione di alimentazione e a quella di massa. Entrambe le due linee
vengono collegate alla tensione di alimentazione attraverso una resistenza di pull‐up che consente loro di
essere ad un livello leggermente inferiore di quello alto ma che permette hai vari dispositivi di imporre il
loro valore desiderato. In questa situazione se accidentalmente due dispositivi impongono un livello nello
stesso istante, il primo impone “1” mentre il secondo “0”, sarà l’ultimo ad imporsi sul primo.
1.2.1 IDENTIFICAZIONE DEI DISPOSITIVI:
Fondamentale nella comunicazione è saper identificare i dispositivi che comunicano o quelli a cui è rivolta
la comunicazione, e proprio per questo ogni dispositivo è caratterizzato da un identificatore formato da 7 o
10 bit. Quindi perché avvenga il riconoscimento prima di trasmettere il dato viene sempre trasmesso
l’identificatore del dispositivo. 1
1.2.2 CLASSIFICAZIONE DEI DISPOSITIVI:
In questo protocollo è fondamentale effettuare una distinzione tra i due tipi di dispositivi che possono
comporre il sistema, ossia il “master” e lo “slave”. Il dispositivo master è quello centrale, che genera il
segnale di clock per la sincronizzazione e che impartisce ordini e richieste di dati agli altri dispositivi, in un
sistema possono essere presenti più dispositivi master. Il dispositivo slave invece svolge la funzione di
eseguire funzione in base ai comandi del master oppure invia dei dati in base sempre alle richieste
impartite dal master. Si deve precisare che una qualsiasi comunicazione ha inizio grazie al dispositivo
master quindi si possono distinguere principalmente due modi di trasmissione:
I. Il primo quando il dispositivo master voglia inviare dei comandi al dispositivo slave: in questo caso
la comunicazione ha inizio con l’invio dell’identificatore del dispositivo con cui si intende
trasmettere, successivamente si può inviare il comando che sarà ricevuto dallo slave e infine sarà il
master a terminare la comunicazione.
II. Il secondo quando il dispositivo master vuole ricevere dei dati dallo slave: in questo caso il
dispositivo master invia l’indirizzo dello slave con la richiesta di ricezione dei dati, a questo punto è
lo slave che trasmette l’indirizzo del master seguito dall’informazione, anche in questo caso alla
fine il dispositivo master termina la comunicazione.
1.2.3 EVENTI DURANTE LA TRASMISSIONE:
Sostanzialmente sono due gli eventi che durante una trasmissione sono fondamentali per la riuscita della
comunicazione e questi sono la sincronizzazione e l’arbitraggio.
La sincronizzazione è indispensabile in sistemi in cui ci sono dispositivi che funzionano a velocità differente,
quindi c’è la necessità di sincronizzare i due clock in modo da non perdere informazione. Questo processo
avviene sfruttando la prevalenza dei semi periodi positivi e negativi nei due segnali di clock dei dispositivi.
Cioè quando in un intervallo di tempo tutti e due i segnali impongono scl a livello alto, la linea è
effettivamente a livello alto, poi avremo una semionda negativa che sarà uguale a quella maggiore tra i due
segnali di clock e una semionda positiva che è uguale a quella più breve tra i due segnali di clock. Nella
figura sottostante è rappresentato in maniera evidente come avviene la sincronizzazione:
Il secondo importante evento citato sopra è quello dell’arbitraggio, che consente la presenza di più
dispositivi che svolgono la funzione di master, riuscendo a gestire la comunicazione ed evitando che ci siano
dispositivi che nello stesso istante cerchino di trasmettere con relativa perdita di informazione. Questo
processo sfrutta la prevalenza del livello logico basso su quello alto, cioè quando ci sono due dispositivi che
vogliono iniziare la comunicazione e uno dei due impone il livello basso mentre l’altro quello alto, sui due
prevale quello basso che permette a quel dispositivo di continuare la comunicazione mentre l’altro si porta
in ricezione nel caso in cui si proprio lui il destinatario della richiesta o dell’ordine. Si può facilmente intuire
2
che è un metodo efficace che permette di evitare perdita di informazione. Anche per questo evento
troviamo in figura la dinamica dei vari segnali che intercorrono in questo intervallo:
1.3 ESEMPIO di TRASMISSIONE di UN SEGNALE:
Nella figura sottostante si può osservare un esempio di comunicazione che ci permette di osservare i vari
segnali come si comportano affinché la comunicazione avvenga in maniera precisa.
Nella figura si vede che ogni comunicazione inizia con la condizione di start che può essere formata soltanto
da un dispositivo che svolge la funzione di master dopo aver controllato che ovviamente il bus sia libero. La
condizione di start corrisponde a mantenere la linea scl a livello alto mentre la linea sda passa dal livello
alto a quello basso.
Successivamente viene inviato il primo byte che è costituito da 7 bit dell’indirizzo del dispositivo con cui si
intende comunicare ed un bit che rappresenta l’azione richiesta. Se questo bit è a “0” significa che il
dispositivo deve interpretare il dato che gli arriva come un comando che gli impone di effettuare una
determinata azione mentre se questo bit è “1” allora deve interpretare il dato come una richiesta di
informazioni che deve inviare al dispositivo che ha iniziato la comunicazione.
Fondamentale è che una volta che viene trasmesso il primo byte chi trasmette lasci la linea sda a livello alto
in modo che il dispositivo che ha ricevuto il dato possa comunicare l’avvenuta ricezione attraverso il
segnale ack. Questo consiste nel porre a “0” la linea sda in corrispondenza del nono impulso sulla linea scl.
Se non viene generato il segnale di ack chi ha iniziato la trasmissione può anche interromperla. Nella figura
sottostante si può osservare la generazione di questo segnale indispensabile per una corretta
comunicazione. 3
Se invece viene generato il segnale di ack allora si può passare alla trasmissione del byte relativo al
comando o alla richiesta che dovrà essere seguito dal segnale di avvenuta ricezione. Infine sempre il
dispositivo che ha iniziato la trasmissione ha il compito di interromperla attraverso la condizione di stop.
Essa consiste nel mantenere a livello alto la linea scl mentre la linea sda passa dal livello basso a quello alto.
Dopo aver spiegato la dinamica di una trasmissione nella rappresentazione sottostante si può osservare la
composizione di una comunicazione tra un master ed uno slave con invio di comandi.
Mentre in quest’ultima si può osservare l’invio di informazioni dallo slave verso il master.
4
1.4 ESPERIENZA DURANTE L’AREA di PROGETTO:
Come già accennato precedentemente questo protocollo IIC era stato studiato durante l’area di progetto
prevedendo il progetto di un sistema di comunicazione tra tre dispositivi microcontrollori MC9S08QG8,
numero che comunque poteva essere facilmente aumentato. Questi tipi di microcontrollori hanno un
modulo già integrato per la gestione di questo sistema di comunicazione, con le linee sda e scl predefinite e
dei registri che consentivano la configurazione del protocollo: un registro per impostare l’indirizzo del
dispositivo, un altro per selezionare il clock e la velocità di comunicazione. Inoltre la comunicazione
avveniva non appena il primo byte da trasferire veniva posto nell’apposito registro del micro e
successivamente, ad invio avvenuto, si generava un interrupt per consentire di aggiungere altri pacchetti da
inviare o istruzioni da fare.
Da notare nella figura sottostante lo schema a blocchi per gestire l’interrupt della trasmissione in base a
questo protocollo: Y N
trasmissione/ricezione
Y Y
Ultimo byte trasmesso? Ultimo bit ad
essere letto?
N N
N
Segnale ACK Y Penultimo byte ad
Y Disabilita ACK
Y essere letto?
Impostare Master deve
modalità N
ricevere dati?
ricezione Genera segnale
stop
N
Scrivere prossimo Generare
Lettura registro dati byte nel buffer segnale di stop Leggere e
Salvare il buffer
Ritorno
In questo schema a blocchi si può vedere lo studio della situazione nel caso in cui il dispositivo fosse stato
un master: fondamentale inizialmente è capire se il master deve ricevere o trasmettere e quindi
successivamente controllare se i byte sono stati trasmessi e ricevuti agendo nei vari registri e controllando
quei segnali di controllo come il segnale di ack. 5