Nicola Amoroso

Transcript

Nicola Amoroso
Corso introduttivo sui
microcontrollori
A. S. 2007 – 2008
Il Bus I2C
Vedi anche: BUS I2C di Mauro Laurenti [http://www.Laurtec.com]
Nicola Amoroso
[email protected]
na_Bus I2C
http://www.mrscuole.net/anxapic/
1
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Il bus I2C permette una alta velocità di comunicazione in standard seriale, con due sole
linee, tra più periferiche; il protocollo di comunicazione è stato introdotto dalla Philips
nel 1980 per superare le difficoltà inerenti all'utilizzo di bus paralleli per la
comunicazione tra un'unità di controllo e le varie periferiche.
Un notevole vantaggio dei dispositivi che fanno uso del bus I2C è quello della loro
semplicità d'uso. Infatti tutte le regole del protocollo che bisogna rispettare per una
corretta comunicazione vengono gestite a livello hardware, dunque il progettista non si
deve preoccupare di nulla.
Nel corso degli anni il protocollo ha subito vari aggiornamenti verso velocità di
comunicazione più elevate, comunque tutte le modifiche apportate hanno rispettato la
compatibilità dall’alto verso il basso, cioè sistemi dell’ultima generazione possono
sempre comunicare con quelli precedenti.
La prima versione del bus I2C permette di trasmettere fino a 100Kbit/s (modalità standard).
Questa velocità è stata successivamente portata a 400Kbit/s (modalità veloce).
Nel 1998 la velocità è stata incrementata fino a 3.4Mbit/s (modalità ad alta velocità).
Non necessariamente gli integrati prodotti devono rispettare la modalità ad alta velocità.
na_Bus I2C
http://www.mrscuole.net/anxapic/
2
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Le periferiche che fanno uso del bus I2C per comunicare con un'unità di controllo sono:
memorie, real time clock calendar (PCF8583, DS1302), LCD, potenziometri digitali,
convertitori A/D, periferiche generiche per estendere il numero degli ingressi o delle
uscite (PCF8574), sensori di temperatura, controllori audio, etc… .
Un altro vantaggio di questo collegamento è quello di poter aggiungere o togliere delle
periferiche dal bus senza influenzare il resto del circuito. Questo si traduce in una facile
scalabilità verso l'alto sistema, ovvero si può modificare un sistema aggiungendo nuove
caratteristiche senza dover modificare l'hardware; naturalmente il sw deve essere in
grado di riconoscere nuove perifieriche.
La possibilità di poter collegare più periferiche sullo stesso bus è permesso anche dal bus CAN.
Quest'ultimo protocollo è stato ideato e introdotto da BOSCH per operare in ambienti particolarmente
rumorosi e in cui si debba raggiungere un elevato grado di sicurezza nella trasmissione dati.
Per tali ragioni il CAN bus è ormai accettato come standard in ambito automobilistico, per mettere in
comunicazione i vari dispositivi elettronici che sempre più frequentemente vengono installati a bordo.
na_Bus I2C
http://www.mrscuole.net/anxapic/
3
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Il Bus I2C è un Bus seriale bidirezionale, solo due (più il segnale di massa GND) sono le
linee di comunicazione che permettono i collegamenti tra i moduli o integrati differenti
collegati sullo stesso Bus. Queste due linee prendono il nome di SDA (Serial Data) e SCL
(Serial CLock).
La linea SDA permette il trasferimento di dati (formato 8 bit), la linea SCL implementa
la sincronizzazione (temporizzazione) della trasmissione; entrambe le linee devono
essere connesse mediante resistenze di pull-up al positivo (+Vcc – 5 V) di alimentazione.
Pur essendoci più periferiche collegate sullo stesso bus, la comunicazione avviene
sempre tra due dispositivi per volta e la trasmissione dei dati può avvenire solo
quando il bus è pronto (not Busy) per la comunicazione.
Chi trasmette i dati è il trasmettitore (Tx), chi invece li riceve è il ricevitore (Rx);
entrambe le posizioni sono intercambiabili per fasi diverse di trasmissione cioè, un
trasmettitore può divenire ricevitore e un ricevitore può essere trasmettitore.
Nella transazione è ben definito il device che inizia e termina la comunicazione, viene chiamato
MASTER (Padrone); il device che invece può solo ricevere o trasmettere è invece lo SLAVE
(Schiavo).
Non tutte le periferiche possono essere MASTER del Bus I2C (E’ragionevole che un µC lo sia)
Sullo stesso Bus possono esserci più MASTER, ma deve essere attivo uno solo per volta.
na_Bus I2C
http://www.mrscuole.net/anxapic/
4
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Ogni periferica inserita nel bus possiede un indirizzo che la individua in modo
univoco. Questo indirizzo può essere fissato dal produttore in sede di fabbricazione
o parzialmente fissato dal progettista.
L'indirizzo è costituito da 7 bit nelle versioni standard o da 10 bit nelle versioni estese.
Nel caso di indirizzamento a 7 bit si avrebbe potenzialmente la possibilità di
indirizzare 128 periferiche mentre nel caso di 10 bit si avrebbe la possibilità di
indirizzare fino a 1024 periferiche. Il numero di periferiche ora citate non sono
comunque raggiungibili dal momento che alcuni indirizzi, sono riservati per funzioni
speciali.
Su un bus non possono essere presenti due integrati dello stesso tipo con lo
stesso indirizzo.
Se proprio si dovesse avere la necessità di inserire due integrati dello stesso tipo
sul medesimo Bus , o comunque due periferiche con il medesimo indirizzo, è necessario
dividere il bus in due parti, questo può, per esempio, essere ottenuto con appositi
integrati-device tipo il PCA9544 della Philips.
Un limite sul numero di device connessi sulla linea è rappresentato dalla capacità totale della linea che non deve
superare i 400 pF altrimenti non è possibile rispettare le velocità limite di trasmissione sulla linea. Il valore della
capacità totale di linea dipende dal numero di device connessi e dalla lunghezza totale della linea stessa.
na_Bus I2C
http://www.mrscuole.net/anxapic/
5
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Pull-Up Resistor
Abbiamo già accennato in precedenza che le
linee SDA e SCL devono essere implementate
con uscite “open-drain” o “open-collector”
mediante una resistenza di pull-up collegata tra
la linea e Vcc .
SDA e SCL quando non sono utilizzate nella
trasmissione, sono sempre a livello alto.
Valori tipici per le resistenze di pull-up sono
compresi tra 1,2 KΩ e 10 KΩ. Il primo valore è
utilizzato per bus medio-veloci (400 Kb/s e
oltre) mentre il secondo valore è utilizzato per
bus standard (100 Kb/s); in genere si utilizzano
valori resistivi intermedi tra questi due valori
limite a seconda della velocità del bus.
Il valore corretto per le resistenze di pull-up dipende comunque oltre che dalla velocità
di trasmissione anche dalla capacità totale della linea in quanto aumentando questo
valore aumenta anche il tempo di risposta (costante di tempo gruppo R-C) nella
transizione H→L del segnale.
na_Bus I2C
http://www.mrscuole.net/anxapic/
6
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Cenni sul protocollo di comunicazione
Le linee del bus sono due, la linea SCL fondamentalmente gestisce la temporizzazione
della trasmissione, la linea SDA rappresenta il collegamento per il trasferimento dati.
Ogni bit viene trasferito per ogni impulso di clock.
I dati sulla linea SDA devono restare stabili quando l’impulso sulla linea di clock
(SCL) è alto, in questo caso cambiamenti di livello (transizioni) sulla linea SDA
vengono interpretati come segnali di controllo.
na_Bus I2C
http://www.mrscuole.net/anxapic/
7
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Cenni sul protocollo di comunicazione: condizioni di START e STOP
Entrambe le linee del bus SDA e SCL sono a livello alto (H) quando il bus non è occupato.
Una transizione High to Low [H → L] sulla linea
SDA, quando la linea SCL è High [H], definisce
la condizione di START della trasmissione
Una transizione Low to High [L → H] sulla linea
SDA, quando la linea SCL è High [H], definisce
la condizione di STOP della trasmissione
na_Bus I2C
http://www.mrscuole.net/anxapic/
8
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Cenni sul protocollo di comunicazione: configurazione del sistema
Una periferica che “genera l’informazione” è il trasmettitore [Tx]; una periferica che
“riceve l’informazione” è il ricevitore [Rx].
La periferica che controlla (mediante la temporizzazione) la trasmissione è il MASTER;
la periferica che dialoga ed è controllata dal MASTER è lo SLAVE.
Vi sono periferiche che possono essere sia MASTER che SLAVE (es.
microControllori) e vi sono periferiche che possono funzionare solo da SLAVE (es.
memorie eeprom).
na_Bus I2C
http://www.mrscuole.net/anxapic/
9
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Cenni sul protocollo di comunicazione: indirizzo del device con cui si vuol comunicare
Prima di trasmettere qualsiasi “data” sul bus bisogna definire la periferica con cui si vuol colloquiare.
L’indirizzo della periferica viene inviato dal MASTER dopo la transizione di START.
Il formato dell’indirizzo può essere sia a 7 bit che a 10 bit, per semplicità consideriamo il
formato a 7 bit.
I 7 bit dell'indirizzo vengono inviati dal bit più significativo al bit meno significativo. In coda a questo
indirizzo viene aggiunto un bit per segnalare se il Master vuole intraprendere, con la periferica individuata
da tale indirizzo, una comunicazione di scrittura o di lettura.
In particolare se tale bit è 0 vuol dire che il Master vuole
scrivere sulla periferica, se il bit è 1 vuol dire che il Master
vuole leggere della periferica.
periferica di indirizzo 0xC0
na_Bus I2C
“C0” per scrittura sulla periferica
1
1
0
0
0
0
0
0
“C1” per lettura dalla periferica
1
1
0
0
0
0
0
1
http://www.mrscuole.net/anxapic/
10
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Cenni sul protocollo di comunicazione: indirizzo del device con cui si vuol comunicare
L'invio dell'indirizzo a 7 bit e della modalità del colloquio (lettura/scrittura), avviene grazie ad otto
transizioni H → L della linea SCL. Al nono impulso della linea SCL il Master si aspetta una risposta
di un bit da parte della periferica che ha chiamato .
La risposta della periferica chiamata consiste nel mantenere a livello basso la linea SDA, per la
durata di un ciclo SCL. In gergo si dice che il Master attende l'Acknowledge da parte della
periferica chiamata.
Una sola periferica risponderà alla chiamata del Master
Qualora la periferica non sia presente il Master libera il bus permettendo ad eventuali
altri Master di prenderne il controllo.
Dopo l'avvenuto riconoscimento, avviene lo scambio dei dati verso la periferica, nel
caso di scrittura, o dalla periferica al Master, in caso di lettura. In una
comunicazione si possono avere sia fasi di scrittura che di lettura.
na_Bus I2C
http://www.mrscuole.net/anxapic/
11
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Cenni sul protocollo di comunicazione: acknowledge (riconoscimento)
I bytes scambiati tra il trasmettitore e il ricevitore possono essere illimitati tra una condizione di
START e una di STOP di una trasmissione.
Ogni byte trasmesso deve essere seguito da un bit di “riconoscimento” (acknowledge) da parte
della periferica che ha ricevuto il byte.
In particolare se il MASTER
invia un byte allo SLAVE si
aspetta, dopo l'ottavo bit,
un bit basso sulla linea SDA.
Se lo SLAVE sta inviando un byte al MASTER [lettura] si aspetta che quest'ultimo invii un
bit di “riconoscimento” dopo aver ricevuto il byte; nel caso di ultimo byte di lettura il
segnale di “riconoscimento” non viene generato dal MASTER, la linea SDA viene lasciato a
livello H e chi trasmette non invia più dati in modo tale che il MASTER può generare la
condizione di STOP cioè, fine trasmissone.
La mancanza dell'Acknowledge determina un errore di comunicazione
na_Bus I2C
http://www.mrscuole.net/anxapic/
12
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Cenni sul protocollo di comunicazione: le fasi della comunicazione
MASTER Tx in scrittura (multipla) dopo aver scritto la “prima” locazione di memoria, nel “device” SLAVE Rx indirizzato, da cui iniziare
S Condizione di START
P Condizione di STOP
MASTER in lettura (multipla) dopo aver scritto la “prima” locazione di memoria, nel “device “ indirizzato, da cui iniziare a leggere i dati
A questo punto MASTER Tx
diviene MASTER Rx mentre
SLAVE Rx diviene SLAVE Tx
S Condizione di START
P Condizione di STOP
Dopo aver letto l’ultimo byte il MASTER lascia a livello “H”
la linea SDA in modo che lo SLAVE non “invia” nuovi dati e
il MASTER può definire la condizione di STOP
na_Bus I2C
http://www.mrscuole.net/anxapic/
13
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Bus I2C
Cenni sul protocollo di comunicazione: le fasi della comunicazione
MASTER Rx in lettura (multipla) dal “device” SLAVE Tx indirizzato. La lettura“inizia” dalla prima locazione di memoria dello SLAVE
S Condizione di START
P Condizione di STOP
Dopo aver letto l’ultimo byte il MASTER Rx
lascia a livello “H” la linea SDA in modo che lo
SLAVE Tx non “invia” nuovi dati e il MASTER
può definire la condizione di STOP
=> => => => => Conclusioni
Le potenzialità dell'interfaccia I2C consistono nel fatto di poter disporre di una larga varietà di dispositivi che
possiedono
al
loro
interno l'hardware necessario per la gestione automatica del protocollo. Unica
complicazione potrebbe essere la gestione dell'hardware da parte del microcontrollore.
Per poter utilizzare l'hardware I2C interno al microcontrollore, è comunque necessaria una fase di
inizializzazione, le procedure che si realizzano, possono poi essere riutilizzate in altre applicazioni, passando
per questo problema una sola volta.
Per i microcontrollori della Microchip è presente il tool gratuito Maestro, che mette a disposizione un
gran numero di funzioni, gia definite, utilizzabili in questo e in altri casi.
Nel caso si programmi i microcontrollori con linguaggi ad alto livello, si hanno generalmente già disponibili le
funzioni per la gestione del bus I2C.
na_Bus I2C
http://www.mrscuole.net/anxapic/
14
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/