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/