Εκπαιδευτικό σεμινάριο AVR. Εργασία με μονάδα SPI. Ανάγνωση και εγγραφή δεδομένων. Κεφάλαιο 2. Πώς να εργαστείτε με την είσοδο SPI - Theory Spi

Διεπαφές μεταφοράς.

Πολλές διεπαφές μεταφοράς δεδομένων έχουν αναπτυχθεί για τη μεταφορά δεδομένων από τη μια συσκευή στην άλλη ή από το ένα τσιπ στο άλλο. Κάθε διεπαφή έχει θετικές και αρνητικές πλευρές, επομένως πρέπει να γνωρίζετε ποιες διεπαφές υπάρχουν, τα πλεονεκτήματα και τα μειονεκτήματά τους και να χρησιμοποιήσετε τη σωστή διεπαφή για τη μεταφορά δεδομένων σε μια δεδομένη κατάσταση.

Οι διεπαφές συνοδεύονται από ασύγχρονη και σύγχρονη μεταφορά δεδομένων. Με τη σύγχρονη μετάδοση δεδομένων, ένα σήμα ρολογιού μεταδίδεται ταυτόχρονα με τα δεδομένα, επιτρέποντας στον δέκτη και τον πομπό να συγχρονιστούν. Ένα παράδειγμα τέτοιου πρωτοκόλλου είναι η διεπαφή SPI.

Στην ασύγχρονη μετάδοση δεδομένων δεν υπάρχει σήμα ρολογιού. Σε τέτοιες γραμμές υπάρχει κίνδυνος αναντιστοιχίας μεταξύ δέκτη και πομπού, με αποτέλεσμα να μην λαμβάνονται σωστά περαιτέρω δεδομένα. Για να αποφευχθεί αυτό, οι ασύγχρονες διεπαφές εκτελούν περιοδικό συγχρονισμό κατά μήκος των γραμμών δεδομένων. Το πλεονέκτημα τέτοιων διεπαφών είναι ο μικρότερος αριθμός αγωγών που απαιτούνται για τη μετάδοση.

Ας ρίξουμε μια πιο προσεκτική ματιά σε αρκετές από τις πιο δημοφιλείς διεπαφές.

Διεπαφή USART.

Η διεπαφή USART είναι ένας σειριακός παγκόσμιος σύγχρονος-ασύγχρονος πομποδέκτης. Τα δεδομένα μεταφέρονται στο USART σε τακτά χρονικά διαστήματα. Αυτή η χρονική περίοδος καθορίζεται από την καθορισμένη ταχύτητα USART και καθορίζεται σε baud (Για χαρακτήρες που μπορούν να λάβουν μόνο τιμές ίσες με μηδέν ή ένα, το baud είναι ισοδύναμο με bit ανά δευτερόλεπτο). Υπάρχει ένα γενικά αποδεκτό εύρος τυπικών ταχυτήτων: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 926.

Εκτός από τα bit δεδομένων, το USART εισάγει αυτόματα σημάδια συγχρονισμού στη ροή, τα λεγόμενα bit έναρξης και διακοπής. Κατά τη λήψη, αυτά τα επιπλέον κομμάτια αφαιρούνται. Συνήθως, τα bit έναρξης και λήξης χωρίζουν ένα byte πληροφοριών (8 bit), αλλά υπάρχουν υλοποιήσεις USART που επιτρέπουν τη μετάδοση 5, 6, 7, 8 ή 9 bit. Τα bit που χωρίζονται από τα σήματα έναρξης και διακοπής είναι τα ελάχιστα στάδια. Το USART σάς επιτρέπει να εισάγετε δύο bit διακοπής κατά τη μετάδοση για να μειώσετε την πιθανότητα αποσυγχρονισμού του δέκτη και του πομπού σε έντονη κυκλοφορία. Ο δέκτης αγνοεί το δεύτερο bit stop, αντιμετωπίζοντάς το ως μια μικρή παύση στη γραμμή.

Η σύμβαση είναι ότι η παθητική (ελλείψει δεδομένων) κατάσταση της εισόδου και της εξόδου USART είναι ένα λογικό "1". Το bit έναρξης είναι πάντα ένα λογικό "0", επομένως ο δέκτης USART περιμένει μια μετάβαση από το "1" στο "0" και μετράει από αυτό ένα χρονικό διάστημα ίσο με το μισό της διάρκειας του bit (το μέσο της μετάδοσης του bit έναρξης) . Εάν αυτή τη στιγμή η είσοδος είναι ακόμα "0", τότε ξεκινά η διαδικασία λήψης του ελάχιστου δέματος. Για να γίνει αυτό, ο δέκτης μετρά 9 διάρκειες bit στη σειρά (για δεδομένα 8 bit) και καταγράφει την κατάσταση εισόδου κάθε στιγμή. Οι πρώτες 8 τιμές είναι δεδομένα που λαμβάνονται, η τελευταία τιμή είναι μια τιμή δοκιμής (stop bit). Η τιμή του bit διακοπής είναι πάντα "1", εάν η πραγματική τιμή που λήφθηκε είναι διαφορετική, το USART καταγράφει ένα σφάλμα.

Για τον σχηματισμό χρονικών διαστημάτων, τα USART που εκπέμπουν και λαμβάνουν μια πηγή ακριβούς χρόνου (ρολόι). Η ακρίβεια αυτής της πηγής πρέπει να είναι τέτοια ώστε το άθροισμα των σφαλμάτων (δέκτης και πομπός) στη ρύθμιση του χρονικού διαστήματος από την αρχή του παλμού έναρξης έως το μέσο του παλμού διακοπής να μην υπερβαίνει το μισό (ή καλύτερα, τουλάχιστον ένα τέταρτο) του διαστήματος bit. Για ένα μήνυμα 8 bit 0,5/9,5 = 5% (στην πραγματικότητα όχι περισσότερο από 3%). Δεδομένου ότι αυτό είναι το άθροισμα των σφαλμάτων του δέκτη και του πομπού συν την πιθανή παραμόρφωση του σήματος στη γραμμή, η συνιστώμενη ανοχή για την ακρίβεια χρονισμού USART δεν είναι μεγαλύτερη από 1,5%.

Εφόσον τα bit ρολογιού καταλαμβάνουν μέρος της ροής bit, η προκύπτουσα παροχή UART δεν είναι ίση με την ταχύτητα σύνδεσης. Για παράδειγμα, για μεταδόσεις μορφής 8-bit 8-N-1, τα bit ρολογιού καταλαμβάνουν το 20% της ροής, η οποία για φυσική ταχύτητα 115.200 baud δίνει ρυθμό μετάδοσης bit δεδομένων 92.160 bps ή 11.520 byte/s.

Έλεγχος ισοτιμίας

Το πρωτόκολλο USART έχει τη δυνατότητα αυτόματης παρακολούθησης της ακεραιότητας των δεδομένων χρησιμοποιώντας τη μέθοδο ισοτιμίας bit. Όταν αυτή η δυνατότητα είναι ενεργοποιημένη, το τελευταίο bit δεδομένων (το "bit parity") είναι πάντα 1 ή 0, έτσι ώστε ο αριθμός των σε ένα byte να είναι πάντα άρτιος.

Έλεγχος ροής

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

Φυσική υλοποίηση.

Το USART είναι ένα πρωτόκολλο ανταλλαγής, δηλ. καθορίζει τη μέθοδο σχηματισμού bit, τις παραμέτρους μετάδοσης byte, την ταχύτητα μετάδοσης κ.λπ.

Αλλά η φυσική εφαρμογή του USART μπορεί να είναι διαφορετική. Για παράδειγμα, για τη μετάδοση δεδομένων σε μία πλακέτα, τα σήματα μεταδίδονται σε επίπεδα +5V και 0V. Για τη μεταφορά δεδομένων σε μεγάλες αποστάσεις και μεταξύ συσκευών, χρησιμοποιούνται άλλα φυσικά επίπεδα τάσης και πρότυπα, όπως: βρόχος ρεύματος (4-20 mA), RS-232 (θύρα COM), RS-485 και παρόμοια.

Για τη μετατροπή των επιπέδων "ελεγκτή" 0-5V σε "τυποποιημένα" επίπεδα, υπάρχει ένας τεράστιος αριθμός εξειδικευμένων μικροκυκλωμάτων, για παράδειγμα ADM202 για RS-232.

Σειριακή διεπαφή SPI

Το όνομα SPI είναι συντομογραφία του "Serial Peripheral Bus", το οποίο αντικατοπτρίζει τον σκοπό του - έναν δίαυλο για τη σύνδεση εξωτερικών συσκευών. Ο δίαυλος SPI είναι οργανωμένος σύμφωνα με την αρχή master-slave. Ο κύριος διαύλου είναι συνήθως ένας μικροελεγκτής, αλλά μπορεί επίσης να είναι προγραμματιζόμενος λογικός, ελεγκτής DSP ή ASIC. Οι συσκευές που συνδέονται με τον κύριο είναι σκλάβοι. Ο ρόλος τους διαδραματίζεται από διάφορα είδη μικροκυκλωμάτων, περιλαμβανομένων. συσκευές αποθήκευσης (EEPROM, μνήμη Flash, SRAM), ρολόι πραγματικού χρόνου (RTC), ADC/DAC, ψηφιακά ποτενσιόμετρα, εξειδικευμένοι ελεγκτές κ.λπ.

Το κύριο δομικό στοιχείο της διεπαφής SPI είναι ένας συμβατικός καταχωρητής μετατόπισης, του οποίου ο συγχρονισμός και τα σήματα εισόδου/εξόδου ροής bit σχηματίζουν τα σήματα διασύνδεσης. Έτσι, είναι πιο σωστό να ονομάζουμε το πρωτόκολλο SPI όχι πρωτόκολλο μεταφοράς δεδομένων, αλλά πρωτόκολλο ανταλλαγής δεδομένων μεταξύ δύο καταχωρητών μετατόπισης, καθένας από τους οποίους εκτελεί ταυτόχρονα και τη λειτουργία ενός δέκτη και ενός πομπού. Απαραίτητη προϋπόθεση για τη μετάδοση δεδομένων στο δίαυλο SPI είναι η παραγωγή ενός σήματος συγχρονισμού διαύλου. Μόνο ο ηγέτης έχει το δικαίωμα να παράγει αυτό το σήμα και η δουλειά του σκλάβου εξαρτάται πλήρως από αυτό.

Σύνδεση.

Υπάρχουν τρεις τύποι σύνδεσης με το δίαυλο SPI, καθένας από τους οποίους περιλαμβάνει τέσσερα σήματα. Ο σκοπός των σημάτων SPI περιγράφεται στον Πίνακα 7.1.

Η απλούστερη σύνδεση, η οποία περιλαμβάνει μόνο δύο μικροκυκλώματα, φαίνεται στο Σχήμα 7.2. Εδώ, ο κύριος δίαυλος μεταδίδει δεδομένα κατά μήκος της γραμμής MOSI συγχρονισμένα με το σήμα SCLK που δημιουργείται από αυτόν και ο εξαρτημένος συλλαμβάνει τα μεταδιδόμενα bit δεδομένων σε ορισμένες άκρες του λαμβανόμενου σήματος συγχρονισμού. Ταυτόχρονα, ο slave στέλνει το πακέτο δεδομένων του. Το παρουσιαζόμενο κύκλωμα μπορεί να απλοποιηθεί με την εξάλειψη της γραμμής MISO εάν το εξαρτώμενο IC που χρησιμοποιείται δεν παρέχει μετάδοση δεδομένων απόκρισης ή δεν υπάρχει ανάγκη για αυτό. Η μονόδρομη μεταφορά δεδομένων μπορεί να βρεθεί σε τσιπ όπως DAC, ψηφιακά ποτενσιόμετρα, προγραμματιζόμενους ενισχυτές και προγράμματα οδήγησης. Έτσι, η εξεταζόμενη επιλογή για τη σύνδεση ενός slave IC απαιτεί 3 ή 4 γραμμές επικοινωνίας.

Για να μπορεί το slave IC να λαμβάνει και να μεταδίδει δεδομένα, εκτός από το σήμα ρολογιού, η γραμμή SS πρέπει επίσης να οδηγείται χαμηλά. Διαφορετικά, το slave IC θα είναι ανενεργό. Όταν χρησιμοποιείται μόνο ένα εξωτερικό IC, μπορεί να είναι δελεαστικό να εξαλειφθεί η γραμμή SS οδηγώντας την επιλεγμένη είσοδο του βοηθητικού IC σε πολύ χαμηλά επίπεδα. Αυτή η λύση είναι εξαιρετικά ανεπιθύμητη και μπορεί να οδηγήσει σε αστοχίες ή ακόμα και σε αδυναμία μεταφοράς δεδομένων, επειδή Η είσοδος επιλογής chip χρησιμεύει για την επαναφορά του IC στην αρχική του κατάσταση και μερικές φορές εκκινεί την έξοδο του πρώτου bit δεδομένων.

Εάν είναι απαραίτητο να συνδέσετε πολλά μικροκυκλώματα στο δίαυλο SPI, χρησιμοποιείται είτε μια ανεξάρτητη (παράλληλη) σύνδεση (Εικ. 7.3) είτε μια διαδοχική (σειριακή) σύνδεση (Εικ. 7.4). Η ανεξάρτητη σύνδεση είναι πιο συνηθισμένη, γιατί επιτυγχάνεται όταν χρησιμοποιείτε τσιπ συμβατά με SPI. Εδώ, όλα τα σήματα, εκτός από την επιλογή μικροκυκλωμάτων, συνδέονται παράλληλα και ο κύριος διαύλου, μεταφέροντας ένα ή άλλο σήμα SS σε χαμηλή κατάσταση, καθορίζει με ποιο slave IC θα ανταλλάξει δεδομένα. Το κύριο μειονέκτημα αυτής της σύνδεσης είναι η ανάγκη για πρόσθετες γραμμές για τη διευθυνσιοδότηση υποτελών τσιπ (ο συνολικός αριθμός γραμμών επικοινωνίας είναι 3+n, όπου n είναι ο αριθμός των υποτελών τσιπ).

Εάν δεν υπάρχουν αρκετά πόδια μικροελεγκτή, μπορείτε να χρησιμοποιήσετε ένα τσιπ αποπολυπλέκτη. Ο αποπολυπλέκτης συνδέει ένα μόνο σήμα εισόδου σε ένα από τα σήματα εξόδου, ανάλογα με τον κωδικό στις ακίδες ελέγχου. Το σχήμα 7.4 δείχνει το διάγραμμα σύνδεσης για τον αποπολυπλέκτη. Το σήμα SS παρέχεται στην είσοδό του, το οποίο παίρνει τιμή ίση με 0 εάν είναι απαραίτητο να επιλέξετε ένα από τα μικροκυκλώματα. Ο αριθμός του απαιτούμενου μικροκυκλώματος σε δυαδικό κώδικα παρέχεται στα σκέλη Am-A0. Αυτό σας επιτρέπει να μειώσετε τον αριθμό των σκελών που χρησιμοποιούνται στον μικροελεγκτή σε m=log 2 n. Όπου n είναι ο αριθμός των υποτελών τσιπ. Εκείνοι. Για τη σύνδεση 128 συσκευών, απαιτούνται 8 ακροδέκτες μικροελεγκτή. Ένα για τη ρύθμιση του σήματος ενεργοποίησης και το 7 για τη ρύθμιση του αριθμού του τσιπ που θα ενεργοποιηθεί. Πρέπει να σημειωθεί ότι πρέπει να υπάρχει μια λογική στα μη συνδεδεμένα σκέλη του αποπολυπλέκτη. Διαφορετικά, χρησιμοποιείται ένας μετατροπέας σήματος, ο οποίος μετατρέπει ένα λογικό μηδέν σε λογικό.

Η εναλλαγή καταρράκτη είναι απαλλαγμένη από αυτό το μειονέκτημα, επειδή Εδώ, πολλές μάρκες σχηματίζουν έναν μεγάλο καταχωρητή μετατόπισης. Για να γίνει αυτό, η έξοδος δεδομένων μετάδοσης του ενός IC συνδέεται με την είσοδο λήψης δεδομένων του άλλου, όπως φαίνεται στο σχήμα 3. Οι είσοδοι επιλογής chip εδώ συνδέονται παράλληλα και, επομένως, ο συνολικός αριθμός των γραμμών επικοινωνίας διατηρείται ίσος έως 4. Ωστόσο, η χρήση της σύνδεσης καταρράκτη είναι δυνατή μόνο εάν η υποστήριξή της υποδεικνύεται στην τεκμηρίωση για τα τσιπ που χρησιμοποιούνται. Για να το μάθετε, είναι σημαντικό να γνωρίζετε ότι μια τέτοια σύνδεση ονομάζεται "daisy-chaining" στα αγγλικά.

Πρωτόκολλο μεταφοράς

Το πρωτόκολλο μετάδοσης μέσω της διεπαφής SPI είναι ουσιαστικά πανομοιότυπο με τη λογική του καταχωρητή μετατόπισης (Εικόνα 7.6), ο οποίος συνίσταται στην εκτέλεση μιας λειτουργίας μετατόπισης και, κατά συνέπεια, στην είσοδο και έξοδο bit δεδομένων σε ορισμένες ακμές του σήματος συγχρονισμού. Η ρύθμιση δεδομένων κατά τη μετάδοση και η δειγματοληψία κατά τη λήψη εκτελούνται πάντα σε αντίθετα άκρα του ρολογιού. Αυτό είναι απαραίτητο για να διασφαλιστεί ότι γίνεται δειγματοληψία των δεδομένων αφού έχουν βεβαιωθεί αξιόπιστα. Αν λάβουμε υπόψη ότι το πρώτο άκρο στον κύκλο μετάδοσης μπορεί να είναι μια ανερχόμενη ή καθοδική άκρη, τότε υπάρχουν τέσσερις πιθανές λογικές επιλογές για τη λειτουργία της διεπαφής SPI. Αυτές οι επιλογές ονομάζονται λειτουργίες SPI και περιγράφονται από δύο παραμέτρους:

· CPOL - αρχική στάθμη του σήματος συγχρονισμού (αν CPOL=0, τότε η γραμμή συγχρονισμού πριν από την έναρξη του κύκλου μετάδοσης και μετά το τέλος της έχει χαμηλό επίπεδο (δηλαδή η πρώτη ακμή ανεβαίνει και η τελευταία πέφτει), διαφορετικά, εάν CPOL=1, - υψηλό (δηλαδή το πρώτο μέτωπο πέφτει και το τελευταίο ανεβαίνει));

· CPHA - φάση συγχρονισμού. Αυτή η παράμετρος καθορίζει τη σειρά με την οποία εγκαθίστανται και ανακτώνται τα δεδομένα. Εάν CPHA=0, τότε στην ανερχόμενη άκρη του κύκλου του ρολογιού θα γίνει δειγματοληψία των δεδομένων και, στη συνέχεια, στην πτωτική άκρη θα οριστούν τα δεδομένα. Εάν CPHA=1, τότε η εγκατάσταση δεδομένων θα εκτελεστεί στην ανερχόμενη άκρη στον κύκλο συγχρονισμού και η δειγματοληψία θα εκτελεστεί στην πτώση.

Πληροφορίες για τις λειτουργίες SPI παρουσιάζονται στα Σχήματα 7.7 και 7.8.

Τα κύρια και τα υποτελή τσιπ που λειτουργούν σε διαφορετικούς τρόπους λειτουργίας SPI δεν είναι συμβατά, επομένως, προτού επιλέξετε υποτελή τσιπ, είναι σημαντικό να διευκρινίσετε ποιες λειτουργίες υποστηρίζονται από τον κύριο διαύλου. Οι μονάδες SPI υλικού που είναι ενσωματωμένες σε μικροελεγκτές, στις περισσότερες περιπτώσεις, υποστηρίζουν τη δυνατότητα επιλογής οποιασδήποτε λειτουργίας και, ως εκ τούτου, μπορούν να συνδεθούν οποιαδήποτε υποτελή τσιπ SPI (ισχύει μόνο για μια ανεξάρτητη επιλογή σύνδεσης). Επιπλέον, το πρωτόκολλο SPI σε οποιαδήποτε από τις λειτουργίες υλοποιείται εύκολα σε λογισμικό.

Διασύνδεση RS-485

Η διεπαφή RS-485 (άλλο όνομα είναι EIA/TIA-485) είναι ένα από τα πιο κοινά πρότυπα επιπέδου φυσικής επικοινωνίας. Το φυσικό επίπεδο είναι ένα κανάλι επικοινωνίας και μια μέθοδος μετάδοσης σήματος (επίπεδο 1 του μοντέλου διασύνδεσης ανοιχτών συστημάτων OSI).

Ένα δίκτυο που βασίζεται στη διασύνδεση RS-485 αποτελείται από πομποδέκτες συνδεδεμένους χρησιμοποιώντας ένα συνεστραμμένο ζεύγος - δύο συνεστραμμένα καλώδια. Η διεπαφή RS-485 βασίζεται στην αρχή της διαφορικής (ισορροπημένης) μετάδοσης δεδομένων. Η ουσία του είναι να μεταδίδει ένα σήμα σε δύο καλώδια. Επιπλέον, το ένα καλώδιο (υπό όρους Α) φέρει το αρχικό σήμα και το άλλο (υπό όρους Β) φέρει το αντίστροφο αντίγραφό του. Με άλλα λόγια, εάν υπάρχει "1" στο ένα καλώδιο, τότε ένα "0" στο άλλο και αντίστροφα. Έτσι, υπάρχει πάντα μια διαφορά δυναμικού μεταξύ των δύο καλωδίων ενός συνεστραμμένου ζεύγους: στο "1" είναι θετικό, στο "0" είναι αρνητικό (Εικόνα 7.9).

Αυτή η διαφορά δυναμικού είναι που μεταδίδει το σήμα. Αυτή η μέθοδος μετάδοσης παρέχει υψηλή ατρωσία σε παρεμβολές κοινού τρόπου λειτουργίας. Η παρεμβολή κοινής λειτουργίας είναι μια παρεμβολή που επηρεάζει εξίσου και τα δύο καλώδια της γραμμής. Για παράδειγμα, ένα ηλεκτρομαγνητικό κύμα που διέρχεται από ένα τμήμα μιας γραμμής επικοινωνίας προκαλεί δυναμικό και στα δύο καλώδια. Εάν το σήμα μεταδίδεται με δυναμικό σε ένα καλώδιο σε σχέση με το κοινό, όπως στο RS-232, τότε η παρεμβολή σε αυτό το καλώδιο μπορεί να παραμορφώσει το σήμα σε σχέση με το κοινό (γείωση) που απορροφά καλά τις παρεμβολές. Επιπλέον, η διαφορά δυναμικού γείωσης θα πέσει στην αντίσταση ενός μακριού κοινού σύρματος - μια πρόσθετη πηγή παραμόρφωσης. Και με το διαφορικό κιβώτιο ταχυτήτων, δεν εμφανίζεται παραμόρφωση. Στην πραγματικότητα, αν δύο καλώδια βρίσκονται κοντά το ένα στο άλλο, και είναι ακόμη και συμπλεγμένα, τότε η λήψη και στα δύο καλώδια είναι η ίδια. Το δυναμικό και στα δύο καλώδια με ίσα φορτία αλλάζει εξίσου, ενώ η πληροφοριακή διαφορά δυναμικού παραμένει αμετάβλητη.

Εφαρμογή υλικού της διεπαφής RS485.

Υλική υλοποίηση της διεπαφής - τσιπ πομποδέκτη με διαφορικές εισόδους/εξόδους (προς τη γραμμή) και ψηφιακές θύρες (προς τις θύρες UART του ελεγκτή). Υπάρχουν δύο επιλογές για αυτήν τη διεπαφή: RS-422 και RS-485.

Το RS-422 είναι μια πλήρως αμφίδρομη διεπαφή. Η λήψη και η μετάδοση πραγματοποιούνται σε δύο ξεχωριστά ζεύγη καλωδίων. Μπορεί να υπάρχει μόνο ένας πομπός σε κάθε ζεύγος καλωδίων.

Το RS-485 είναι μια διεπαφή μισής διπλής όψης. Η λήψη και η μετάδοση πραγματοποιούνται σε ένα ζεύγος καλωδίων με χρονικό διαχωρισμό. Μπορεί να υπάρχουν πολλοί πομποί σε ένα δίκτυο, αφού μπορούν να απενεργοποιηθούν στη λειτουργία λήψης (Εικόνα 7.10).

Επεξήγηση συμβόλων στο Σχ. 7.10

D (οδηγός) - πομπός.
R (δέκτης) - δέκτης.
DI (είσοδος προγράμματος οδήγησης) - ψηφιακή είσοδος του πομπού.
RO (έξοδος δέκτη) - ψηφιακή έξοδος του δέκτη.
DE (ενεργοποίηση προγράμματος οδήγησης) - άδεια λειτουργίας του πομπού.
RE (ενεργοποίηση δέκτη) - άδεια λειτουργίας του δέκτη.
A - άμεση διαφορική είσοδος/έξοδος.
B - αντίστροφη διαφορική είσοδος/έξοδος.
Υ - άμεση διαφορική έξοδος (RS-422).
Z - αντίστροφη διαφορική έξοδος (RS-422).

Ας ρίξουμε μια πιο προσεκτική ματιά στον πομποδέκτη RS-485. Η ψηφιακή έξοδος του δέκτη (RO) συνδέεται στη θύρα UART του δέκτη (RX). Ψηφιακή είσοδος πομπού (DI) στη θύρα πομπού UART (TX). Δεδομένου ότι ο δέκτης και ο πομπός συνδέονται στην πλευρά του διαφορικού, ο πομπός πρέπει να είναι απενεργοποιημένος κατά τη λήψη και ο δέκτης πρέπει να απενεργοποιείται κατά τη μετάδοση. Για το σκοπό αυτό, χρησιμοποιούνται είσοδοι ελέγχου - άδεια λήψης (RE) και άδεια πομπού (DE). Δεδομένου ότι η είσοδος RE είναι αντίστροφη, μπορεί να συνδεθεί στο DE και να αλλάξει τον δέκτη και τον πομπό με ένα σήμα από οποιαδήποτε θύρα του ελεγκτή. Στο επίπεδο "0" - εργασία για λήψη, στο "1" - για μετάδοση (Εικ. 7.11).

Ο δέκτης, λαμβάνοντας τη διαφορά δυναμικού (UAB) στις διαφορικές εισόδους (AB), τις μετατρέπει σε ψηφιακό σήμα στην έξοδο RO. Η ευαισθησία του δέκτη μπορεί να είναι διαφορετική, αλλά οι κατασκευαστές τσιπ πομποδέκτη γράφουν στην τεκμηρίωση το εγγυημένο εύρος ορίου για την αναγνώριση σήματος. Συνήθως αυτά τα κατώφλια είναι ±200 mV. Δηλαδή, όταν UAB > +200 mV - ο δέκτης ανιχνεύει "1" όταν UAB< -200 мВ - приемник определяет "0". Если разность потенциалов в линии настолько мала, что не выходит за пороговые значения - правильное распознавание сигнала не гарантируется. Кроме того, в линии могут быть и не синфазные помехи, которые исказят столь слабый сигнал.

Όλες οι συσκευές συνδέονται σε ένα καλώδιο συνεστραμμένου ζεύγους με τον ίδιο τρόπο: απευθείας έξοδοι (Α) στο ένα καλώδιο, αντίστροφες έξοδοι (Β) στο άλλο.

Η αντίσταση εισόδου του δέκτη από την πλευρά της γραμμής (RAB) είναι συνήθως 12 KΩ. Δεδομένου ότι η ισχύς του πομπού δεν είναι απεριόριστη, αυτό δημιουργεί ένα όριο στον αριθμό των δεκτών που είναι συνδεδεμένοι στη γραμμή. Σύμφωνα με την προδιαγραφή RS-485, λαμβάνοντας υπόψη τις αντιστάσεις τερματισμού, ο πομπός μπορεί να οδηγήσει έως και 32 δέκτες. Ωστόσο, υπάρχει ένας αριθμός μικροκυκλωμάτων με αυξημένη σύνθετη αντίσταση εισόδου, που σας επιτρέπει να συνδέσετε σημαντικά περισσότερες από 32 συσκευές στη γραμμή.

Η μέγιστη ταχύτητα επικοινωνίας σύμφωνα με την προδιαγραφή RS-485 μπορεί να φτάσει τα 10 Mbaud/sec. Η μέγιστη απόσταση είναι 1200 μέτρα. Εάν είναι απαραίτητο να οργανώσετε την επικοινωνία σε απόσταση μεγαλύτερη από 1200 μέτρα ή να συνδέσετε περισσότερες συσκευές από αυτές που επιτρέπει η χωρητικότητα φορτίου του πομπού, χρησιμοποιούνται ειδικοί επαναλήπτες.

Διασύνδεση I2C.

Αυτή η διεπαφή προτάθηκε από τη Philips, η οποία τη χρησιμοποίησε για να οργανώσει την επικοινωνία μεταξύ των τσιπ στις τηλεοράσεις της. Το I 2 C (μια συντομογραφία του Inter-Integrated Circuit) είναι ένας αμφίδρομος ασύγχρονος σειριακός δίαυλος. Φυσικά, ο δίαυλος I 2 C αποτελείται από δύο γραμμές σήματος, η μία από τις οποίες (SCL) προορίζεται για τη μετάδοση σήματος ρολογιού και η δεύτερη (SDA) για ανταλλαγή δεδομένων. Για τον έλεγχο των γραμμών, χρησιμοποιούνται στάδια εξόδου με ανοιχτό συλλέκτη, επομένως οι γραμμές διαύλου πρέπει να συνδέονται με μια πηγή ισχύος +5 V μέσω αντιστάσεων με αντίσταση 1...10 kOhm, ανάλογα με το φυσικό μήκος των γραμμών και ο ρυθμός μεταφοράς δεδομένων. Το μήκος των γραμμών σύνδεσης σε τυπική λειτουργία μπορεί να φτάσει τα 2 μέτρα, ο ρυθμός μεταφοράς δεδομένων είναι 100 kbit/s.

Όλοι οι συνδρομητές λεωφορείων χωρίζονται σε δύο κατηγορίες - "Leader" και "Slave". Η κύρια συσκευή παράγει ένα σήμα ρολογιού (SCL). Μπορεί ανεξάρτητα να έχει πρόσβαση στο δίαυλο και να απευθύνεται σε οποιαδήποτε εξαρτημένη συσκευή με σκοπό τη μετάδοση ή τη λήψη πληροφοριών. Όλες οι slave συσκευές «ακούν» τον δίαυλο για να εντοπίσουν τη δική τους διεύθυνση και, αφού την αναγνωρίσουν, εκτελούν την προβλεπόμενη λειτουργία. Επιπλέον, η λεγόμενη λειτουργία "MultiMaster" είναι δυνατή, όταν πολλές κύριες συσκευές είναι εγκατεστημένες στο δίαυλο, οι οποίες είτε μοιράζονται από κοινού κοινές εξαρτημένες συσκευές, είτε ενεργούν εναλλακτικά ως κύριοι όταν οι ίδιοι ξεκινούν την ανταλλαγή πληροφοριών ή ως σκλάβοι όταν περιμένουν πρόσβαση από άλλη κύρια συσκευή. Η λειτουργία "MultiMaster" απαιτεί συνεχή παρακολούθηση και αναγνώριση των συγκρούσεων. Από αυτή την άποψη, αυτή η λειτουργία είναι πιο δύσκολο να εφαρμοστεί (εννοεί την εφαρμογή λογισμικού) και, ως εκ τούτου, χρησιμοποιείται λιγότερο συχνά σε πραγματικά προϊόντα.

Την αρχική στιγμή - σε κατάσταση αναμονής - και οι δύο γραμμές SCL και SDA βρίσκονται σε μια λογική κατάσταση (το τρανζίστορ της βαθμίδας εξόδου ανοιχτού συλλέκτη είναι κλειστό). Στη λειτουργία μετάδοσης (Εικόνα 7.12), το bit δεδομένων SDA χρονίζεται από την ανερχόμενη άκρη του SCL. Οι πληροφορίες στη γραμμή SDA αλλάζουν όταν η γραμμή SCL είναι σε μηδενική κατάσταση. Η εξαρτημένη συσκευή μπορεί να "κρατήσει" τη γραμμή SCL σε μηδενική κατάσταση, για παράδειγμα, κατά την επεξεργασία του επόμενου ληφθέντος byte, ενώ η κύρια συσκευή πρέπει να περιμένει μέχρι να ελευθερωθεί η γραμμή SCL πριν συνεχίσει να μεταδίδει πληροφορίες.

Για να συγχρονίσετε πακέτα διαύλου I 2 C, διακρίνονται δύο συνθήκες - "START" και "STOP", περιορίζοντας την αρχή και το τέλος του πακέτου πληροφοριών (Εικόνα 7.13). Για την κωδικοποίηση αυτών των συνθηκών, χρησιμοποιείται μια αλλαγή στην κατάσταση της γραμμής SDA με μία μόνο κατάσταση της γραμμής SCL, η οποία είναι απαράδεκτη κατά τη μετάδοση δεδομένων. Η συνθήκη "START" σχηματίζεται όταν εμφανίζεται μια φθίνουσα ακμή στη γραμμή SDA, όταν η γραμμή SCL βρίσκεται σε μία κατάσταση και αντίστροφα, η συνθήκη "STOP" σχηματίζεται όταν εμφανίζεται μια ανερχόμενη άκρη στη γραμμή SDA όταν η γραμμή SCL η γραμμή βρίσκεται σε μια ενιαία κατάσταση.

Η μετάδοση δεδομένων ξεκινά από την πρώτη ανερχόμενη άκρη στη γραμμή SCL, η οποία χρονίζει το πιο σημαντικό bit του πρώτου byte πληροφοριών. Κάθε byte πληροφοριών (8 bit) περιέχει 9 περιόδους ρολογιού της γραμμής SCL. Στον ένατο κύκλο, η συσκευή λήψης εκδίδει μια επιβεβαίωση (ACK) - μια πτώση που υποδεικνύει τη λήψη δεδομένων. Θα πρέπει να σημειωθεί ότι οποιοσδήποτε συνδρομητής λεωφορείου, τόσο κύριος όσο και slave, μπορεί σε διαφορετικές χρονικές στιγμές να είναι και πομπός και δέκτης και, σύμφωνα με τον τρόπο λειτουργίας, απαιτείται είτε να λαμβάνει είτε να εκδίδει ένα σήμα ACK, η απουσία του οποίου ερμηνεύεται ως σφάλμα.

Για να ξεκινήσει μια λειτουργία ανταλλαγής δεδομένων, η κύρια συσκευή εκδίδει μια συνθήκη "START" στο δίαυλο. Η συνθήκη "START" ακολουθείται από ένα byte με τη διεύθυνση της εξαρτημένης συσκευής (Εικόνα 7.14), που αποτελείται από μια διεύθυνση συσκευής επτά bit (bit 1...7) και μια σημαία λειτουργίας ανάγνωσης-εγγραφής ενός bit - " R/W” (bit 0). Το R/W bit καθορίζει την κατεύθυνση της ανταλλαγής, με το 0 να σημαίνει μεταφορά δεδομένων από το master σε slave (Εικόνα 7.14a) και το 1 να σημαίνει ανάγνωση από το slave (Εικόνα 7.14b). Όλα τα bit στον δίαυλο I 2 C μεταδίδονται με σειρά από το υψηλό στο χαμηλό, δηλαδή το 7ο bit μεταδίδεται πρώτο, το 0ο τελευταίο. Η διεύθυνση μπορεί να ακολουθείται από ένα ή περισσότερα byte πληροφοριών (προς την κατεύθυνση που καθορίζεται από τη σημαία R/W), τα bit των οποίων χρονίζονται από την κύρια μονάδα στο δίαυλο SCL.

Όταν εκτελεί μια λειτουργία ανάγνωσης, ο κεντρικός υπολογιστής πρέπει να ACK το αναγνωσμένο byte εάν θέλει να διαβάσει το επόμενο byte και να μην εκδώσει ACK εάν πρόκειται να ολοκληρώσει την ανάγνωση του πακέτου (βλ. Εικόνα 7.14β).

Επιτρέπεται η επανάληψη της διεύθυνσης της εξαρτημένης συσκευής πολλές φορές σε έναν κύκλο μετάδοσης, δηλαδή η μετάδοση μιας επαναλαμβανόμενης συνθήκης "START" χωρίς προηγούμενη συνθήκη "STOP" (Εικόνα 7.14γ).

Είναι απαραίτητο να σημειώσετε ορισμένα χαρακτηριστικά των τσιπ μνήμης που λειτουργούν μέσω της διεπαφής I 2 C και τις διαδικασίες ανταλλαγής δεδομένων με αυτά. Πρώτον, η μη πτητική μνήμη δεδομένων αυτών των μικροκυκλωμάτων χωρίζεται σε σελίδες μνήμης, οπότε όταν γράφεται ένα byte, ολόκληρη η σελίδα αντιγράφεται πρώτα στην εσωτερική μνήμη RAM του μικροκυκλώματος, όπου αλλάζει το επιθυμητό κελί. Μετά από αυτό, η παλιά σελίδα διαγράφεται και στη θέση της γράφεται μια νέα. Ένα άλλο χαρακτηριστικό είναι ότι τα πιο σημαντικά τέσσερα bit της υποτελούς διεύθυνσης πρέπει πάντα να είναι ίσα με 1010. Αυτή η απαίτηση ρυθμίζεται από την ίδια τη Philips.

Ο δίαυλος 1-Wire χρησιμοποιεί μόνο έναν αγωγό για επικοινωνία και τροφοδοσία. Η λειτουργία επικοινωνίας είναι ασύγχρονη και ημι-αμφίδρομη, η οποία ακολουθεί αυστηρά το μοτίβο master-slave. Μία ή περισσότερες βοηθητικές συσκευές μπορούν να συνδεθούν ταυτόχρονα στον ίδιο δίαυλο. Μόνο μία κύρια συσκευή μπορεί να συνδεθεί σε έναν δίαυλο.

Η κατάσταση αδράνειας του διαύλου αντιστοιχεί σε ένα υψηλό επίπεδο, το οποίο δημιουργείται από μια αντίσταση έλξης. Η τιμή της αντίστασης έλξης δίνεται στην τεκμηρίωση για το εξαρτώμενο IC. Όλα τα τσιπ που συνδέονται με το δίαυλο πρέπει να μπορούν να παράγουν χαμηλό επίπεδο. Εάν η έξοδος του μικροελεγκτή δεν υποστηρίζει τρεις καταστάσεις, τότε είναι απαραίτητο να παρέχετε ένα πρόγραμμα οδήγησης που να έχει ανοιχτό συλλέκτη ή έξοδο ανοιχτής αποστράγγισης

Η μετάδοση σήματος μέσω του διαύλου 1-Wire χωρίζεται σε χρονοθυρίδες διάρκειας 60 µs. Μόνο ένα bit δεδομένων μεταδίδεται ανά χρονική θυρίδα. Οι συσκευές Slave επιτρέπεται να έχουν σημαντικές διαφορές από τις ονομαστικές χρονικές καθυστερήσεις. Ωστόσο, αυτό απαιτεί πιο ακριβή συγχρονισμό από τον ηγέτη για να διασφαλιστεί η σωστή επικοινωνία με τους υφισταμένους που έχουν διαφορετικές χρονικές βάσεις.

Βασικά σήματα λεωφορείου.

Το master εκκινεί κάθε επικοινωνία σε επίπεδο bit. Αυτό σημαίνει ότι η μετάδοση κάθε bit, ανεξάρτητα από την κατεύθυνση, πρέπει να εκκινείται από τον κύριο. Αυτό επιτυγχάνεται με τη ρύθμιση του διαύλου χαμηλά, που συγχρονίζει τη λογική όλων των άλλων συσκευών. Υπάρχουν 5 κύριες εντολές για επικοινωνία μέσω του διαύλου 1-Wire: «Εγγραφή αρχείου καταγραφής. 1», «Εγγραφή αρχείου καταγραφής. 0», «Ανάγνωση», «Επαναφορά» και «Παρουσία».

Σήμα «Εγγραφή αρχείου καταγραφής. 1"

Σήμα «Εγγραφή αρχείου καταγραφής. 1" φαίνεται στο Σχ. 7.15. Ο κύριος ρυθμίζει το χαμηλό επίπεδο για 1...15 µs. Μετά από αυτό, ελευθερώνει το λεωφορείο για το υπόλοιπο του χρόνου.

Ρύζι. 7.15 – Σήμα «Εγγραφή αρχείου καταγραφής. 1"

Σήμα «Εγγραφή αρχείου καταγραφής. 0"

Σήμα «Εγγραφή αρχείου καταγραφής. 0" φαίνεται στο Σχήμα 7.16. Η κύρια μονάδα δημιουργεί χαμηλό επίπεδο για τουλάχιστον 60 µs, αλλά όχι περισσότερο από 120 µs.

Εικ. 7.16 – Σήμα «Εγγραφή αρχείου καταγραφής. 0"

Σήμα ανάγνωσης

Το σήμα «Ανάγνωση» φαίνεται στο Σχ. 7.17. Ο κύριος ρυθμίζει το χαμηλό επίπεδο για 1...15 µs. Στη συνέχεια, ο σκλάβος κρατά το λεωφορείο χαμηλά εάν επιθυμεί να μεταδώσει ένα ημερολόγιο. 0. Εάν είναι απαραίτητο να μεταφέρετε το ημερολόγιο. 1, τότε απλά απελευθερώνει τη γραμμή. Η σάρωση του διαύλου πρέπει να εκτελεστεί εντός 15 µs από τη χαµηλή στάθµη του διαύλου. Όταν το βλέπουμε από την πλευρά του πλοιάρχου, το σήμα "Ανάγνωση" είναι, στην ουσία, ένα σήμα "Εγγραφή αρχείου καταγραφής". 1". Η πραγματική εσωτερική κατάσταση του slave θα καθοριστεί από το σήμα "Record log". 1" ή "Ανάγνωση".

Εικόνα 7.17 – Σήμα «Ανάγνωση».

Σήμα επαναφοράς/παρουσίας

Τα σήματα "Επαναφορά" και "Παρουσία" φαίνονται στην Εικόνα 7.18. Λάβετε υπόψη ότι τα χρονικά διαστήματα παλμών είναι διαφορετικά. Ο κύριος τραβάει χαμηλά για 8 χρονοθυρίδες (480 µs) και στη συνέχεια απελευθερώνει το δίαυλο. Αυτή η μακρά περίοδος χαμηλής κατάστασης ονομάζεται σήμα "Επαναφορά".

Εάν υπάρχει slave στο δίαυλο, πρέπει, εντός 60 µs μετά την απελευθέρωση του διαύλου από τον κύριο, να ορίσει ένα χαμηλό επίπεδο για τουλάχιστον 60 µs. Αυτή η απάντηση ονομάζεται «Παρουσία». Εάν δεν ανιχνευτεί τέτοιο σήμα, τότε ο πλοίαρχος πρέπει να υποθέσει ότι δεν υπάρχουν συσκευές συνδεδεμένες στο δίαυλο και δεν είναι δυνατή η περαιτέρω επικοινωνία.

Το USB (Universal serial bus) αναπτύχθηκε για τη γρήγορη σύνδεση εξωτερικών συσκευών σε έναν προσωπικό υπολογιστή και στη συνέχεια την εύρεση και εγκατάσταση του απαραίτητου λογισμικού. Οι συσκευές χαμηλής κατανάλωσης τροφοδοτούνται απευθείας μέσω της διεπαφής.

Το πρότυπο USB υποδηλώνει την παρουσία μόνο μιας κύριας (Host) συσκευής στο δίκτυο. Επιπλέον, το πρότυπο υποστηρίζει έως και 127 slave συσκευές στο δίκτυο. Για τη διάκριση μεταξύ κύριας και εξαρτημένης συσκευής, έχουν αναπτυχθεί διαφορετικοί τύποι υποδοχών σύνδεσης (Εικόνα 7.19): Τύπος Α για την κύρια και Τύπος Β για την υποτελή. Είναι αποδεκτό ότι η τάση 5 V υπάρχει μόνο στον σύνδεσμο τύπου Α, που είναι ο κύριος σύνδεσμος. Οι υπόλοιπες συσκευές τροφοδοτούνται απευθείας από αυτό.

Το πρότυπο USB χρησιμοποιεί 4 θωρακισμένα καλώδια, δύο από τα οποία μεταδίδουν ισχύ (+5v & GND) (Εικόνα 7.19 και Πίνακας 7.2). Τα άλλα δύο αντιπροσωπεύουν διαφορικά σήματα δεδομένων συνεστραμμένου ζεύγους. Χρησιμοποιείται σχήμα κωδικοποίησης NRZI(Μη επιστροφή σε μηδενική αναστροφή) για μετάδοση δεδομένων με πεδίο συγχρονισμού για συγχρονισμό του κύριου και του δευτερεύοντος ρολογιού.

Το πρότυπο USB 2.0 εισήγαγε το πρότυπο On-The-Go (OTG), το οποίο εισήγαγε το πρωτόκολλο διαπραγμάτευσης κεντρικού υπολογιστή, το οποίο επιτρέπει σε δύο συσκευές USB να συμφωνήσουν σχετικά με το ποιος θα ενεργεί ως κύριος. Αυτό προορίζεται και περιορίζεται σε μεμονωμένες συνδέσεις από σημείο σε σημείο, όπως ένα κινητό τηλέφωνο σε έναν προσωπικό υπολογιστή.

Το USB υποστηρίζει σύνδεση "hot" (plug'n'play) με δυναμικά φορτωμένα και μη φορτωμένα προγράμματα οδήγησης. Ο χρήστης απλώς συνδέει τη συσκευή, συνδέοντάς τη με το λεωφορείο. Ο κεντρικός υπολογιστής εντοπίζει τη σύνδεση, μετράει τη συσκευή που μόλις εισήχθη και φορτώνει το κατάλληλο πρόγραμμα οδήγησης, υποδεικνύοντας τη στιγμή φόρτωσης με μια κλεψύδρα στην οθόνη (εάν το πρόγραμμα οδήγησης για τη συσκευή USB είναι ήδη εγκατεστημένο στο σύστημα). Ο τελικός χρήστης δεν ενδιαφέρεται για τον τερματισμό ή IRQ(διακοπές) και διευθύνσεις θυρών, ούτε σχετικά με την επανεκκίνηση του υπολογιστή (δεν απαιτείται επανεκκίνηση). Όταν ο χρήστης τελειώσει με τη συσκευή USB, απλώς την αφαιρεί (ή αποσυνδέει το καλώδιο), ο κεντρικός υπολογιστής θα εντοπίσει την απουσία της συσκευής και θα ξεφορτώσει αυτόματα το πρόγραμμα οδήγησης.

Η έκδοση SB 1.1 υποστηρίζει δύο ταχύτητες - λειτουργία πλήρους ταχύτητας με ταχύτητα 12 Mbits/s και λειτουργία χαμηλής ταχύτητας με ταχύτητα 1,5 Mbits/s. Η λειτουργία 1,5 Mbits/s είναι πιο αργή και λιγότερο ευαίσθητη στο EMI (παρεμβολές), γεγονός που μειώνει το κόστος των σφαιριδίων φερρίτη και μειώνει τις απαιτήσεις για ποιότητα εξαρτημάτων.

Το καλώδιο διαύλου πλήρους ταχύτητας είναι ένα καλώδιο συνεστραμμένου ζεύγους, που προστατεύεται από θωράκιση και μπορεί επίσης να χρησιμοποιηθεί για λειτουργία σε χαμηλή ταχύτητα. Ένα καλώδιο για λειτουργία μόνο στην ελάχιστη ταχύτητα (για παράδειγμα, για σύνδεση ποντικιού) μπορεί να είναι οποιοδήποτε και μη θωρακισμένο.

Το πρότυπο USB 2.0 εισάγει μια λειτουργία υψηλής ταχύτητας με ρυθμό μεταφοράς δεδομένων 480 Mbits/s.

Μεταφορά δεδομένων.

Όλες οι μεταφορές δεδομένων μέσω της διεπαφής ξεκινούν από τον κεντρικό υπολογιστή. Τα δεδομένα μεταδίδονται με τη μορφή πακέτων. Η διεπαφή USB χρησιμοποιεί διάφορους τύπους πακέτων:

Α) υπογράψτε το πακέτο (πακέτο κουπόνι) περιγράφει τον τύπο και την κατεύθυνση της μεταφοράς δεδομένων, τη διεύθυνση της συσκευής και τον σειριακό αριθμό του τελικού σημείου (το CT είναι το διευθυνσιοδοτούμενο τμήμα της συσκευής USB). Τα πακέτα δυνατοτήτων διατίθενται σε διάφορους τύπους: ΣΕ, ΕΞΩ, ΣΟΦ, ΡΥΘΜΙΣΗ;

Β) πακέτο δεδομένων (πακέτο δεδομένων) περιέχει τα μεταδιδόμενα δεδομένα.

Β) πακέτο έγκρισης (πακέτο χειραψίας) προορίζεται να αναφέρει τα αποτελέσματα της μεταφοράς δεδομένων· Υπάρχουν διάφοροι τύποι πακέτων συντονισμού: ACK, Ν.Α.Κ., ΑΝΑΒΑΛΛΩ.

Η μεταφορά δεδομένων μέσω USB πραγματοποιείται ως εξής:

Το πρώτο πακέτο, το λεγόμενο token, δημιουργείται από την κύρια συσκευή για να περιγράψει τον τύπο των δεδομένων που μεταφέρονται, τη λειτουργία μεταφοράς (ανάγνωση ή εγγραφή), τη διεύθυνση της συσκευής και το τελικό σημείο. Το επόμενο που συνήθως μεταδίδεται είναι ένα πακέτο δεδομένων που φέρει χρήσιμες πληροφορίες, ακολουθούμενο από ένα πακέτο χειραψίας που υποδεικνύει ότι τα δεδομένα ή το διακριτικό ελήφθη με επιτυχία ή ότι το τελικό σημείο έχει σταματήσει ή δεν είναι διαθέσιμο για αποδοχή δεδομένων.

Τα τελικά σημεία στο πρότυπο USB είναι οι πηγές και οι καταβολές δεδομένων. Όλες οι συσκευές πρέπει να υποστηρίζουν το τελικό σημείο 0. Αυτό είναι το τελικό σημείο που δέχεται όλα τα αιτήματα ελέγχου και κατάστασης κατά τη διάρκεια της απαρίθμησης (ένα αίτημα χειρισμού για τον προσδιορισμό του τύπου της συνδεδεμένης συσκευής) και για όσο διάστημα η συσκευή παραμένει σε λειτουργία στο δίαυλο.

Τα τελικά σημεία αριθμημένα από το 1 χρησιμοποιούνται για τη μετάδοση πληροφοριών χρήστη. Ας δούμε μερικά παραδείγματα.

Το πρόγραμμα οδήγησης συσκευής μεταδίδει στο τελικό σημείο EP1 της κύριας συσκευής. Επειδή Αυτή η συσκευή είναι η κύρια και, στη συνέχεια, τα δεδομένα πηγαίνουν στο buffer OUT EP1. Σε αυτήν την περίπτωση, αποστέλλεται ένα διακριτικό OUT, το οποίο υποδεικνύει ότι τα δεδομένα είναι έτοιμα για αποστολή. Έχοντας λάβει αυτό το διακριτικό, η εξαρτημένη συσκευή μπορεί να διαβάσει δεδομένα από το buffer OUT.

Εάν η εξαρτημένη συσκευή χρειάζεται να μεταφέρει δεδομένα στην κύρια, τα τοποθετεί στην προσωρινή μνήμη IN. Αυτό το buffer θα διατηρήσει δεδομένα έως ότου η κύρια μονάδα στείλει ένα διακριτικό IN ζητώντας δεδομένα από το τελικό σημείο. Όλα τα buffer τελικού σημείου ονομάζονται σε σχέση με την κύρια, δηλ. Το buffer εξόδου της εξαρτημένης συσκευής ονομάζεται IN επειδή είναι το buffer εισόδου για την κύρια συσκευή.

Η μεταφορά δεδομένων από το ένα τελικό σημείο στο άλλο γίνεται μέσω ροών. Ροή – Μια λογική σύνδεση μεταξύ ενός κεντρικού υπολογιστή και ενός τερματικού(ων).

Οι ροές έχουν επίσης ένα σύνολο παραμέτρων όπως ο τύπος μετάδοσης (Control, Bulk, Iso ή Interrupt), η κατεύθυνση ροής δεδομένων και τα μέγιστα μεγέθη πακέτων/buffer.

Για παράδειγμα, η προεπιλεγμένη ροή είναι μια αμφίδρομη ροή που αποτελείται από τελικό σημείο IN 0 και τελικό σημείο OUT 0 με έλεγχο τύπου μεταφοράς.

Το USB ορίζει δύο τύπους σωλήνων

Α) Σωλήνες ρεμάτωνδεν έχετε προκαθορισμένη μορφή USB, ώστε να μπορείτε να στείλετε οποιοδήποτε τύπο δεδομένων μέσω του σωλήνα ροής και να ανακτήσετε τα δεδομένα στο άλλο άκρο. Οι ροές δεδομένων είναι διαδοχικές και έχουν μια προκαθορισμένη κατεύθυνση - IN ή OUT. Οι σωλήνες ροής υποστηρίζουν τύπους μεταφοράς όγκου, ισοχρονισμού και διακοπής. Οι σωλήνες ροής μπορούν να ελεγχθούν είτε από τον κεντρικό υπολογιστή είτε από τη συσκευή.

Β) Σωλήνες μηνυμάτωνέχουν προκαθορισμένη μορφή USB. Ελέγχονται από τον κεντρικό υπολογιστή, ξεκινώντας από ένα αίτημα που αποστέλλεται από τον κεντρικό υπολογιστή. Τα δεδομένα αποστέλλονται προς την επιθυμητή κατεύθυνση που καθορίζεται στο αίτημα. Έτσι, οι σωλήνες μηνυμάτων επιτρέπουν τη μεταφορά δεδομένων και προς τις δύο κατευθύνσεις, αλλά υποστηρίζουν μόνο μεταφορές ελέγχου.

Το πρότυπο USB περιγράφει τέσσερις τύπους μεταφοράς δεδομένων:

Α) Έλεγχος προώθησης (μεταφορά ελέγχου) χρησιμοποιείται για τη διαμόρφωση της συσκευής καθώς και για άλλους σκοπούς που αφορούν τη συσκευή.

Β) Streaming (μαζική μεταφορά) χρησιμοποιείται για τη μετάδοση σχετικά μεγάλου όγκου πληροφοριών.

Β) Διακοπή προώθησης (διακοπή μεταφοράς) χρησιμοποιείται για τη μετάδοση μιας σχετικά μικρής ποσότητας πληροφοριών, για την οποία είναι σημαντική η έγκαιρη μετάδοσή τους. Έχει περιορισμένη διάρκεια και μεγαλύτερη προτεραιότητα σε σύγκριση με άλλους τύπους μεταφορών.

Δ) Ισόχρονη προώθηση (ισόχρονη μεταφορά) ονομάζεται επίσης ροή σε πραγματικό χρόνο. Οι πληροφορίες που μεταδίδονται σε μια τέτοια μεταφορά απαιτούν κλίμακα πραγματικού χρόνου κατά τη δημιουργία, τη μετάδοση και τη λήψη τους.

Μεταφορές ροής χαρακτηρίζεται από εγγυημένη μεταφορά δεδομένων χωρίς σφάλματα μεταξύ του κεντρικού υπολογιστή και της λειτουργίας, ανιχνεύοντας σφάλματα κατά τη μετάδοση και ζητώντας εκ νέου πληροφορίες. Όταν ο κεντρικός υπολογιστής είναι έτοιμος να λάβει δεδομένα από μια συνάρτηση, στέλνει ένα πακέτο σημαίας στη συνάρτηση ΣΕ-πλαστική σακούλα. Σε απόκριση σε αυτό, η συνάρτηση στη φάση μεταφοράς δεδομένων μεταδίδει ένα πακέτο δεδομένων στον κεντρικό υπολογιστή ή, εάν αυτό

SPIστο Arduino, είναι ένα από τα κύρια πρωτόκολλα για την ανταλλαγή δεδομένων μεταξύ της πλακέτας Arduino και των συνδεδεμένων συσκευών. Μαζί με το I2C και το UART, αυτό το πρωτόκολλο χρησιμοποιείται συχνά για πολλούς τύπους περιφερειακών συσκευών, επομένως η γνώση των αρχών λειτουργίας SPI είναι απαραίτητη για κάθε μηχανικό Arduino. Σε αυτό το άρθρο θα δούμε εν συντομία τις βασικές αρχές, το σχήμα αλληλεπίδρασης και τη μέθοδο σύνδεσης αισθητήρων SPI και οθονών στο Arduino.

Το SPI είναι ένα ευρέως χρησιμοποιούμενο πρωτόκολλο μεταφοράς δεδομένων μεταξύ ενός μικροελεγκτή (Master) και περιφερειακών συσκευών (Slave). Στα έργα μας, μια πλακέτα Arduino χρησιμοποιείται συχνότερα ως Master. Η διεπαφή SPI επινοήθηκε και χρησιμοποιήθηκε από τη Motorola, αλλά με την πάροδο του χρόνου έγινε βιομηχανικό πρότυπο. Το κύριο πλεονέκτημα της εργασίας με αυτήν τη διεπαφή είναι η υψηλή της ταχύτητα και η δυνατότητα σύνδεσης πολλών συσκευών σε έναν δίαυλο δεδομένων.

SPI pins και pins

Η επικοινωνία μέσω της διεπαφής SPI arduino πραγματοποιείται μεταξύ πολλών συσκευών που βρίσκονται κοντά η μία στην άλλη. Οι πλακέτες Arduino είναι εξοπλισμένες με ξεχωριστές ακίδες για SPI. Η σύζευξη πραγματοποιείται χρησιμοποιώντας τέσσερις επαφές:

  • MOSI – οι πληροφορίες μεταδίδονται μέσω αυτής της γραμμής στο Slave από τον Master.
  • MISO – χρησιμοποιείται για τη μεταφορά πληροφοριών στον Master από τον Slave.
  • SCLK – δημιουργία παλμών ρολογιού για σύγχρονη μετάδοση δεδομένων.
  • SS – επιλογή υποτελούς συσκευής.

Αλληλεπίδραση συσκευών SPI

Η αλληλεπίδραση της συσκευής ξεκινά όταν η έξοδος SS μειώνεται.

Πριν ξεκινήσετε την εργασία, πρέπει να προσδιορίσετε:

  • Από ποιο bit πρέπει να ξεκινά η μετατόπιση - υψηλό ή χαμηλό; Η σειρά προσαρμόζεται χρησιμοποιώντας τη συνάρτηση PI.setBitOrder().
  • Προσδιορίστε το επίπεδο στο οποίο θα πρέπει να βρίσκεται η γραμμή SCK απουσία παλμού ρολογιού. Ρυθμιζόμενο από τη συνάρτηση SPI.setDataMode().
  • Επιλέξτε το ρυθμό μεταφοράς δεδομένων. Καθορίζεται από τη συνάρτηση SPI.setClockDivider().

Το επόμενο βήμα είναι να προσδιορίσετε σε ποιο τρόπο θα μεταφερθούν οι πληροφορίες. Η επιλογή της λειτουργίας καθορίζεται από δείκτες όπως η πολικότητα και η φάση του παλμού του ρολογιού. Εάν το επίπεδο είναι χαμηλό, καταγράφεται 0, υψηλό - 1. Υπάρχουν συνολικά 4 λειτουργίες:

  • Λειτουργία 0 – SPI_MODE0: πολικότητα (CPOL) 0, φάση (CPHA) 0.
  • Λειτουργία 1: πολικότητα 0, φάση 1.
  • Λειτουργία 2: πολικότητα 1, φάση 0.
  • Λειτουργία 3: πολικότητα 1, φάση 1.

Αρχικά, το Arduino σχεδιάστηκε για να μεταδίδει πρώτα δεδομένα με το πιο σημαντικό bit, αλλά πριν ξεκινήσετε, πρέπει να το διευκρινίσετε στην τεκμηρίωση. Μπορείτε να δείξετε τις λειτουργίες στην εικόνα.

Υπάρχουν δύο τύποι συνδέσεων δυνατών στη διασύνδεση SPI: ανεξάρτητες και διαδοχικές. Στην πρώτη περίπτωση, κατά τη σύνδεση, ο Master απευθύνεται σε κάθε Slave ξεχωριστά, στη δεύτερη περίπτωση, η σύνδεση γίνεται μία προς μία, δηλ. αλληλουχία.

Σύνδεση SPI στο Arduino

Κάθε μοντέλο Arduino έχει τις δικές του ακίδες SPI. Αυτά τα συμπεράσματα:

  • Uno: Το MOSI αντιστοιχεί στον ακροδέκτη 11 ή ICSP-4, MISO – 12 ή ICSP-1, SCK – 13 ή ICSP-3, SS (slave) – 10.
  • Mega1280 ή Mega2560: MOSI – 51 ή ICSP-4, MISO – 50 ή ICSP-1, SCK – 52 ή ICSP-3, SS (slave) – 53.
  • Leonardo: MOSI – ICSP-4, MISO – ICSP-1, SCK – ICSP-3.
  • Οφειλόμενα: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3, SS (master) – 4, 10, 52.

Ο πιο πρόσφατος ελεγκτής Arduino Due επεκτείνει τις δυνατότητες του χρήστη και σας επιτρέπει να υλοποιήσετε περισσότερες εργασίες από άλλους μικροελεγκτές. Για παράδειγμα, είναι δυνατός ο αυτόματος έλεγχος της εξαρτημένης συσκευής και η αυτόματη επιλογή διαφορετικών διαμορφώσεων (ταχύτητα ρολογιού, λειτουργία κ.λπ.).

Βιβλιοθήκη Arduino SPI

Για να εργαστείτε στο Arduino, έχει δημιουργηθεί μια ξεχωριστή βιβλιοθήκη που υλοποιεί το SPI. Πριν ξεκινήσετε τον κώδικα, πρέπει να προσθέσετε το #include για να ενεργοποιήσετε τη βιβλιοθήκη.

Κύριες λειτουργίες:

  • start() και end() – ενεργοποίηση και απενεργοποίηση της εργασίας. Κατά την προετοιμασία, οι γραμμές SCLK, MOSI και SS διαμορφώνονται στην έξοδο, στέλνοντας ένα χαμηλό επίπεδο στο SCLK, το MOSI και ένα υψηλό επίπεδο στο SS. Η συνάρτηση end() δεν αλλάζει τα επίπεδα γραμμής· χρειάζεται για να απενεργοποιήσετε το μπλοκ που σχετίζεται με τη διεπαφή στην πλακέτα Arduino.
  • setBitOrder(order) – ρύθμιση της σειράς αποστολής bit πληροφοριών (MSBFIRST – προτεραιότητα του πιο σημαντικού bit, LSBFIRST – προτεραιότητα του λιγότερο σημαντικού bit).
  • setClockDivider(divider) – ρύθμιση των διαιρέτων ρολογιού κύριας συχνότητας. Μπορείτε να ορίσετε διαιρέτες των 2, 4, 8, 16, 32, 64 και 128. Είναι γραμμένο ως εξής - SPI_CLOCK_DIVn, όπου n είναι ο επιλεγμένος διαιρέτης.
  • setDataMode(mode) – επιλέξτε έναν από τους τέσσερις τρόπους λειτουργίας.
  • transfer(value) – μεταφέρει ένα byte από την κύρια συσκευή και επιστρέφει το byte που λαμβάνεται από την εξαρτημένη συσκευή.
  • shiftIn(miso_pin, sclk_pin, bit_order) και shiftOut(mosi_pin, sclk_pin, order, value) – η αποδοχή και η αποστολή δεδομένων, μπορούν να συνδεθούν σε οποιεσδήποτε ψηφιακές ακίδες, αλλά πριν από αυτό θα πρέπει να τις διαμορφώσετε μόνοι σας.

Πλεονεκτήματα και μειονεκτήματα του SPI

Πλεονεκτήματα της διεπαφής SPI:

  • Δυνατότητα μετάδοσης μεγάλων δεδομένων, χωρίς περιορισμό στα 8 bit.
  • Εύκολο στην εφαρμογή λογισμικού.
  • Απλότητα υλοποίησης υλικού.
  • Απαιτούνται λιγότερες ακίδες από ό,τι για παράλληλες διεπαφές.
  • Μόνο η ταχύτητα των συσκευών περιορίζει τη μέγιστη συχνότητα ρολογιού.

Ελαττώματα:

  • Μεγάλος αριθμός ακίδων σε σύγκριση με το I2C.
  • Το Slave δεν μπορεί να ελέγξει τη ροή των πληροφοριών.
  • Έλλειψη τυπικού πρωτοκόλλου ανίχνευσης σφαλμάτων.
  • Ένας μεγάλος αριθμός τρόπων υλοποίησης της διεπαφής.
  • Έλλειψη επιβεβαίωσης λήψης πληροφοριών.

Ένα παράδειγμα χρήσης του Arduino SPI σε ένα έργο με αισθητήρα πίεσης

Για την υλοποίηση του έργου χρειαζόμαστε ένα Arduino, έναν αισθητήρα πίεσης, ένα breadboard και καλώδια. Ένα παράδειγμα σύνδεσης αισθητήρα φαίνεται στο σχήμα.

Χρησιμοποιώντας τον αισθητήρα SCP1000, είναι δυνατή η αναγνώριση παραμέτρων όπως η πίεση και η θερμοκρασία και η μετάδοση αυτών των τιμών μέσω SPI.

Βασικά στοιχεία ενός σκίτσου προγράμματος

Πρώτα απ 'όλα, οι καταχωρητές αισθητήρων καταχωρούνται στον κώδικα χρησιμοποιώντας τη setup(). Αρκετές τιμές επιστρέφονται από τη συσκευή - μία στα 19 bit για τη λαμβανόμενη πίεση και άλλη σε 16 bit για τη θερμοκρασία. Μετά από αυτό, διαβάζονται δύο byte θερμοκρασίας και η πίεση διαβάζεται σε δύο στάδια. Πρώτα, το πρόγραμμα παίρνει τα τρία πιο σημαντικά bit, μετά τα επόμενα 16 bit, μετά τα οποία, χρησιμοποιώντας μια μετατόπιση bit, αυτές οι δύο τιμές συνδυάζονται σε ένα. Η πραγματική πίεση είναι η τιμή των 19 ψηφίων διαιρούμενη με το 4.

const int ΠΙΕΣΗ = 0x1F; // πρώτο στάδιο προσδιορισμού πίεσης (ανιχνεύονται τρία πιο σημαντικά bit)

const int PRESSURE_LSB = 0x20; // δεύτερο στάδιο, το οποίο ορίζει 16 bit για την πίεση

const int ΘΕΡΜΟΚΡΑΣΙΑ = 0x21; //16 bit για θερμοκρασία

Για να διαβάσετε τα δεδομένα θερμοκρασίας και να τα μετατρέψετε σε Κελσίου, χρησιμοποιείται το ακόλουθο στοιχείο κώδικα:

int tempData = readRegister(0x21, 2);

float realTemp = (float)tempData / 20.0; // για να προσδιορίσετε την πραγματική τιμή θερμοκρασίας σε Κελσίου, πρέπει να διαιρέσετε τον αριθμό που προκύπτει με το 20

Serial.print(“Θερμ

Serial.print(realTemp);

Ανάγνωση κομματιών πίεσης και συνδυασμός τους:

byte presion_data_high = readRegister(0x1F, 1);

πίεση_δεδομένα_υψηλή &= 0b00000111;

ανυπόγραφο int press_data_low = readRegister(0x20, 2);

μεγάλη πίεση = ((pressure_data_high<< 16) | pressure_data_low) / 4; //определение давления в Паскалях.

Σύντομα συμπεράσματα για το SPI

Οι ασπίδες και οι αισθητήρες SPI βρίσκονται συχνά σε έργα Arduino, επομένως πρέπει να γνωρίζετε πώς λειτουργεί αυτό το πρωτόκολλο. Κατ 'αρχήν, δεν υπάρχει τίποτα περίπλοκο σχετικά με τη σύνδεση συσκευών SPI. Το κύριο πράγμα είναι να συνδέσετε σωστά τα καλώδια και να χρησιμοποιήσετε τις τυπικές μεθόδους βιβλιοθήκης με τη σωστή σειρά. Για ορισμένες συσκευές, για παράδειγμα, κάρτες SD ή οθόνες OLED, δεν υπάρχουν, καταρχήν, εναλλακτικές λύσεις.

Καλή μέρα! Το σημερινό άρθρο είναι μια μικρή θεωρητική παρέκβαση που θα μας βοηθήσει να κατακτήσουμε το μάθημα προγραμματισμού Arduino. Θα μιλήσουμε για τη διεπαφή SPI. Τι είναι και με τι τρώγεται, θα προσπαθήσουμε να το καταλάβουμε σε αυτό το άρθρο.

Αρχικά, ο ορισμός. SPI(Serial Peripheral Interface - σειριακή περιφερειακή διεπαφή) είναι ένα πρότυπο σειριακής σύγχρονης μετάδοσης δεδομένων, το οποίο έχει σχεδιαστεί για να επικοινωνεί τον ελεγκτή με διάφορα περιφερειακά. Αυτή η διεπαφή είναι απλή και βολική. Μια ειδική βιβλιοθήκη για εργασία με το SPI γράφτηκε για το Arduino.

Η επικοινωνία βασίζεται στην αρχή «κύριος-σκλάβος». Ο ελεγκτής είναι συνήθως η κύρια συσκευή. Όλες οι άλλες συσκευές που είναι συνδεδεμένες στο σύστημα είναι σκλάβες. Τα δεδομένα από την κύρια συσκευή μεταδίδονται μέσω του διαύλου δεδομένων σε μία από τις επιλεγμένες υποτελείς συσκευές ή αντίστροφα από την εξαρτημένη συσκευή στην κύρια συσκευή συγχρονισμένα, χρησιμοποιώντας το σήμα του κύριου ρολογιού.

Pinout διαύλου δεδομένων SPIαποτελείται από 4 γραμμές: MOSI, MISO, CS και SCLK:

  • MOSI(Master Out Slave In - Master-output, Slave-input) ή απλά ΣΙ.– η μεταφορά δεδομένων πραγματοποιείται από την κύρια συσκευή στην εξαρτημένη συσκευή.
  • MISO(Master In Slave Out - Master-input, Slave-output) ή απλά ΕΤΣΙ– η μεταφορά δεδομένων πραγματοποιείται από τη βοηθητική συσκευή στην κύρια συσκευή.
  • C.S.(Chip Select - Επιλογή τσιπ) ή SS(Slave Select — Επιλογή σκλάβου) – επιλογή μιας εξαρτημένης συσκευής.
  • SCLK(Σειριακό ρολόι) ή απλά SCK– μετάδοση σήματος ρολογιού από τον κύριο στο slave.

Προκειμένου να μεταφερθούν δεδομένα από ένα master σε ένα slave, είναι απαραίτητο για τον master να ρυθμίσει το επίπεδο σήματος χαμηλό στη γραμμή CS του slave με το οποίο πρόκειται να δημιουργήσει επικοινωνία. Στη συνέχεια, τα bit μεταφέρονται στη γραμμή MOSI. Για να σταματήσει τη μετάδοση δεδομένων, ο ηγέτης "απελευθερώνει" τη γραμμή CS, όπως ήταν, ορίζοντας ένα υψηλό επίπεδο σήματος σε αυτήν.

Για να συνδέσετε πολλές βοηθητικές συσκευές στο δίαυλο δεδομένων SPI, κάθε μία από αυτές πρέπει να έχει τη δική της ξεχωριστή γραμμή CS. Μόλις γίνει αυτό, η κύρια συσκευή μπορεί εναλλάξ να «τραβάει» τις γραμμές, εναλλάσσοντας μεταξύ των υποτελών συσκευών. Πολλαπλές slaves μπορούν να συνδεθούν με διαφορετικούς τρόπους: παράλληλα ή σε σειρά.

Παράλληλη σύνδεση slave συσκευών μέσω διαύλου δεδομένων SPI

Η ιδιαιτερότητα της παράλληλης σύνδεσης πολλών slave συσκευών είναι ότι οι κοινές γραμμές SCLK, MOSI και MISO χρησιμοποιούνται για τη δημιουργία επικοινωνίας. Σε αυτήν την περίπτωση, κάθε εξαρτημένη συσκευή έχει τη δική της γραμμή SS(CS). Η κύρια συσκευή καθορίζει με ποια «τρέχουσα υποτελή» θα πραγματοποιήσει ανταλλαγή δεδομένων δημιουργώντας ένα χαμηλό επίπεδο σήματος στην αντίστοιχη γραμμή SSn (όπου n – 1,2...).

Για να συνδέσετε n-αριθμούς slave συσκευών στον ελεγκτή μέσω της διεπαφής SPI, πρέπει να τους εκχωρήσετε για αυτό το σκοπό n+3ακίδες μικροελεγκτή.

Σειριακή σύνδεση slave συσκευών με τον δίαυλο SPI

Όσον αφορά τη σειριακή σύνδεση των slave συσκευών, χρησιμοποιούν κοινές γραμμές SCLK και SS και η έξοδος της μιας συνδέεται με την είσοδο της άλλης. Η γραμμή MOSI του master συνδέεται με τον πρώτο slave και η γραμμή MISO συνδέεται με τον τελευταίο. Εάν κοιτάξετε αυτήν τη σύνδεση από τη σκοπιά της κύριας συσκευής, τότε μια εξαρτημένη συσκευή είναι συνδεδεμένη μέσω του διαύλου δεδομένων SPI.

Θα πρέπει να σημειωθεί το πλεονέκτημα αυτού του τύπου σύνδεσης: μπορείτε να συνδέσετε τον nο αριθμό συσκευών χρησιμοποιώντας μόνο 4 ακίδες του μικροελεγκτή για αυτό το σκοπό.

Αυτά προς το παρόν, συνεχίζουμε...

Σήμερα ξεκινάμε τη γνωριμία μας με το ελαστικό SPI (σειριακή περιφερειακή διεπαφή).

Αυτό το λεωφορείο χρησιμοποιείται ευρέως στα ηλεκτρονικά. Είναι πολύ βολικό, όντας σύγχρονο και πλήρως αμφίδρομο, επομένως, χρησιμοποιείται σε πολλά κυκλώματα για επικοινωνία μεταξύ διαφόρων ψηφιακών συσκευών - αισθητήρων, ελεγκτών, προγραμμάτων οδήγησης και άλλων συσκευών.

Ένας άλλος σημαντικός παράγοντας στην ανάγκη γνωριμίας μας είναι ότι αυτός ο δίαυλος είναι οργανωμένος σε hardware σε ελεγκτές AVR.

Επιπλέον, είτε το θέλουμε είτε όχι, επικοινωνούμε με τη διασύνδεση SPI εδώ και πολύ καιρό, μόλις ξεκινήσαμε να αναβοσβήνουμε το χειριστήριό μας για πρώτη φορά, αφού αναβοσβήνει μέσω αυτής της διεπαφής.

Επομένως, θα ήθελα να γνωρίσω καλύτερα αυτό το ελαστικό.

Ας ανοίξουμε την τεχνική τεκμηρίωση για τον ελεγκτή Atmega8, ανοίξτε τη σελίδα όπου εμφανίζεται το pinout αυτού του ελεγκτή και δείτε ότι οι ακίδες 16 έως 19 βρίσκονται εκεί που βρίσκονται οι ακίδες διαύλου SPI

Τώρα λίγα περισσότερα για αυτά τα ευρήματα

SS (επιλογή τσιπ)— αυτό είναι το σκέλος επιλογής συσκευής. Εάν η εξαρτημένη συσκευή σε αυτόν τον ακροδέκτη έχει ρυθμιστεί σε χαμηλό επίπεδο, τότε αυτή η συσκευή θα ανταποκρίνεται και θα ανταλλάσσει πληροφορίες μέσω του διαύλου SPI· εάν είναι υψηλή, δεν θα ανταποκρίνεται.

MOSI (κύριος υποτελής είσοδος εξόδου)- Αυτή είναι η ακίδα εξόδου της κύριας συσκευής και η είσοδος της εξαρτημένης συσκευής.

MISO (κύρια έξοδος υποτελούς εισόδου)- αντίθετα, η έξοδος του δούλου, η είσοδος του κυρίου.

SCK— σκέλος συγχρονισμού. Όλες οι συσκευές που συμμετέχουν στην ανταλλαγή πληροφοριών σε αυτόν τον δίαυλο τροφοδοτούνται με παλμούς ρολογιού σε μια συγκεκριμένη συχνότητα.

Εδώ είναι ένα διάγραμμα της υλοποίησης του διαύλου SPI στον ελεγκτή Atmega8

Όπως κάθε λεωφορείο, υπάρχει ένας αριθμός καταχωρητών που αποθηκεύουν ορισμένες πληροφορίες.

Μας ενδιαφέρει το SHIFT REGISTER, ανταλλάσσονται πληροφορίες μέσω αυτού. Μόλις υπάρχει ένα ορισμένο άκρο στην ακίδα συγχρονισμού, είτε φθίνουσα είτε αύξουσα, ανάλογα με τις ρυθμίσεις, αυτοί οι καταχωρητές των slave και master συσκευών θα ανταλλάξουν πληροφορίες, και όχι όλες τις πληροφορίες, αλλά μόνο ένα bit. Αυτοί οι καταχωρητές θα μετακινηθούν προς τα αριστερά και τα πιο σημαντικά bit από κάθε καταχωρητή θα πάνε στα λιγότερο σημαντικά bit του ίδιου καταχωρητή της σχετικής συσκευής. Δηλαδή, ο slave θα μεταδώσει το πιο σημαντικό bit του μέσω του pin MOSI στον leader, ο οποίος θα το γράψει στο κενό bit χαμηλής τάξης λόγω της αριστερής μετατόπισης και ο slave θα μεταφέρει το μετατοπισμένο bit υψηλής τάξης μέσω του MISO καρφιτσώστε στο bit χαμηλής τάξης του ηγέτη. Έτσι πάει η ανταλλαγή, δηλαδή σε 8 πλήρεις κύκλους ρολογιού θα ανταλλάξουν εντελώς byte

Μόλις μεταδοθούν και τα 8 bit του ενός byte πληροφοριών, ένας συγκεκριμένος καταχωρητής θα μας σηματοδοτήσει ότι αυτή η διαδικασία έχει ολοκληρωθεί. Ή μάλλον, ένα συγκεκριμένο κομμάτι ενός συγκεκριμένου μητρώου.

Επίσης στο μπλοκ διάγραμμα βλέπουμε έναν διαιρέτη, η είσοδος του οποίου δέχεται παλμούς ρολογιού και στη συνέχεια, διαιρούμενοι με μια συγκεκριμένη τιμή, στέλνονται μέσω αλυσίδας στον ακροδέκτη SCK και από εκεί τροφοδοτούνται στη εξαρτημένη συσκευή στον πείρο του το ίδιο όνομα. Αυτό εξασφαλίζει συγχρονισμένη λειτουργία των συσκευών. Η συχνότητα ρολογιού επιλέγεται από τη χαμηλότερη που υποστηρίζεται από όλες τις συσκευές που συμμετέχουν στην ανταλλαγή.

Λέω πληθυντικό γιατί μπορεί να υπάρχουν περισσότερες από δύο συσκευές σε ένα δεδομένο κύκλωμα. Πώς διασφαλίζεται αυτό, υπό την προϋπόθεση ότι οι συσκευές δεν έχουν καμία διεύθυνση, θα σας πω τώρα.

Υπάρχουν διάφοροι τρόποι ανταλλαγής πληροφοριών μεταξύ πολλών συσκευών, δηλαδή όταν υπάρχουν πολλοί slaves ανά μία κύρια συσκευή. Θα δούμε τα δύο πιο συνηθισμένα από αυτά.

Η πρώτη μέθοδος είναι ακτινική (κάντε κλικ στην εικόνα για να μεγεθύνετε την εικόνα)

Εδώ ο κύριος κατευθύνει τα δεδομένα σε μια συγκεκριμένη συσκευή, ενεργοποιώντας το λογικό 0 στον ακροδέκτη SS. Με αυτήν τη μέθοδο, είναι δυνατό να επιλέξετε μόνο μία συσκευή· θα χρειαστείτε επίσης αρκετές ελεύθερες ακίδες των θυρών του ελεγκτή.

Υπάρχει μια άλλη ενδιαφέρουσα μέθοδος - δακτύλιος ή καταρράκτης (κάντε κλικ στην εικόνα για να μεγεθύνετε την εικόνα)

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

Όλα αυτά θα τα μελετήσουμε λεπτομερέστερα στα επόμενα μαθήματα, όταν χρησιμοποιήσουμε συγκεκριμένες συσκευές στα έργα μας.

Λοιπόν, φαίνεται με το κύκλωμα μετάδοσης δεδομένων μέσω του διαύλου SPIτο καταλάβαμε.

Τώρα ας δούμε πώς να ελέγξουμε αυτή τη διαδικασία στο επίπεδο των καταχωρητών υλικού του ελεγκτή AVR.

Βλέπουμε αυτούς τους καταχωρητές στο μπλοκ διάγραμμα παραπάνω στη σελίδα.

Το Atmega8 διαθέτει τους ακόλουθους καταχωρητές για την εξυπηρέτηση του διαύλου SPI.

SPDR (SPI Data Register)- καταχωρητής δεδομένων, στο μπλοκ διάγραμμα είναι DATA BUFFER. Θα εισαγάγουμε ένα byte σε αυτόν τον καταχωρητή για την επακόλουθη μετάδοσή του στη εξαρτημένη συσκευή και από αυτό θα διαβάσουμε το byte των πληροφοριών που προήλθαν από τη εξαρτημένη συσκευή. Επίσης, δεν είναι απαραίτητο ο ελεγκτής μας να είναι η κύρια συσκευή. Στη συνέχεια, θα συναρμολογήσουμε ένα κύκλωμα δύο ελεγκτών, εκ των οποίων ο ένας θα είναι σκλάβος. Έτσι, σε αυτόν τον καταχωρητή θα βρίσκεται το byte για αποστολή και λήψη.

SPCR (SPI Control Register)- μητρώο ελέγχου

Αυτός ο καταχωρητής περιλαμβάνει τα ακόλουθα bit:

SPIE (Ενεργοποίηση διακοπής SPI)- ένα κομμάτι που επιτρέπει διακοπές.

SPE (Ενεργοποίηση SPI)— ένα κομμάτι που ενεργοποιεί το δίαυλο SPI.

DORD (Σειρά δεδομένων)— ένα bit που ορίζει τη σειρά με την οποία αποστέλλονται τα bit. Εάν οριστεί σε 1, τότε αποστέλλεται πρώτα το λιγότερο σημαντικό bit, εάν οριστεί στο 0, αποστέλλεται το πιο σημαντικό bit.

MSTR (Επιλογή Master/Slave)— ένα bit που προσδιορίζει μια συσκευή ως κύριο ή σκλάβο. Όταν αυτό το bit οριστεί σε 1, η συσκευή θα είναι η κύρια.

CPOL (Πολικότητα ρολογιού)— πολικότητα συγχρονισμού, καθορίζει σε ποια άκρη του παλμού συγχρονισμού θα ξεκινήσει η κατάσταση αναμονής

Αν αυτό το bit είναι 1, τότε θα έχουμε μια κατάσταση αναμονής με αύξουσα ακμή και αν είναι 0, τότε με φθίνουσα ακμή.

CPHA (Φάση ρολογιού)— λίγο υπεύθυνο για τη φάση του ρολογιού, δηλαδή σε ποια άκρη θα μεταδοθεί το bit.

Ας δούμε τα διαγράμματα μεταφοράς δεδομένων ανάλογα με την εγκατάσταση των CPOL και CPHA

Αυτή είναι μια τόσο ενδιαφέρουσα εξάρτηση. Μερικές φορές βλέπουμε στα τεχνικά χαρακτηριστικά μιας συσκευής ότι, για παράδειγμα, μπορεί να λειτουργήσει σε λειτουργία SPI 0:0 και SPI 1:1, και αυτό ακριβώς αφορά τη ρύθμιση αυτών των bits.

SPR1, SPR0 (Επιλογή ρυθμού ρολογιού SPI)- αυτά είναι τα bit που είναι υπεύθυνα για την τιμή του διαιρέτη συχνότητας συγχρονισμού· λειτουργούν μαζί με το bit SPI2Xβρίσκεται στο μητρώο κατάστασης. Είναι επίσης ένα στοιχείο ελέγχου, καθώς οκτώ bit στον καταχωρητή ελέγχου δεν ήταν αρκετά για όλες τις ρυθμίσεις και υπάρχουν πολλά δωρεάν στον καταχωρητή κατάστασης.

SPSR (SPI Status Register)- μητρώο κατάστασης

SPI2X (Διπλό SPI Speed ​​Bit)- ένα bit που διπλασιάζει την ταχύτητα, λειτουργώντας σε συνδυασμό με τα bit SPR1 και SPR0 του καταχωρητή ελέγχου.

Ας δούμε την εξάρτηση της συχνότητας από αυτά τα τρία bit

SPIF (Σημαία διακοπής SPI)— Σημαία διακοπής. Περιμένουμε αυτό το bit να οριστεί σε ένα. όταν λαμβάνουμε ένα byte. Μόλις το byte από άλλη συσκευή εμφανιστεί εντελώς στο buffer μας, αυτή η σημαία θα οριστεί. Αυτή η σημαία λειτουργεί μόνο εάν το bit που ενεργοποιεί τις διακοπές έχει οριστεί, καθώς και οι καθολικές διακοπές είναι ενεργοποιημένες.

WCOL (Εγγραφή σημαία σύγκρουσης)— η σημαία σύγκρουσης ή σύγκρουσης θα οριστεί εάν υπάρχει διένεξη bit κατά τη μεταφορά δεδομένων, εάν κατά τη μεταφορά δεδομένων γίνει προσπάθεια εγγραφής στο μητρώο δεδομένων.

Λοιπόν, τώρα μπορούμε να πούμε ότι εξοικειωθήκαμε λίγο με τη διεπαφή SPI.

Παρακολουθήστε VIDEO TUTORIAL(κάντε κλικ στην εικόνα)

Προβολές ανάρτησης: 6.294

Με βαθμολογίες από 10 Ohm έως 1 MOhm).

  • καλώδια σύνδεσης (για παράδειγμα, αυτό είναι ένα καλό σετ).
  • προσωπικός υπολογιστής με περιβάλλον ανάπτυξης Arduino IDE.
  • 1 Περιγραφή της σειράςΔιεπαφή SPI

    SPI - Σειριακή περιφερειακή διεπαφή ή "Σειριακή περιφερειακή διεπαφή"είναι ένα πρωτόκολλο σύγχρονης μεταφοράς δεδομένων για σύζευξη κύρια συσκευήΜε περιφερειακές συσκευές (Slave). Η κύρια συσκευή είναι συχνά ένας μικροελεγκτής. Η επικοινωνία μεταξύ συσκευών πραγματοποιείται μέσω τεσσάρων καλωδίων, γι' αυτό το SPI ονομάζεται μερικές φορές "διασύνδεση τεσσάρων συρμάτων". Αυτά είναι τα ελαστικά:

    Υπάρχουν τέσσερις τρόποι μεταφοράς δεδομένων ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), που προκαλείται από το συνδυασμό της πολικότητας των παλμών ρολογιού (εργαζόμαστε σε ΥΨΗΛΟ ή ΧΑΜΗΛΟ επίπεδο), Πολικότητα ρολογιού, CPOLκαι τη φάση των παλμών ρολογιού (συγχρονισμός στην ανερχόμενη ή καθοδική άκρη του παλμού ρολογιού), Φάση ρολογιού, CPHA.

    Το σχήμα εξηγεί αυτόν τον πίνακα.

    Η διεπαφή SPI παρέχει πολλές επιλογές για τη σύνδεση εξαρτημένων συσκευών: ανεξάρτητοςΚαι αλληλουχία. Όταν συνδέεται ανεξάρτητα με το δίαυλο SPI, η κύρια συσκευή έχει πρόσβαση σε κάθε εξαρτημένη συσκευή ξεχωριστά. Με σύνδεση καταρράκτη, οι εξαρτημένες συσκευές λειτουργούν μία προς μία, σαν σε καταρράκτη.


    Τύποι σύνδεσης συσκευής για λειτουργία μέσω της διεπαφής SPI: ανεξάρτητοι και διαδοχικοί

    2 Υλοποίηση της διεπαφής SPIσε πλακέτες οικογένειας Arduino

    Στο Arduino, οι διαύλους διασύνδεσης SPI βρίσκονται σε συγκεκριμένες θύρες. Κάθε πίνακας έχει τη δική του ανάθεση καρφίτσας. Για ευκολία, τα συμπεράσματα είναι διπλά και τοποθετούνται επίσης σε ξεχωριστό Υποδοχή ICSP(Σε Circuit Serial Programming, προγραμματισμός μιας συσκευής που περιλαμβάνεται σε ένα κύκλωμα χρησιμοποιώντας ένα σειριακό πρωτόκολλο). Λάβετε υπόψη ότι η υποδοχή ICSP δεν διαθέτει υποτελή καρφίτσα επιλογής - SS, επειδή Υποτίθεται ότι το Arduino θα χρησιμοποιηθεί ως κύρια συσκευή στο δίκτυο. Αλλά εάν είναι απαραίτητο, μπορείτε να αντιστοιχίσετε οποιοδήποτε ψηφιακό pin του Arduino ως SS.

    Το σχήμα δείχνει την τυπική αντιστοιχία των ακίδων στους διαύλους SPI για το Arduino UNO και το Nano.


    3 Βιβλιοθήκη για εργασίαμε διεπαφή SPI

    Μια ειδική βιβλιοθήκη έχει γραφτεί για το Arduino που υλοποιεί το πρωτόκολλο SPI. Συνδέεται ως εξής: στην αρχή του προγράμματος προσθέτουμε #include SPI.h.

    Για να ξεκινήσετε να χρησιμοποιείτε το πρωτόκολλο SPI, πρέπει να ορίσετε τις ρυθμίσεις και στη συνέχεια να αρχικοποιήσετε το πρωτόκολλο χρησιμοποιώντας τη διαδικασία SPI.beginTransaction(). Μπορείτε να το κάνετε αυτό με μία οδηγία: SPI.beginTransaction(SPISsettings(14000000, MSBFIRST, SPI_MODE0))

    Αυτό σημαίνει ότι αρχικοποιούμε το πρωτόκολλο SPI σε συχνότητα 14 MHz, η μετάδοση δεδομένων πραγματοποιείται ξεκινώντας από το MSB (το πιο σημαντικό bit), στη λειτουργία SPI_MODE0.

    Μετά την προετοιμασία, επιλέξτε τη εξαρτημένη συσκευή μετακινώντας την αντίστοιχη ακίδα SS στην κατάσταση ΧΑΜΗΛΟΣ.

    Στη συνέχεια μεταφέρουμε τα δεδομένα στη slave συσκευή με την εντολή SPI.transfer().

    Μετά τη μεταφορά επιστρέφουμε το SS στην κατάσταση ΥΨΗΛΟΣ.


    Η εργασία με το πρωτόκολλο ολοκληρώνεται με την εντολή SPI.endTransaction().

    Συνιστάται να ελαχιστοποιήσετε τον χρόνο μεταφοράς μεταξύ των οδηγιών SPI.beginTransaction() και SPI.endTransaction() για να αποφύγετε προβλήματα εάν μια άλλη συσκευή προσπαθήσει να ξεκινήσει μια μεταφορά δεδομένων χρησιμοποιώντας διαφορετικές ρυθμίσεις.

    4 Σύνδεση καταχωρητή αλλαγής ταχυτήτωνστο Arduino

    Ας εξετάσουμε την πρακτική εφαρμογή της διεπαφής SPI. Θα ανάψουμε τα LED ελέγχοντας έναν καταχωρητή μετατόπισης 8 bit μέσω του διαύλου SPI. Ας συνδεθούμε στο Arduino καταχωρητής αλλαγής ταχυτήτων 74HC595. Θα συνδέσουμε ένα LED με ονομαστική τιμή 220 Ohms σε κάθε μία από τις 8 εξόδους καταχωρητή μέσω μιας περιοριστικής αντίστασης. Το διάγραμμα φαίνεται στο σχήμα.


    5 Σκίτσο για τον έλεγχο ενός καταχωρητή μετατόπισηςμέσω διασύνδεσης SPI

    Ας γράψουμε ένα σκίτσο σαν αυτό.

    #περιλαμβάνω const int pinSelect = 8; // εγγραφή καρφίτσα επιλογής void setup() ( SPI.begin(); // προετοιμασία της διεπαφής SPI pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // επιλογή υποτελών συσκευών (καταχώριση) SPI.transfer(0); // διαγραφή των περιεχομένων του καταχωρητή digitalWrite(pinSelect, HIGH); // τέλος μετάδοσης Serial.begin(9600); } void loop() (για (int i=0; i )

    Αρχικά, ας συνδέσουμε τη βιβλιοθήκη SPI και ας αρχικοποιήσουμε τη διεπαφή SPI. Ας ορίσουμε τον ακροδέκτη 8 ως τον ακροδέκτη επιλογής SS. Ας διαγράψουμε τον καταχωρητή shift στέλνοντας την τιμή "0" σε αυτόν. Αρχικοποιήστε τη σειριακή θύρα.

    Για να ανάψετε ένα συγκεκριμένο LED χρησιμοποιώντας έναν καταχωρητή μετατόπισης, πρέπει να εφαρμόσετε έναν αριθμό 8-bit στην είσοδό του. Για παράδειγμα, για να ανάψει το πρώτο LED, παρέχουμε τον δυαδικό αριθμό 00000001, για το δεύτερο - 00000010, για το τρίτο - 00000100, κ.λπ. Αυτοί οι δυαδικοί αριθμοί, όταν μετατρέπονται στο δεκαδικό σύστημα αριθμών, σχηματίζουν την ακόλουθη ακολουθία: 1, 2, 4, 8, 16, 32, 64, 128 και είναι δυνάμεις του δύο από το 0 έως το 7.

    Αντίστοιχα, στον κύκλο βρόχος()Με βάση τον αριθμό των LED, υπολογίζουμε εκ νέου από το 0 έως το 7. Λειτουργία δύναμη (βάση, πτυχίο)Αυξάνει το 2 στην ισχύ του μετρητή βρόχου. Οι μικροελεγκτές δεν λειτουργούν με μεγάλη ακρίβεια με αριθμούς τύπου "διπλού", επομένως χρησιμοποιούμε τη συνάρτηση στρογγυλοποίησης για να μετατρέψουμε το αποτέλεσμα σε ακέραιο γύρος(). Και μεταφέρουμε τον αριθμό που προκύπτει στον καταχωρητή μετατόπισης. Για λόγους σαφήνειας, η οθόνη σειριακής θύρας εμφανίζει τις τιμές που λαμβάνονται κατά τη διάρκεια αυτής της λειτουργίας: Η μονάδα "τρέχει" μέσα από τις εκκενώσεις - τα LED ανάβουν σε ένα κύμα.

    6 "Κύμα που τρέχει"από LED

    Τα LED ανάβουν ένα προς ένα και παρατηρούμε ένα τρέχον «κύμα» φώτων. Οι λυχνίες LED ελέγχονται χρησιμοποιώντας έναν καταχωρητή μετατόπισης, στον οποίο συνδεθήκαμε μέσω της διεπαφής SPI. Ως αποτέλεσμα, μόνο 3 ακίδες Arduino χρησιμοποιούνται για τον έλεγχο 8 LED.Εάν συνδέαμε τα LED απευθείας στις ψηφιακές θύρες του Arduino, θα χρειαζόταν να χρησιμοποιήσουμε μια ξεχωριστή θύρα για κάθε LED.

    Μελετήσαμε το απλούστερο παράδειγμα εργασίας του Arduino με το δίαυλο SPI. Θα εξετάσουμε λεπτομερέστερα τη λειτουργία πολλών καταχωρητών μετατόπισης με ανεξάρτητες και διαδοχικές συνδέσεις σε ξεχωριστό άρθρο.