Italian

Introduzione a I2C e SMBus

I²C (letteralmente “I al quadrato C” e scritto I2C nella documentazione del kernel) è un protocollo sviluppato da Philips. É un protocollo lento a 2 fili (a velocità variabile, al massimo 400KHz), con un’estensione per le velocità elevate (3.4 MHz). Questo protocollo offre un bus a basso costo per collegare dispositivi di vario genere a cui si accede sporadicamente e utilizzando poca banda. Alcuni sistemi usano varianti che non rispettano i requisiti originali, per cui non sono indicati come I2C, ma hanno nomi diversi, per esempio TWI (Interfaccia a due fili), IIC.

L’ultima specifica ufficiale I2C è la “Specifica I2C-bus e manuale utente” (UM10204) pubblicata da NXP Semiconductors. Tuttavia, è necessario effettuare il login al sito per accedere al PDF. Una versione precedente della specifica (revisione 6) è archiviata qui.

SMBus (Bus per la gestione del sistema) si basa sul protocollo I2C ed è principalmente un sottoinsieme di protocolli e segnali I2C. Molti dispositivi I2C funzioneranno su SMBus, ma alcuni protocolli SMBus aggiungono semantica oltre quanto richiesto da I2C. Le moderne schede madri dei PC si affidano a SMBus. I più comuni dispositivi collegati tramite SMBus sono moduli RAM configurati utilizzando EEPROM I2C, e circuiti integrati di monitoraggio hardware.

Poiché SMBus è principalmente un sottoinsieme del bus I2C, possiamo farne uso su molti sistemi I2C. Ci sono però sistemi che non soddisfano i vincoli elettrici sia di SMBus che di I2C; e altri che non possono implementare tutta la semantica o messaggi comuni del protocollo SMBus.

Terminologia

Utilizzando la terminologia della documentazione ufficiale, il bus I2C connette uno o più circuiti integrati master e uno o più circuiti integrati slave.

Un semplice bus I2C con un master e 3 slave

Un semplice Bus I2C

Un circuito integrato master è un nodo che inizia le comunicazioni con gli slave. Nell’implementazione del kernel Linux è chiamato adattatore o bus. I driver degli adattatori si trovano nella sottocartella drivers/i2c/busses/.

Un algoritmo contiene codice generico che può essere utilizzato per implementare una intera classe di adattatori I2C. Ciascun driver dell’ adattatore specifico dipende da un driver dell’algoritmo nella sottocartella drivers/i2c/algos/ o include la propria implementazione.

Un circuito integrato slave è un nodo che risponde alle comunicazioni quando indirizzato dal master. In Linux è chiamato client (dispositivo). I driver dei dispositivi sono contenuti in una cartella specifica per la funzionalità che forniscono, ad esempio drivers/media/gpio/ per espansori GPIO e drivers/media/i2c/ per circuiti integrati relativi ai video.

Per la configurazione di esempio in figura, avrai bisogno di un driver per il tuo adattatore I2C e driver per i tuoi dispositivi I2C (solitamente un driver per ciascuno dispositivo).