Ifrim Valentin Personal Web Page
 


Microcontrollori / I2C

 

  Questa pagina si propone di dare un aiuto agli appassionati di elettronica che vogliono scoprire come funziona il protocollo I2c e coloro che vogliono utilizzarlo nelle applicazioni che realizzano.  
     
 
     

Cosa è il protocollo I2C ? --- Inter-Integrated Circuit Bus

 

Il protocollo I2C è stato creato negli anni '80 da Philips semiconductors. Esso si proponeva di essere un modo facile di connettere CPU con i circuiti integrati periferici usati in una TV.

Il bus I2c consiste fisicamente in due linee attive (SDA si SCL) e una di masa (GND) attraverso le quali comunicano due o più componenti secondo alcune regole precise che definiremo in breve di seguito.

le linee attive SDA (Serial DAta line) e SCL (Serial CLock line) sono bidirezionali.

Ogni componente connesso al bus ha un unico indirizzo indifferentemente se è CPU, RTC, EEPROM, LCD, ecc.

I componenti connessi al bus possono funzionare sia come ricettore sia come emittente (a momenti di tempo distinti).

Il controllo del bus apparterrà (a un dato momento) a un solo dispositivo Master, che indirizzerà un solo dispositivo Slave.

Il Master è il dispositivo che inizierà il trasferimento (attraverso la condizione di START), genererà gli impulsi di clock sulla linea SCL e sempre lui finirà il trasferimento generando la condizione di STOP.

Il trasferimento di dati sul bus si fa in pacchi di 8 bit (1 byte).

La velocità di trasferimento sul bus può essere di 100kbit/sec o 400kbit/sec ma non è obbligatoria una frquenza fissa.

L'indirizzo dei dispositivi I2C ha una lunghezza di 7 bit (di solito). Troviamo anche dispositivi con indirizzi di 10 bit ma non ci parliamo in questa pagina essendo meno diffusi.

 

L'interfaccia del bus è costruita sempre da un buffer (per l'entrata) e un transistor con collettore o drena aperta (per l'uscita). Quindi a entrambe le linee (SDA si SCL) devono essere connessi resistori PULL-UP (tra SDA e V+ e tra SCL e V+).

   
Le condizioni incontrate sul bus:
   
 
START - una transizione della linea di dati SDA da "1" a "0", nel tempo in cui la linea SCL si trova in "1"
STOP - una transizione della linea di dati SDA da "0" a "1", nel tempo in cui la linea SCL si trova in "1"
1 - il mantenimento della linea di dati SDA nello stato "1", durante tutto il periodo in cui SCL si trova in "1"
0 -il mantenimento della linea di dati SDA nello stato "0", durante tuttto il periodo in cui SCL si trova in "1"
Quindi, ad eccezione delle condizioni di START e STOP, è permesso il cambiamento dello stato della linea SDA solo nel periodo in cui SCL si trova nello stato "0".
  Una volta che il master genera la condizione di START inizierà a trasmettere verso slave il primo byte che rappresenta l'indirizzo del dispositivo slave e il tipo di trasferimento (scrivere o leggere). Questo viene trasmesso iniziando con il più significativo bit (non confondere bit con byte che rappresenta 8 bit) e finendo con il meno significativo bit (bit 0 ).
  Il Bit 0 del primo Byte mandato dopo la condizione di START rappresenta il tipo di accesso verso SLAVE:
- 0 = Scrittura
- 1 = Lettura
 

Il master trasmette 2 data byte al dispositivo slave
     

Il master legge una serie di byte dal dispositivo slave
     
  Se al bus si trova connesso un dispositivo Slave con l'indirizzo identico a quello trasmesso dal Master, questo risponderà nella durata dell'impulso ACK generato dal master sul SCL.
ACK rappresenta il riconoscimento della ricezione dei dati (Master o Slave) e consiste nel mantenimento a "0" della linea SDA per la durata dell'impulso di clock corrispondente, generato da Master.
Se dopo la ricezione dell'ultimo bit (bit0) il dispositivo Slave non mette la linea SDA a 0 (NO ACK) il Master genera la condizione di Stop.
Dopo la ricezione dell'ultimo byte dal Master, questo genererà un NOT ACK prima della condizione STOP.
NOT ACK consiste nel tenere ad "1" la linea SDA, nella durata di un ciclo di clock ACK.
   
Più informazioni sul bus I2C trovate sul sito di Philips Semiconductors così come nelle documentazioni delle componenti che usano questo protocollo .

Per sperimentare il lavoro con il bus I2C presento in seguito un'applicazione semplice.

  Lo schema elettronico è semplicissimo e può essere fatto anche da un principiante.
Il circuito deve essere alimentato da una sorgente esterna di 5V(DC) stabilizzata e separata galvanicamente dalla rete elettrica (tramite un trasformatore).
E' consigliata l'alimentazione del circuito dopo la connessione alla porta parallela del PC.
Si utilizza un solo circuito integrato (SN7407 o SN74LS07) che contiene 6 buffer (non invertenti) con collettore aperto. Il circuito può essere realizzato "in aria" o utilizzando una scheda "mille fori".

  II programma utilizzato è semplice e ha il ruolo di mostrare come funziona il protocollo I2C. Il Programma e il circuito funziona sul bus I2c come master e non può funzionare quando sul bus si trova anche un altro master.

Per utilizzare il programma avete bisogno di:
- runtime da Visual Basic 6 - Msvbrun6.0 (è incluso nel Kit di installazione per il programma. (Plotter)
- il file " inpout32.dll " (20Kb)- che deve trovarsi nella cartella principale dell'applicazione o nella cartella "Windows\System "(lo copiate in questa cartella). Questo file , più molte altre informazioni le potete trovare all'indirizzo http://www.lvr.com .
Il programma è stato testato (con successo) sui PC con sistemi operativi Windows 95(OSR2) e Windows 98.
Attenzione! Il programma funziona correttamente solo con componenti I2C che sono capaci di generare ACK sulla linea SDA. Il programmul che ignora gli impulsi ACK può essere scaricato qui.
La costruzione dei componenti o sistemi di sviluppo per il protocollo di comunicazione I2C sono il soggetto del diritto d'autore alla Philips
 
 
Inizio della pagina
Termini e condizioni
Copyright ©2013 Ifrimv      Site designed by Ifrim Valentin