I²C

Ο δίαυλος I²C είναι ένας σειριακός δίαυλος που δημιουργήθηκε από τη Philips (τώρα NXP) και χρησιμοποιείται για την σύνδεση περιφερειακών μικρής ταχύτητας σε μητρικές πλακέτες (motherboards), ενσωματωμένα συστήματα (embedded systems), κινητά τηλέφωνα ή άλλες ηλεκτρονικές συσκευές. Ο δίαυλος I2C δεν χρησιμοποιείται μόνο για την επικοινωνία συσκευών που βρίσκονται πάνω σε ένα τυπωμένο κύκλωμα, αλλά και για την επικοινωνία συσκευών που συνδέονται με καλώδια.

Στη διπλανή εικόνα φαίνεται ένα παράδειγμα διαύλου I2C. Όπως φαίνεται για τη μεταφορά των δεδομένων (0 ή 1)  χρησιμοποιεί μόνο δύο καλώδια (τα οποία είναι ημιαμφίδρομης κατεύθυνσης):  Τα SCL και  SDA. Η γραμμή SCL είναι η γραμμή ρολογιού, ενώ η SDA είναι η γραμμή δεδομένων. Οι γραμμές αυτές συνδέονται σε όλες τις συσκευές, που υπάρχουν πάνω στο δίαυλο I²C. Προφανώς εκτός από τα παραπάνω καλώδια που μεταφέρουν δεδομένα, απαιτείται και ένα τρίτο καλώδιο το οποίο είναι η γείωση (GND) ή 0 V.

Επίσης μπορεί να υπάρχει (προαιρετικά) και ένα τέταρτο καλώδιο το οποίo είναι η γραμμή τροφοδοσίας (VCC ή VDD),  με την οποία τροφοδοτούνται με ισχύ οι διάφορες συσκευές που συνδέονται στο δίαυλο. Τυπικές τάσεις που χρησιμοποιούνται στο δίαυλο είναι τα +5V ή +3,3V, αν και επιτρέπονται συστήματα με διαφορετικές τάσεις (συνήθως στην περιοχή από +1,2V έως +5,5V).Ο μέγιστος αριθμός κόμβων (συσκευών), που μπορούν να συνδεθούν στον δίαυλο, περιορίζεται από τον αριθμό των διαθέσιμων διευθύνσεων (θα επεξηγηθεί παρακάτω), αλλά και από τη συνολική χωρητικότητα του διαύλου, η οποία  π.χ.  για τον standard mode, δεν πρέπει να υπερβαίνει τα 400pF. Η απαίτηση αυτή περιορίζει τις πρακτικές αποστάσεις επικοινωνίας.Παρακάτω γίνεται η σύγκριση διαφόρων υλοποιήσεων του διαύλου (πηγή) . Στην πράξη μπορούμε π.χ. να πετύχουμε μεγαλύτερα μήκη διαύλου μειώνοντας την ταχύτητα. 

Και οι δύο γραμμές SCL και SDA είναι τύπου ανοικτού απαγωγού (open drain στον κόσμο των FET) ή ανοικτού συλλέκτη (open collector στον κόσμο των TTL). Αυτό σημαίνει ότι κάθε μία από αυτές τις δύο γραμμές, πρέπει να συνδέεται με μία αντίσταση στην γραμμή τροφοδοσίας, όπως φαίνεται στο παραπάνω σχήμα. Η αντίσταση αυτή ονομάζεται αντίσταση τερματισμού (ή pull up).

Η τιμή των αντιστάσεων δεν είναι κρίσιμη, αλλά μαζί με την χωρητικότητα του διαύλου, επηρεάζει την μέγιστη ταχύτητα λειτουργίας του διαύλου. Μεγάλες χωρητικότητες του διαύλου, μπορούν να αντισταθμιστούν με μικρές αντιστάσεις τερματισμού. Συνηθισμένες τιμές αντιστάσεων είναι από 1ΚΩ έως 10ΚΩ. Οι αντιστάσεις αυτές δεν μπορούν να απουσιάζουν, διότι τότε οι γραμμές SCL και SDA θα είναι μονίμως σε κατάσταση λογικού 0 και δίαυλος δεν θα δουλεύει.

Λογικές στάθμες των γραμμών SCL και SDA 
Επειδή στον δίαυλο I2C συνδέεται ποικιλία συσκευών διαφόρων τεχνολογιών (CMOS, NMOS, Διπολικής τεχνολογίας), οι οποίες μπορεί να έχουν διαφορετικές τάσεις λειτουργίας, οι στάθμες του λογικού 0 (Low) και λογικού 1 (High) σε όλες τις νέες συσκευές δεν είναι σταθερές, αλλά εξαρτώνται από την τάση τροφοδοσίας.Έτσι τα κατώφλια του λογικού 0 και του λογικού 1 τοποθετούνται στο 30% και το 70% της τάσης τροφοδοσίας VDD αντίστοιχα. Δηλ. μία τάση στην περιοχή 0-0,3VDD θεωρείται λογικό 0 (Low), ενώ μία τάση στην περιοχή 0,7VDD έως VDD, θεωρείται λογικό 1 (High).  Παλαιότερα τα κατώφλια  του λογικού 0 και 1 είχαν τοποθετηθεί στα 1,5V  και 3,0V αντίστοιχα.

Κύριοι και υποτελείς (Masters and Slaves) 
Οι συσκευές στον δίαυλο I²C είναι είτε Κύριοι (Masters) είτε Υποτελείς (Slave). Η Master συσκευή είναι αυτή που ελέγχει και οδηγεί τη γραμμή ρολογιού SCL (παράγει τους παλμούς ρολογιού). Οι Slave συσκευές είναι αυτές που ανταποκρίνονται στις συσκευές Master. Μία συσκευή Slave δεν μπορεί να ξεκινήσει μία μεταφορά πάνω στο δίαυλο, μόνο μία συσκευή Master μπορεί. Σε έναν δίαυλο μπορεί να είναι συνδεμένες πολλές Master και πολλές  Slave συσκευές. Και οι Master και οι Slave συσκευές μπορούν να μεταφέρουν δεδομένα στον δίαυλο, αλλά μόνο οι Master συσκευές ελέγχουν την μεταφορά.

Το φυσικό πρωτόκολλο του διαύλου I²C 
Όταν μία Master συσκευή επιθυμεί  να επικοινωνήσει με μία Slave συσκευή, ξεκινά στέλνοντας στον δίαυλο μία ακολουθία έναρξης (start sequence). Η ακολουθία έναρξης, είναι μία από τις δύο ειδικές ακολουθίες που ορίζονται στο δίαυλο I²C.  Η άλλη είναι η ακολουθία λήξης (stop sequence). Οι ακολουθίες έναρξης και λήξης διαφέρουν στο ότι είναι οι μοναδικές περιπτώσεις  στις οποίες επιτρέπεται να αλλάζει η γραμμή δεδομένων (SDA), ενόσω η γραμμή ρολογιού (SCL) είναι σε κατάσταση λογικού 1 (high). Όταν μεταφέρονται δεδομένα, η γραμμή SDA πρέπει να παραμένει σταθερή και να μην αλλάζει όσο η γραμμή ρολογιού είναι high.  Οι ακολουθίες έναρξης και λήξης σημαδεύουν την έναρξη και τη λήξη μιας μεταφοράς με μία slave συσκευή. Δηλαδή ο δίαυλος θεωρείται ότι είναι απασχολημένος, μετά από μία ακολουθία έναρξης και ελεύθερος λίγο χρόνο μετά την ακολουθία λήξης.
 

Τα δεδομένα μεταφέρονται σε ακολουθίες των 8 bit. Τα bit τοποθετούνται στη γραμμή SDA, ξεκινώντας από το περισσότερο σημαντικό bit (MSB). Η γραμμή SCL μεταβαίνει στη κατάσταση high και μετά low.  Για κάθε 8 bit δεδομένων που μεταφέρονται, η συσκευή που λαμβάνει στέλνει πίσω ένα bit επιβεβαίωσης (ACK). Έτσι στην πραγματικότητα απαιτούνται 9 παλμοί ρολογιού, για την μεταφορά των 8 bit  ενός byte δεδομένων. Εάν η συσκευή που λαμβάνει, στείλει πίσω ένα low bit επιβεβαίωσης (ACK), τότε έχει λάβει τα δεδομένα και είναι έτοιμη να λάβει το επόμενο byte δεδομένων. Εάν στείλει πίσω ένα high bit επιβεβαίωσης (που συμβολίζεται και με NACK, από τη φράση Not Acknowledged), αυτό δείχνει ότι η συσκευή που λαμβάνει, δεν μπορεί να λάβει περαιτέρω δεδομένα και η master συσκευή πρέπει να τερματίσει την αποστολή δεδομένων, εκπέμποντας μία ακολουθία λήξης.

Διευθυνσιοδότηση συσκευών του I²C διαύλου  
Σε όλες τις slave συσκευές που συνδέονται στον δίαυλο, έχει αποδοθεί ένας αριθμός σαν διεύθυνση. Οι master συσκευές δεν είναι απαραίτητο να έχουν διεύθυνση, εκτός εάν υπάρχουν πολλές master συσκευές στον δίαυλο (περιβάλλον Multi-master). Οι master συσκευές μπορούν να διαλέξουν αυθαίρετα μία από τις συνδεμένες slave συσκευές για επικοινωνία,  χρησιμοποιώντας τη διεύθυνσή της. Οι διευθύνσεις των συσκευών του I²C διαύλου είναι είτε 7 bit (θεωρητικά έως 128 συσκευές στο δίαυλο), είτε 10 bit (θεωρητικά έως 1024 συσκευές στο δίαυλο) ή ακόμη και 16 bit  (θεωρητικά 65536 συσκευές στο δίαυλο). Εδώ θα μιλήσουμε για την περίπτωση που η διευθυνσιοδότηση  είναι 7-bit. Θεωρητικά με 7 bit μπορούμε να έχουμε έως και 128 συσκευές στο δίαυλο. Επειδή όμως ορισμένες διευθύνσεις χρησιμοποιούνται για ειδικούς σκοπούς, μόνο 112 διευθύνσεις είναι διαθέσιμες στην 7-μπιτη διευθυνσιοδότηση. Π.χ η I2C διεύθυνση 0, είναι γενική κλήση προς όλες τις συσκευές. Στον παρακάτω πίνακα φαίνονται οι διευθύνσεις που είναι δεσμευμένες για ειδικές χρήσεις.

Όταν στέλνουμε την διεύθυνση των 7–bit  Α6Α5Α4Α3Α2Α1Α0 της συσκευής με την οποία θέλουμε να επικοινωνήσουμε, ακόμη και τότε στέλνουμε 8 bit. To επιπλέον (R/W) bit χρησιμεύει να πληροφορήσει την slave συσκευή, εάν η master συσκευή πρόκειται να γράψει (δηλ. να στείλει δεδομένα)  ή να διαβάσει (δηλ. να λάβει δεδομένα) από αυτήν. Εάν το bit (R/W)  είναι μηδέν η master συσκευή πρόκειται να γράψει στη slave. Εάν είναι 1 (ένα) πρόκειται να διαβάσει από την slave.  Τα 7 bit της διεύθυνσης τοποθετούνται στα 7 πάνω (περισσότερο σημαντικά MSBs) bit του byte, ενώ bit ανάγνωσης/εγγραφής (R/W) στο λιγότερο σημαντικό bit (LSB), όπως απεικονίζεται στο παραπάνω σχήμα (το Α στο σχήμα, σημαίνει Address Bit, δηλ. bit διεύθυνσης).

Δεσμευμένες Διευθύνσεις 
Δύο ομάδες των 8 διευθύνσεων (0000 ΧXX και 1111 ΧΧΧ) χρησιμοποιούνται για ειδικούς σκοπούς, όπως φαίνεται στον παρακάτω πίνακα

Ταχύτητες 
Υπάρχουν διάφορα πρότυπα του διαύλου, τα οποία μπορούν να λειτουργήσουν σε διάφορες ταχύτητες. Τα πρότυπα αυτά είναι: 
 Το Standard Μode: Η συχνότητα ρολογιού για τον δίαυλο I²C είναι 100KHz  (και επομένως η ταχύτητα μεταφοράς δεδομένων 100Kbps) 
 Το Fast Μode με ταχύτητες ρολογιού μέχρι 400KHz  (και επομένως η ταχύτητα μεταφοράς δεδομένων 400Kbps)
 Το Fast Mode Plus με ταχύτητες ρολογιού μέχρι 1ΜHz  (και επομένως η ταχύτητα μεταφοράς δεδομένων 1Mbps)
 Το High Speed Μode με ταχύτητες ρολογιού μέχρι και 3,4 MHz (και επομένως η ταχύτητα μεταφοράς δεδομένων 3,4Mbps) και 
 Το Ultra Fast Mode (UFM) με ταχύτητες από DC έως 5MHz  (I2C-bus specification and user manual) .

Επιμήκυνση ρολογιού (Clock stretching)  
Όταν η master συσκευή διαβάζει από τη slave, η slave τοποθετεί τα δεδομένα στον δίαυλο, αλλά είναι η master που ελέγχει το ρολόι. Τι συμβαίνει, εάν η slave δεν είναι έτοιμη να στείλει δεδομένα; Με slave συσκευές όπως σειριακές EEPROM δεν υπάρχει πρόβλημα, αλλά αν η slave συσκευή είναι ένας μικροεπεξεργαστής ή μικροελεγκτής, οι οποίοι έχουν να κάνουν και άλλες εργασίες, αυτό είναι ένα πρόβλημα.  Ο μικροεπεξεργαστής που παίζει το ρόλο της slave συσκευής, πρέπει π.χ να σώσει την κατάσταση του μικροεπεξεργαστή, να πάει στην υπορουτίνα διακοπής, να βρεί πια διεύθυνση θέλει η master  να διαβάσει, να πάρει τα δεδομένα και να τα τοποθετήσει στον καταχωρητή εκπομπής. Αυτό απαιτεί κάποιον χρόνο, κατά τον οποίο η master συσκευή θα συνεχίζει να στέλνει παλμούς και κατά συνέπεια να διαβάζει λανθασμένα δεδομένα.
Σε αυτήν την περίπτωση το πρωτόκολλο επιτρέπει η slave συσκευή να κρατάει το ρολόι σε κατάσταση λογικού 0 (low). Η master συσκευή από την άλλη πλευρά είναι υπεύθυνη, μετά από την απελευθέρωση της γραμμής ρολογιού, να ελέγξει εάν πράγματι πήγε στην υψηλή κατάσταση (high) προτού να συνεχίσει. Αυτός ο μηχανισμός λέγεται επιμήκυνση του ρολογιού. Για διαύλους με πολλές συσκευές, είναι σημαντικό να πάρουμε υπόψη την επιμήκυνση του ρολογιού, γιατί υπάρχει κίνδυνος η πιο αργή συσκευή να μειώσει την συνολική απόδοση του διαύλου.

Ένας γρήγορος τρόπος πρόσβασης στα δεδομένα
Πολλές I2C συσκευές έχουν έναν εσωτερικό καταχωρητή-δείκτη  ο οποίος δείχνει την θέση μνήμης από την οποία θα διαβάσουμε, ή στην οποία θα γράψουμε κατά την ακόλουθη ανάγνωση ή εγγραφή αντίστοιχα. Ο δείκτης αυτός αυξάνεται αυτόματα κατά 1 μετά από κάθε εγγραφή ή ανάγνωση. Στον δείκτη αυτόν έχουμε την δυνατότητα να γράψουμε την αρχική τιμή. Αυτό το χαρακτηριστικό δεν είναι μέρος του πρωτύπου I2C, αλλά είναι ένα πολύ χρήσιμο χαρακτηριστικό, όταν θέλουμε να γράψουμε ή να διαβάσουμε μεγάλο όγκο δεδομένων (π.χ σε I2C μνήμες RAM και ROM).

The I²C Software Protocol

Εγγραφή σε μία slave συσκευή 
Για να ξεκινήσει μία επικοινωνία, το πρώτο πράγμα που θα κάνει η master συσκευή είναι να εκπέμψει την ακολουθία έναρξης. Αυτό ειδοποιεί όλες τις slave συσκευές στο δίαυλο, ότι πρόκειται να ξεκινήσει μία εκπομπή και να ακούσουν για την περίπτωση που είναι γι’ αυτές. Στη συνέχεια η master συσκευή θα εκπέμψει την διεύθυνση της slave συσκευής με την οποία θέλει να επικοινωνήσει. Η slave συσκευή, που η διεύθυνσή της ταιριάζει με αυτήν που στάλθηκε θα συνεχίσει, ενώ όλες οι άλλες θα περάσουν σε αναμονή περιμένοντας την επόμενη επικοινωνία.
Μετά την αποστολή της δ/νσης της slave συσκευής, η master στέλνει τη διεύθυνση του καταχωρητή της slave στον οποίο θέλει να γράψει. Τώρα η master μπορεί να στείλει το Byte ή τα Bytes δεδομένων. Η master μπορεί να συνεχίσει να στέλνει δεδομένα, τα οποία θα τοποθετηθούν στις επόμενες θέσεις, επειδή η slave συσκευή θα αυξάνει αυτόματα την διεύθυνση του εσωτερικού καταχωρητή (καταχωρητή δείκτη-pointer register) μετά την λήψη κάθε byte. Όταν η master συσκευή στείλει όλα τα δεδομένα, σταματάει την εκπομπή εκπέμποντας μια ακολουθία λήξης.
Συγκεκριμένα τα βήματα που ακολουθούνται έχουν ως εξής:
Η master συσκευή:

       Στέλνει την ακολουθία έναρξης
 	Στέλνει την διεύθυνση της slave συσκευής με το R/W bit low (άρτια διεύθυνση), δηλώνοντας έτσι ότι θέλει να κάνει εγγραφή δηλ. να στείλει δεδομένα στη slave.
 	Στέλνει την διεύθυνση του εσωτερικού καταχωρητή στον οποίο θέλει να γράψει
 	Στέλνει το byte δεδομένων
 	Στέλνει (προαιρετικά) οποιοδήποτε αριθμό επιπλέον byte
 	Στέλνει την ακολουθία λήξης

Δηλ. για να γίνει πιο κατανοητή, η ακολουθία εγγραφής σε μία slave συσκευή από τη master, θα μπορούσε να κωδικοποιηθεί συμβολικά ώς εξής:

Start|AddrSlave|W|ACK|AddrReg|ACK|Data1|ACK|Data2|ACK|.........DataN|ACK|Stop

Στην παραπάνω ακολουθία:

Start: είναι η ακολουθία έναρξης που παράγεται από τη master συσκευή

Stop: είναι η ακολουθία λήξης και παράγεται από τη master συσκευή

W: είναι λογικό Low (λογικό μηδέν), και ειδοποιεί τη slave ότι η master συσκευή θέλει να κάνει εγγραφή

AddrSlave: Είναι η διεύθυνση του καταχωρητή (ή της θέσης μνήμης) της slave, στην οποία η master θέλει να κάνει εγγραφή

AddrReg :Είναι η διεύθυνση του καταχωρητή της συσκευής slave, στην οποία η master θέλει να κάνει εγγραφή

Data1, Data2, ....DataN: Είναι τα δεδομένα που αποστέλλονται για εγγραφή στους καταχωρητές της slave. To πρώτο θα γραφεί στη διεύθυνση AddrReg, και τα επόμενα διαδοχικά στις επόμενες διευθύνσεις.

ACK: Είναι το bit επιβεβαίωσης λήψης και είναι λογικό μηδέν. Εάν η slave αντί για ACK, που είναι λογικό μηδέν, στείλει πίσω NACK, που είναι λογικό ένα, ειδοποιεί την master ότι δεν μπορεί να λάβει. Τότε η master σταματά την επικοινωνία παράξοντας την ακολουθία λήξης Stop.

Σημειώνουμε ότι το σύμβολο | το χρησιμοποιούμε παραπάνω απλώς σαν διαχωριστό για την επεξήγηση και δεν αποστέλλεται

Ανάγνωση από την slave συσκευή 
Πριν να διαβάσουμε δεδομένα από μία slave συσκευή, πρέπει να την πληροφορήσουμε ποιον εσωτερικό καταχωρητή της θέλουνε να διαβάσουμε. Έτσι μία ανάγνωση από την slave συσκευή στην πραγματικότητα ξεκινά με μία εγγραφή σ’ αυτήν.

Έτσι η σειρά που ακολουθείται, για να διαβάσει μία master από μία slave, έχει ως εξής:

Η master συσκευή:

 	Στέλνει την ακολουθία έναρξης (Start)
	Στέλνει την διεύθυνση της slave συσκευής με το R/W bit low (εγγραφή, άρτια διεύθυνση). 
	Στέλνει την διεύθυνση του εσωτερικού καταχωρητή από τον οποίο θέλει να διαβάσει
Με τα δύο προηγούμενα βήματα, γράφεται ο καταχωρητής-δείκτης της slave συσκευής, σύμφωνα με αυτά που αναφέραμε νωρίτερα, για γρήγορη πρόσβαση στα δεδομένα
 	Στέλνει πάλι την ακολουθία έναρξης (επαναλαμβανόμενη έναρξη rS-repeated Start)
	Στέλνει πάλι την διεύθυνση της slave συσκευής με το R/W bit high (περιττή διεύθυνση), για να δηλώσει ότι επιθυμεί ανάγνωση
	Διαβάζει τα δεδομένα (ένα ή περισσότερα byte). Μετά από την λήψη κάθε byte, η συσκευή που λαμβάνει επιβεβαιώνει (ACK) τη λήψη.
 	Στέλνει την ακολουθία λήξης (Stop)

Πάλι για να γίνει πιο κατανοητή, η ακολουθία ανάγνωσης (από τη master) από μία slave συσκευή, θα μπορούσε να κωδικοποιηθεί συμβολικά ως εξής:

Start|AddrSlave|W|ACK|AddrReg|ACK|rStart|AddrSlave|R|ACK|Data1|ACK|Data2|ACK|.........DataN|ACK|Stop

Στην παραπάνω ακολουθία:

Start: είναι η ακολουθία έναρξης, που παράγεται από τη master συσκευή

rStart: είναι ακριβώς ίδια με την ακολουθία έναρξης Start και πάλι παράγεται από τη master συσκευή

Stop: είναι η ακολουθία λήξης, και παράγεται από τη master συσκευή

W: είναι λογικό Low (λογικό μηδέν), που δείχνει ότι η master συσκευή θέλει να κάνει εγγραφή στη slave

AddrSlave: Είναι η διεύθυνση της συσκευής slave, στην οποία η master θέλει να κάνει εγγραφή

AddrReg: Είναι η διεύθυνση του καταχωρητή της συσκευής slave, από την οποία η master θέλει να κάνει ή να ξεκινήσει την ανάγνωση

Data1, Data2, ....DataN: Είναι τα δεδομένα (Byte)  που αποστέλλονται από τη slave στη master. Πρώτο στέλνεται αυτό που βρίσκεται  στη διεύθυνση AddrReg, και τα επόμενα από τις επόμενες διευθύνσεις.

ACK: Είναι το bit επιβεβαίωσης λήψης  και είναι λογικό μηδέν. Και η maste μπορεί να στείλει ΝACK για να ειδοποιήσει τη slave ότι δεν επιθυμεί επιπλέον δεδομένα.

Σημειώνουμε ότι το σύμβολο | το χρησιμοποιούμε παραπάνω απλώς σαν διαχωριστό για την επεξήγηση και δεν αποστέλλεται

Εφαρμογές 
Ο δίαυλος I²C είναι κατάλληλος για περιφερειακά, όπου η απλότητα και το χαμηλό κόστος κατασκευής είναι σημαντικότερα από την ταχύτητα. 
Συνηθισμένες εφαρμογές του διαύλου είναι:
 	Ανάγνωση-εγγραφή σειριακών μνημών EEPROM
 	Πρόσβαση σε χαμηλής ταχύτητας μετατροπείς αναλογικού σήματος σε ψηφιακό (ADC ) ή ψηφιακού σε αναλογικό (DAC).
 	Ανάγνωση αισθητήρων με σύνδεση I²C
 	Ανάγνωση ρολογιών πραγματικού χρόνου (Real Time Clocks-RTCs)
 	Ανάγνωση επιτηρητών Hardware και διαγνωστικών αισθητήρων, όπως π.χ θερμοστατών CPU και ταχύτητας ανεμιστήρων
 	Ενεργοποίηση-Απενεργοποίηση τροφοδοσίας τμημάτων συστημάτων κ.α.
Στην αγορά υπάρχουν μικροελεγκτές που έχουν ενσωματωμένες θύρες I²C, αλλά ένα ιδιαίτερα ισχυρό χαρακτηριστικό του διαύλου I²C, είναι ότι ένας μικροελεγκτής μπορεί να εξομοιώσει τις θύρες I²C μόνο με γενικής χρήσης ακροδέκτες (general purpose  Ι/Ο) και λογισμικό, χωρίς να χρειάζεται να έχει εξειδικευμένο hardware (software I2C δίαυλος).

Επίσημες Προδιαγραφές 
 Official I2C Specification , NXP
 List of assigned NXP / Philips Semiconductor I2C addresses (Aug-1999), NXP

Άλλες Πηγές 
 Λεπτομερής Εισαγωγή, Αλφαβητάρι
 Αντιμετώπιση των Δυσκολιών Ανάπτυξης του I2C Χρησιμοποιώντας Πρωτοπόρα ΕργαλείαTackling
 Δικτυακά Σεμινάρια προχωρημένης Ανάλυσης του Διαύλου I²C
 I²C Υπόβαθρο 
 I²C Bus / Access Bus
 Χρησιμοποιώντας τον Δίαυλο  I²C Bus με το Linux
 Πιστοποιημένες πραγματώσεις του Διαύλου I²C
 OpenBSD iic(4) manual page
 Lm-sensors, Linux package which supports sensors using the I²C bus, among others.
 massmind I²C page Source code, samples and technical information for using I²C with PC, PIC and SX microcontrollers.
 Σελίδα Πληροφοριών Σειριακών Διαύλων
 Τεχνική περίληψη του διαύλου I²C και συχνές ερωτήσεις
 The Bus Buffer Resource.  For 2-wire buses such as I²C, SMBus, PMBus, IPMB & IPMI
 I²C Protocol
 I²C logic microchips from Texas Instruments
  Μία εμπορική Πραγματοποίηση του Διαύλου I²C γραμμένη σε VHDL
 OpenCores open source hardware implementation, in Verilog and VHDL
 Εισαγωγή στο δίαυλο I²C
 Εισαγωγή στα πρωτόκολλα SPI και I2C  
 Κώδικας Αποκωδικοποίησης Πρωτοκόλου I2C 
 Beginner's guide to using Arduino with I²C devices, including worked examples
 Επιπτώσεις μεταβολής των Pull-up αντιστάσεων στον δίαυλο I²C 

Σειριακοί δίαυλοι