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 a 2 fili (a 7velocità variabile, solitamente fino a 400KHz, e in modalità alta velocità fino 8a 5 MHz). Questo protocollo offre un bus a basso costo per collegare dispositivi 9di vario genere a cui si accede sporadicamente e utilizzando poca banda. I2C è 10ampiamente usato nei sistemi integrati. Alcuni sistemi usano varianti che non 11rispettano i requisiti originali, per cui non sono indicati come I2C, ma hanno 12nomi diversi, per esempio 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/docs/en/user-guide/UM10204.pdf>`_ pubblicata da 16NXP Semiconductors, al momento della scrittura si tratta della versione 7 17 18SMBus (Bus per la gestione del sistema) si basa sul protocollo I2C ed è 19principalmente un sottoinsieme di protocolli e segnali I2C. Molti dispositivi 20I2C funzioneranno su SMBus, ma alcuni protocolli SMBus aggiungono semantica 21oltre quanto richiesto da I2C. Le moderne schede madri dei PC si affidano a 22SMBus. I più comuni dispositivi collegati tramite SMBus sono moduli RAM 23configurati utilizzando EEPROM I2C, e circuiti integrati di monitoraggio 24hardware. 25 26Poiché SMBus è principalmente un sottoinsieme del bus I2C, possiamo farne uso su 27molti sistemi I2C. Ci sono però sistemi che non soddisfano i vincoli elettrici 28sia di SMBus che di I2C; e altri che non possono implementare tutta la semantica 29o messaggi comuni del protocollo SMBus. 30 31 32Terminologia 33============ 34 35Il bus I2C connette uno o più circuiti integrati controllori a dei dispositivi. 36 37.. kernel-figure:: ../../../i2c/i2c_bus.svg 38 :alt: Un semplice bus I2C con un controllore e 3 dispositivi 39 40 Un semplice Bus I2C 41 42Un circuito integrato **controllore** (*controller*) è un nodo che inizia le 43comunicazioni con i dispositivi (*targets*). Nell'implementazione del kernel 44Linux è chiamato **adattatore** o bus. I driver degli adattatori si trovano 45nella sottocartella ``drivers/i2c/busses/``. 46 47Un **algoritmo** contiene codice generico che può essere utilizzato per 48implementare una intera classe di adattatori I2C. Ciascun driver dell' 49adattatore specifico dipende da un driver dell'algoritmo nella sottocartella 50``drivers/i2c/algos/`` o include la propria implementazione. 51 52Un circuito integrato **dispositivo** è un nodo che risponde alle comunicazioni 53quando indirizzato dal controllore. In Linux è chiamato **client**. Nonostante i 54dispositivi siano circuiti integrati esterni al sistema, Linux può agire come 55dispositivo (se l'hardware lo permette) e rispondere alla richieste di altri 56controllori sul bus. Questo verrà chiamato **dispositivo locale** (*local 57target*). Negli altri casi si parla di **dispositivo remoto** (*remote target*). 58 59I driver dei dispositivi sono contenuti in una cartella specifica per la 60funzionalità che forniscono, ad esempio ``drivers/media/gpio/`` per espansori 61GPIO e ``drivers/media/i2c/`` per circuiti integrati relativi ai video. 62 63Per la configurazione di esempio in figura, avrai bisogno di un driver per il 64tuo adattatore I2C e driver per i tuoi dispositivi I2C (solitamente un driver 65per ciascuno dispositivo). 66 67Sinonimi 68-------- 69 70Come menzionato precedentemente, per ragioni storiche l'implementazione I2C del 71kernel Linux usa "adatattore" (*adapter*) per i controllori e "client" per i 72dispositivi. Un certo numero di strutture dati usano questi sinonimi nei loro 73nomi. Dunque, durante le discussioni riguardanti l'implementazione dovrete 74essere a coscienza anche di questi termini. Tuttavia si preferiscono i termini 75ufficiali. 76 77Terminologia obsoleta 78--------------------- 79 80Nelle prime specifiche di I2C, il controllore veniva chiamato "master" ed i 81dispositivi "slave". Questi termini sono stati resi obsoleti con la versione 7 82della specifica. Inoltre, il loro uso viene scoraggiato dal codice di condotta 83del kernel Linux. Tuttavia, potreste ancora trovare questi termini in pagine non 84aggiornate. In generale si cerca di usare i termini controllore e dispositivo. 85