1==========================
2Introduzione a I2C e SMBus
3==========================
4
5I��C (letteralmente "I al quadrato C" e scritto I2C nella documentazione del
6kernel) �� un protocollo sviluppato da Philips. �� un protocollo lento a 2 fili
7(a velocit�� variabile, al massimo 400KHz), con un'estensione per le velocit��
8elevate (3.4 MHz). Questo protocollo offre un bus a basso costo per collegare
9dispositivi di vario genere a cui si accede sporadicamente e utilizzando
10poca banda. Alcuni sistemi usano varianti che non rispettano i requisiti
11originali, per cui non sono indicati come I2C, ma hanno nomi diversi, per
12esempio TWI (Interfaccia a due fili), IIC.
13
14L'ultima specifica ufficiale I2C �� la `"Specifica I2C-bus e manuale utente"
15(UM10204) <https://www.nxp.com/webapp/Download?colCode=UM10204>`_
16pubblicata da NXP Semiconductors. Tuttavia, �� necessario effettuare il login
17al sito per accedere al PDF. Una versione precedente della specifica
18(revisione 6) �� archiviata
19`qui <https://web.archive.org/web/20210813122132/
20https://www.nxp.com/docs/en/user-guide/UM10204.pdf>`_.
21
22SMBus (Bus per la gestione del sistema) si basa sul protocollo I2C ed ��
23principalmente un sottoinsieme di protocolli e segnali I2C. Molti dispositivi
24I2C funzioneranno su SMBus, ma alcuni protocolli SMBus aggiungono semantica
25oltre quanto richiesto da I2C. Le moderne schede madri dei PC si affidano a
26SMBus. I pi�� comuni dispositivi collegati tramite SMBus sono moduli RAM
27configurati utilizzando EEPROM I2C, e circuiti integrati di monitoraggio
28hardware.
29
30Poich�� SMBus �� principalmente un sottoinsieme del bus I2C,
31possiamo farne uso su molti sistemi I2C. Ci sono per�� sistemi che non
32soddisfano i vincoli elettrici sia di SMBus che di I2C; e altri che non possono
33implementare tutta la semantica o messaggi comuni del protocollo SMBus.
34
35
36Terminologia
37============
38
39Utilizzando la terminologia della documentazione ufficiale, il bus I2C connette
40uno o pi�� circuiti integrati *master* e uno o pi�� circuiti integrati *slave*.
41
42.. kernel-figure::  ../../../i2c/i2c_bus.svg
43   :alt:    Un semplice bus I2C con un master e 3 slave
44
45   Un semplice Bus I2C
46
47Un circuito integrato  **master** �� un nodo che inizia le comunicazioni con gli
48slave. Nell'implementazione del kernel Linux �� chiamato **adattatore** o bus. I
49driver degli adattatori si trovano nella sottocartella ``drivers/i2c/busses/``.
50
51Un **algoritmo** contiene codice generico che pu�� essere utilizzato per
52implementare una intera classe di adattatori I2C. Ciascun driver dell'
53adattatore specifico dipende da un driver dell'algoritmo nella sottocartella
54``drivers/i2c/algos/`` o include la propria implementazione.
55
56Un circuito integrato **slave** �� un nodo che risponde alle comunicazioni
57quando indirizzato dal master. In Linux �� chiamato **client** (dispositivo). I
58driver dei dispositivi sono contenuti in una cartella specifica per la
59funzionalit�� che forniscono, ad esempio ``drivers/media/gpio/`` per espansori
60GPIO e ``drivers/media/i2c/`` per circuiti integrati relativi ai video.
61
62Per la configurazione di esempio in figura, avrai bisogno di un driver per il
63tuo adattatore I2C e driver per i tuoi dispositivi I2C (solitamente un driver
64per ciascuno dispositivo).
65