65 lines
3.2 KiB
ReStructuredText
65 lines
3.2 KiB
ReStructuredText
==========================
|
|
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) <https://www.nxp.com/webapp/Download?colCode=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 <https://web.archive.org/web/20210813122132/
|
|
https://www.nxp.com/docs/en/user-guide/UM10204.pdf>`_.
|
|
|
|
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*.
|
|
|
|
.. kernel-figure:: ../../../i2c/i2c_bus.svg
|
|
:alt: 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).
|