Δίαυλος I2C — ανάθεση, συσκευή, μεταφορά δεδομένων, διευθυνσιοδότηση
Κατά τη δημιουργία ενός ηλεκτρονικού κυκλώματος, πολλοί προγραμματιστές αντιμετωπίζουν την ανάγκη χρήσης μεγάλου αριθμού ενδιάμεσων τσιπ για την αντιστοίχιση, τη δειγματοληψία και την αντιμετώπιση των μεμονωμένων μπλοκ του. Για να ελαχιστοποιήσει τον αριθμό των βοηθητικών τσιπ, η Philips πρότεινε μια διπλή αμφίδρομη διεπαφή σειριακού δικτύου I2C στη δεκαετία του 1980, σχεδιασμένη ειδικά για τη διαχείριση πολλαπλών τσιπ σε μία μόνο συσκευή.
Σήμερα, μόνο η Philips παράγει περισσότερες από εκατό συσκευές συμβατές με I2C για ηλεκτρονικό εξοπλισμό με μεγάλη ποικιλία σκοπών: μνήμη, συστήματα επεξεργαστών βίντεο, μετατροπείς αναλογικού σε ψηφιακό και ψηφιακό σε αναλογικό, προγράμματα οδήγησης οθόνης κ.λπ.
Ο δίαυλος I2C είναι μια τροποποίηση του πρωτοκόλλου ανταλλαγής σειριακών δεδομένων ικανό να μεταδίδει σειριακά δεδομένα 8-bit στη συνήθη "γρήγορη" λειτουργία με ρυθμούς από 100 έως 400 kbps. Η διαδικασία ανταλλαγής δεδομένων εφαρμόζεται εδώ μόνο σε δύο καλώδια (χωρίς να υπολογίζεται το κοινό καλώδιο): γραμμή SDA για δεδομένα και γραμμή SCL για συγχρονισμό.
Ο δίαυλος γίνεται αμφίδρομος λόγω του γεγονότος ότι οι καταρράκτες των εξόδων των συσκευών που συνδέονται με το δίαυλο έχουν ανοιχτούς συλλέκτες ή κανάλια, αναπαράγοντας έτσι την καλωδίωση AND. Ως αποτέλεσμα, ο δίαυλος ελαχιστοποιεί τον αριθμό των συνδέσεων μεταξύ των τσιπ, αφήνοντας λιγότερες απαιτούμενες ακίδες και ίχνη στον πίνακα. Ως αποτέλεσμα, η ίδια η σανίδα αποδεικνύεται πιο απλή, πιο συμπαγής και τεχνολογικά πιο προηγμένη στην παραγωγή.
Αυτό το πρωτόκολλο σάς επιτρέπει να απενεργοποιήσετε τους αποκωδικοποιητές διευθύνσεων και άλλες εξωτερικές λογικές διαπραγμάτευσης. Ο αριθμός των τσιπ που μπορούν να λειτουργήσουν ταυτόχρονα στο δίαυλο I2C περιορίζεται από τη χωρητικότητά του — μέγιστο 400 pF.
Τα IC συμβατά με I2C διαθέτουν αλγόριθμο καταστολής θορύβου υλικού για να διασφαλίζεται η ακεραιότητα των δεδομένων ακόμη και παρουσία ισχυρών παρεμβολών. Τέτοιες συσκευές έχουν μια διεπαφή που επιτρέπει στα μικροκυκλώματα να επικοινωνούν μεταξύ τους ακόμη και όταν οι τάσεις τροφοδοσίας τους είναι διαφορετικές. Στο παρακάτω σχήμα, μπορείτε να εξοικειωθείτε με την αρχή της σύνδεσης πολλών μικροκυκλωμάτων μέσω ενός κοινού διαύλου.
Κάθε μία από τις συσκευές που συνδέονται με το δίαυλο έχει τη δική της μοναδική διεύθυνση, καθορίζεται από αυτήν και, σύμφωνα με το σκοπό της συσκευής, μπορεί να λειτουργήσει ως δέκτης ή ως πομπός. Κατά τη μετάδοση δεδομένων, αυτές οι συσκευές μπορεί να είναι κύρια (κύρια) ή υποτελείς (σκλάβοι). Η κύρια συσκευή είναι η συσκευή που ξεκινά τη μεταφορά δεδομένων και παράγει σήματα ρολογιού στη γραμμή SCL. Ο σκλάβος, σε σχέση με τον κύριο, είναι η συσκευή προορισμού.
Σε κάθε δεδομένη στιγμή λειτουργίας στο δίαυλο I2C, μόνο μία συσκευή μπορεί να λειτουργήσει ως κύρια. παράγει ένα σήμα στη γραμμή SCL.Ένας κύριος μπορεί να είναι είτε κύριος δέκτης είτε κύριος πομπός.
Κατ 'αρχήν, ο δίαυλος επιτρέπει πολλούς διαφορετικούς πλοιάρχους, αλλά επιβάλλει περιορισμούς στα χαρακτηριστικά του σχηματισμού σημάτων ελέγχου και της παρακολούθησης της κατάστασης του διαύλου. Αυτό σημαίνει ότι πολλοί κύριοι μπορούν να αρχίσουν να εκπέμπουν ταυτόχρονα, αλλά οι συγκρούσεις αυτού του είδους εξαλείφονται χάρη στη διαιτησία, δηλαδή στον τρόπο με τον οποίο συμπεριφέρεται ο πλοίαρχος όταν ανιχνεύει ότι ο δίαυλος είναι κατειλημμένος από άλλο κύριο.
Ο συγχρονισμός ενός ζεύγους συσκευών διασφαλίζεται από το γεγονός ότι όλες οι συσκευές συνδέονται με το δίαυλο, σχηματίζοντας μια καλωδίωση "AND". Αρχικά, τα σήματα SDA και SCL είναι υψηλά.
START και STOP
Η ανταλλαγή ξεκινά με το master να δημιουργεί την κατάσταση «START»: στη γραμμή SDA, το σήμα πηγαίνει από την υψηλή στη χαμηλή κατάσταση, ενώ η γραμμή SCL έχει σταθερό υψηλό επίπεδο. Όλες οι συσκευές που είναι συνδεδεμένες στο δίαυλο αντιλαμβάνονται αυτή την κατάσταση ως εντολή για την έναρξη της ανταλλαγής.
Κάθε κύριος παράγει ένα ξεχωριστό σήμα ρολογιού στη γραμμή SCL κατά τη μετάδοση δεδομένων στο δίαυλο.
Η ανταλλαγή τελειώνει με το σχηματισμό της κατάστασης STOP από τον κύριο: στη γραμμή SDA το σήμα αλλάζει από χαμηλό σε υψηλό, ενώ η γραμμή SCL έχει σταθερό υψηλό επίπεδο.
Ο οδηγός ενεργεί πάντα ως πηγή των σημάτων START και STOP. Μόλις σταθεροποιηθεί το σήμα «START», σημαίνει ότι η γραμμή είναι κατειλημμένη. Η γραμμή είναι ελεύθερη όταν ανιχνευτεί σήμα STOP.
Αμέσως μετά τη δήλωση της κατάστασης START, ο κύριος αλλάζει τη γραμμή SCL σε χαμηλή τιμή και στέλνει το πιο σημαντικό bit του πρώτου byte μηνύματος στη γραμμή SDA. Ο αριθμός των byte σε ένα μήνυμα δεν είναι περιορισμένος.Οι αλλαγές στη γραμμή SDA ενεργοποιούνται μόνο όταν το επίπεδο σήματος στη γραμμή SCL είναι χαμηλό. Τα δεδομένα είναι έγκυρα και δεν πρέπει να αλλάζουν μόνο όταν ο παλμός συγχρονισμού είναι υψηλός.
Η επιβεβαίωση ότι το byte από τον κύριο πομπό έχει ληφθεί από τον εξαρτημένο δέκτη γίνεται με τη ρύθμιση ενός ειδικού bit επιβεβαίωσης στη γραμμή SDA μετά τη λήψη του όγδοου bit δεδομένων.
Η ΕΠΙΒΕΒΑΙΩΣΗ
Έτσι, η αποστολή 8 bit δεδομένων από τον πομπό στον δέκτη καταλήγει με έναν επιπλέον παλμό στη γραμμή SCL όταν η συσκευή λήψης πέσει χαμηλά στη γραμμή SDA, υποδεικνύοντας ότι έχει λάβει ολόκληρο το byte.
Η επιβεβαίωση αποτελεί αναπόσπαστο μέρος της διαδικασίας μεταφοράς δεδομένων. Η κύρια μονάδα δημιουργεί έναν παλμό συγχρονισμού. Ο πομπός στέλνει μια χαμηλή κατάσταση στο SDA ενώ το ρολόι επιβεβαίωσης είναι ενεργό. Ενώ ο παλμός συγχρονισμού είναι υψηλός, ο δέκτης πρέπει να διατηρεί χαμηλό το SDA.
Εάν η υποτελής υπηρεσία προορισμού δεν αναγνωρίζει τη διεύθυνσή της, για παράδειγμα επειδή είναι απασχολημένη αυτήν τη στιγμή, η γραμμή δεδομένων πρέπει να διατηρείται ψηλά. Ο πλοίαρχος μπορεί στη συνέχεια να δώσει ένα σήμα STOP για να ματαιώσει την αποστολή.
Εάν η λήψη πραγματοποιείται από τον κύριο δέκτη, τότε είναι υποχρεωμένος να ενημερώσει τον slave πομπό μετά την ολοκλήρωση της μετάδοσης - όχι επιβεβαιώνοντας το τελευταίο byte. Ο βοηθητικός πομπός απελευθερώνει τη γραμμή δεδομένων έτσι ώστε ο κύριος να μπορεί να εκδώσει ένα σήμα STOP ή ένα επαναλαμβανόμενο σήμα START.
Ο συγχρονισμός των συσκευών διασφαλίζεται από το γεγονός ότι οι συνδέσεις στη γραμμή SCL γίνονται σύμφωνα με την αρχή "AND".
Ο κύριος δεν έχει το αποκλειστικό δικαίωμα να ελέγχει τη μετάβαση της γραμμής SCL από το χαμηλό στο υψηλό.Εάν ο slave χρειάζεται περισσότερο χρόνο για να επεξεργαστεί ένα ληφθέν bit, μπορεί ανεξάρτητα να κρατήσει χαμηλό το SCL μέχρι να είναι έτοιμο να λάβει το επόμενο bit δεδομένων. Η γραμμή SCL σε μια τέτοια κατάσταση θα είναι χαμηλή κατά τη διάρκεια του μεγαλύτερου παλμού συγχρονισμού χαμηλού επιπέδου.
Οι συσκευές με το χαμηλότερο διατηρούμενο χαμηλό θα παραμείνουν σε αδράνεια μέχρι να λήξει η μεγάλη περίοδος. Όταν όλες οι συσκευές έχουν ολοκληρώσει την περίοδο χαμηλού συγχρονισμού, το SCL θα είναι υψηλό.
Όλες οι συσκευές θα αρχίσουν να μετρούν ψηλά και η πρώτη συσκευή που θα ολοκληρώσει την περίοδό της θα είναι η πρώτη που θα θέσει τη γραμμή SCL χαμηλά. Ως αποτέλεσμα, η διάρκεια της χαμηλής κατάστασης του SCL θα καθοριστεί από τη μεγαλύτερη χαμηλή κατάσταση του παλμού συγχρονισμού μιας από τις συσκευές και η διάρκεια της υψηλής κατάστασης θα καθοριστεί από τη συντομότερη περίοδο συγχρονισμού μιας από τις συσκευές.
Τα σήματα συγχρονισμού μπορούν να χρησιμοποιηθούν από τους δέκτες ως μέσο ελέγχου της μετάδοσης δεδομένων σε επίπεδο bit και byte.
Εάν η συσκευή είναι ικανή να λαμβάνει byte με υψηλό ρυθμό, αλλά χρειάζεται ένα ορισμένο χρονικό διάστημα για να αποθηκεύσει το ληφθέν byte ή να προετοιμαστεί για να λάβει το επόμενο byte, μπορεί να συνεχίσει να κρατά το SCL χαμηλά μετά τη λήψη και την αναγνώριση ενός byte, αναγκάζοντας το ο πομπός σε κατάσταση αναμονής.
Ένας μικροελεγκτής χωρίς ενσωματωμένα κυκλώματα υλικού, για παράδειγμα σε επίπεδο bit, μπορεί να επιβραδύνει την ταχύτητα του ρολογιού αυξάνοντας τη διάρκεια της χαμηλής κατάστασής τους. Ως αποτέλεσμα, ο ρυθμός baud της κύριας συσκευής θα καθοριστεί από την ταχύτητα του πιο αργή συσκευή.
ΔΙΕΥΘΥΝΣΗ
Κάθε συσκευή που είναι συνδεδεμένη στο δίαυλο I2C έχει μια μοναδική διεύθυνση προγράμματος στην οποία ο κύριος απευθύνεται σε αυτήν στέλνοντας μια συγκεκριμένη εντολή. Τα μικροκυκλώματα του ίδιου τύπου χαρακτηρίζονται από έναν επιλογέα διευθύνσεων, που υλοποιείται είτε με τη μορφή ψηφιακών εισόδων του επιλογέα είτε σε αναλογική μορφή. Οι διευθύνσεις χωρίζονται στον χώρο διευθύνσεων των συσκευών που είναι συνδεδεμένες στο δίαυλο.
Η κανονική λειτουργία προϋποθέτει διευθυνσιοδότηση επτά bit. Η διευθυνσιοδότηση λειτουργεί ως εξής: μετά την εντολή «START», ο κύριος στέλνει το πρώτο byte, το οποίο καθορίζει ποια εξαρτημένη συσκευή χρειάζεται για να επικοινωνήσει με τον κύριο. Υπάρχει επίσης μια κοινή διεύθυνση κλήσης που ορίζει όλες τις συσκευές στο δίαυλο, όλες οι συσκευές (θεωρητικά) ανταποκρίνονται σε αυτήν με μια επιβεβαίωση, αλλά στην πράξη αυτό είναι σπάνιο.
Έτσι τα πρώτα επτά bit του πρώτου byte είναι η υποτελής διεύθυνση. Το λιγότερο σημαντικό bit, το όγδοο, υποδεικνύει την κατεύθυνση αποστολής δεδομένων. Εάν υπάρχει ένα «0», τότε οι πληροφορίες θα γραφτούν από τον κύριο σε αυτόν τον σκλάβο. Εάν «1», οι πληροφορίες θα διαβαστούν από τον κύριο από αυτόν τον σκλάβο.
Αφού ο κύριος ολοκληρώσει την αποστολή του byte διεύθυνσης, κάθε slave συγκρίνει τη διεύθυνσή του με αυτό. Οποιοσδήποτε με την ίδια διεύθυνση είναι slave και ορίζεται ως slave πομπός ή slave δέκτης, ανάλογα με την τιμή του λιγότερο σημαντικού bit του byte διεύθυνσης.
Μια υποτελής διεύθυνση μπορεί να περιλαμβάνει σταθερά και προγραμματιζόμενα μέρη. Αρκετά συχνά ένας μεγάλος αριθμός συσκευών του ίδιου τύπου λειτουργεί σε ένα σύστημα, τότε το προγραμματιζόμενο τμήμα της διεύθυνσης επιτρέπει τη χρήση το πολύ του ίδιου τύπου συσκευών στο δίαυλο. Πόσα bit στο byte διεύθυνσης μπορούν να προγραμματιστούν εξαρτάται από τον αριθμό των ελεύθερων ακίδων στο τσιπ.
Μερικές φορές αρκεί μια ακίδα με αναλογική ρύθμιση του προγραμματιζόμενου εύρους διευθύνσεων, για παράδειγμα το SAA1064 - ένα πρόγραμμα οδήγησης ένδειξης LED που έχει ακριβώς μια τέτοια υλοποίηση. Το δυναμικό μιας συγκεκριμένης ακίδας καθορίζει τη μετατόπιση του χώρου διευθύνσεων του τσιπ, έτσι ώστε οι μάρκες του ίδιου τύπου να μην έρχονται σε σύγκρουση που λειτουργούν στον ίδιο δίαυλο. Όλα τα τσιπ που υποστηρίζουν το δίαυλο I2C περιέχουν ένα σύνολο διευθύνσεων που καθορίζει ο κατασκευαστής στην τεκμηρίωση.
Ο συνδυασμός «11110XX» προορίζεται για διευθυνσιοδότηση 10-bit. Αν φανταστούμε την ανταλλαγή δεδομένων από την εντολή «START» στην εντολή «STOP», θα μοιάζει με αυτό:
Εδώ επιτρέπονται απλές και συνδυασμένες μορφές ανταλλαγής δεδομένων. Η συνδυασμένη μορφή σημαίνει ότι μεταξύ «START» και «STOP» το master και το slave μπορούν να λειτουργήσουν ως δέκτες και πομποί, αυτό είναι χρήσιμο για παράδειγμα στη διαχείριση σειριακής μνήμης.
Αφήστε το πρώτο byte δεδομένων να μεταφέρει μια διεύθυνση μνήμης. Στη συνέχεια, επαναλαμβάνοντας την εντολή «START» και διαβάζοντας τη εξαρτημένη διεύθυνση, τα δεδομένα της μνήμης θα λειτουργήσουν. Οι αποφάσεις για την αυτόματη αύξηση ή μείωση της διεύθυνσης που είχε πρόσβαση προηγουμένως λαμβάνονται από τον προγραμματιστή της συσκευής αφού έχει προηγουμένως μελετήσει την τεκμηρίωση του τσιπ. Με τον ένα ή τον άλλο τρόπο, αφού λάβουν την εντολή START, όλες οι συσκευές πρέπει να επαναφέρουν τη λογική τους και να προετοιμαστούν για το γεγονός ότι η διεύθυνση θα ονομαστεί τώρα.