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. Η απαίτηση αυτή περιορίζει τις πρακτικές αποστάσεις επικοινωνίας.Παρακάτω γίνεται η σύγκριση διαφόρων υλοποιήσεων του διαύλου (πηγή) Αρχειοθετήθηκε 2017-01-10 στο Wayback Machine.. Στην πράξη μπορούμε π.χ. να πετύχουμε μεγαλύτερα μήκη διαύλου μειώνοντας την ταχύτητα. Και οι δύο γραμμές SCL και SDA είναι τύπου ανοικτού απαγωγού (open drain στον κόσμο των FET) ή ανοικτού συλλέκτη (open collector στον κόσμο των TTL). Αυτό σημαίνει ότι κάθε μία από αυτές τις δύο γραμμές, πρέπει να συνδέεται με μία αντίσταση στην γραμμή τροφοδοσίας, όπως φαίνεται στο παραπάνω σχήμα. Η αντίσταση αυτή ονομάζεται αντίσταση τερματισμού (ή pull up). Η τιμή των αντιστάσεων δεν είναι κρίσιμη, αλλά μαζί με την χωρητικότητα του διαύλου, επηρεάζει την μέγιστη ταχύτητα λειτουργίας του διαύλου. Μεγάλες χωρητικότητες του διαύλου, μπορούν να αντισταθμιστούν με μικρές αντιστάσεις τερματισμού. Συνηθισμένες τιμές αντιστάσεων είναι από 1ΚΩ έως 10ΚΩ. Οι αντιστάσεις αυτές δεν μπορούν να απουσιάζουν, διότι τότε οι γραμμές SCL και SDA θα είναι μονίμως σε κατάσταση λογικού 0 και δίαυλος δεν θα δουλεύει.

 Επειδή στον δίαυλο 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 αντίστοιχα. Οι συσκευές στον δίαυλο I²C είναι είτε Κύριοι (Masters) είτε Υποτελείς (Slave). Η Master συσκευή είναι αυτή που ελέγχει και οδηγεί τη γραμμή ρολογιού SCL (παράγει τους παλμούς ρολογιού). Οι Slave συσκευές είναι αυτές που ανταποκρίνονται στις συσκευές Master. Μία συσκευή Slave δεν μπορεί να ξεκινήσει μία μεταφορά πάνω στο δίαυλο, μόνο μία συσκευή Master μπορεί. Σε έναν δίαυλο μπορεί να είναι συνδεμένες πολλές Master και πολλές Slave συσκευές. Και οι Master και οι Slave συσκευές μπορούν να μεταφέρουν δεδομένα στον δίαυλο, αλλά μόνο οι Master συσκευές ελέγχουν την μεταφορά. Όταν μία 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 συσκευή πρέπει να τερματίσει την αποστολή δεδομένων, εκπέμποντας μία ακολουθία λήξης. Σε όλες τις 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) Αρχειοθετήθηκε 2013-05-11 στο Wayback Machine.. Όταν η master συσκευή διαβάζει από τη slave, η slave τοποθετεί τα δεδομένα στον δίαυλο, αλλά είναι η master που ελέγχει το ρολόι. Τι συμβαίνει, εάν η slave δεν είναι έτοιμη να στείλει δεδομένα; Με slave συσκευές όπως σειριακές EEPROM δεν υπάρχει πρόβλημα, αλλά αν η slave συσκευή είναι ένας μικροεπεξεργαστής ή μικροελεγκτής, οι οποίοι έχουν να κάνουν και άλλες εργασίες, αυτό είναι ένα πρόβλημα. Ο μικροεπεξεργαστής που παίζει το ρόλο της slave συσκευής, πρέπει π.χ να σώσει την κατάσταση του μικροεπεξεργαστή, να πάει στην υπορουτίνα διακοπής, να βρεί πια διεύθυνση θέλει η master να διαβάσει, να πάρει τα δεδομένα και να τα τοποθετήσει στον καταχωρητή εκπομπής. Αυτό απαιτεί κάποιον χρόνο, κατά τον οποίο η master συσκευή θα συνεχίζει να στέλνει παλμούς και κατά συνέπεια να διαβάζει λανθασμένα δεδομένα. Σε αυτήν την περίπτωση το πρωτόκολλο επιτρέπει η slave συσκευή να κρατάει το ρολόι σε κατάσταση λογικού 0 (low). Η master συσκευή από την άλλη πλευρά είναι υπεύθυνη, μετά από την απελευθέρωση της γραμμής ρολογιού, να ελέγξει εάν πράγματι πήγε στην υψηλή κατάσταση (high) προτού να συνεχίσει. Αυτός ο μηχανισμός λέγεται επιμήκυνση του ρολογιού. Για διαύλους με πολλές συσκευές, είναι σημαντικό να πάρουμε υπόψη την επιμήκυνση του ρολογιού, γιατί υπάρχει κίνδυνος η πιο αργή συσκευή να μειώσει την συνολική απόδοση του διαύλου. Πολλές I2C συσκευές έχουν έναν εσωτερικό καταχωρητή-δείκτη ο οποίος δείχνει την θέση μνήμης από την οποία θα διαβάσουμε, ή στην οποία θα γράψουμε κατά την ακόλουθη ανάγνωση ή εγγραφή αντίστοιχα. Ο δείκτης αυτός αυξάνεται αυτόματα κατά 1 μετά από κάθε εγγραφή ή ανάγνωση. Στον δείκτη αυτόν έχουμε την δυνατότητα να γράψουμε την αρχική τιμή. Αυτό το χαρακτηριστικό δεν είναι μέρος του πρωτύπου I2C, αλλά είναι ένα πολύ χρήσιμο χαρακτηριστικό, όταν θέλουμε να γράψουμε ή να διαβάσουμε μεγάλο όγκο δεδομένων (π.χ σε I2C μνήμες RAM και ROM). Για να ξεκινήσει μία επικοινωνία, το πρώτο πράγμα που θα κάνει η 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 συσκευή στην πραγματικότητα ξεκινά με μία εγγραφή σ’ αυτήν. Έτσι η σειρά που ακολουθείται, για να διαβάσει μία 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 Αρχειοθετήθηκε 2013-05-11 στο Wayback Machine., NXP List of assigned NXP / Philips Semiconductor I2C addresses (Aug-1999), NXP Λεπτομερής Εισαγωγή, Αλφαβητάρι Αντιμετώπιση των Δυσκολιών Ανάπτυξης του I2C Χρησιμοποιώντας Πρωτοπόρα ΕργαλείαTackling Δικτυακά Σεμινάρια προχωρημένης Ανάλυσης του Διαύλου I²C I²C Υπόβαθρο Αρχειοθετήθηκε 2012-12-27 στο Wayback Machine. 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 Αρχειοθετήθηκε 2012-08-28 στο Wayback Machine. Κώδικας Αποκωδικοποίησης Πρωτοκόλου I2C Beginner's guide to using Arduino with I²C devices, including worked examples Επιπτώσεις μεταβολής των Pull-up αντιστάσεων στον δίαυλο I²C