Πίνακας περιεχομένων:

RC522 και PN532 Βασικά στοιχεία RFID: 10 βήματα
RC522 και PN532 Βασικά στοιχεία RFID: 10 βήματα

Βίντεο: RC522 και PN532 Βασικά στοιχεία RFID: 10 βήματα

Βίντεο: RC522 και PN532 Βασικά στοιχεία RFID: 10 βήματα
Βίντεο: Full !!! Step By Step, Sistem Absensi Karyawan Berbasis Kartu RFID RC522 dan Nodemcu ESP8266- Part 1 2024, Ιούλιος
Anonim
RC522 και PN532 Βασικά RFID
RC522 και PN532 Βασικά RFID

ΣΗΜΕΙΩΣΗ: Τώρα έχω Instructables που προσφέρουν κώδικα Arduino για τα RC522 και PN532.

Πριν από λίγο καιρό αγόρασα τρεις διαφορετικές μονάδες RFID για πειραματισμό. Σε ένα προηγούμενο έργο ανέφερα λεπτομερώς πώς να χρησιμοποιήσετε μια απλή μονάδα 125-kHz για να κάνετε μια βασική λειτουργία ασφαλείας. Ενότητες όπως αυτή χρησιμοποιούν ετικέτες μόνο για ανάγνωση, έτσι ώστε η διαδικασία να σαρώνει το αναγνωριστικό, να αποθηκεύεται εάν είναι επιθυμητό και να συγκρίνεται με τα αποθηκευμένα αναγνωριστικά. Οι άλλες μονάδες που αγόρασα λειτουργούν στα 13,56-MHz και χρησιμοποιούν ετικέτες που μπορούν να διαβαστούν και να γραφτούν, οπότε είναι σπατάλη να τα χρησιμοποιώ απλά για βασική ασφάλεια. Οι δύο κοινές μονάδες χρησιμοποιούν είτε το τσιπ RC522 είτε το τσιπ PN532 - και τα δύο κατασκευασμένα από NXP.

Εάν έχετε διαβάσει οποιοδήποτε άλλο έργο μου, γνωρίζετε ότι μου αρέσει να χρησιμοποιώ φθηνούς μικροελεγκτές PIC και πρόγραμμα στη γλώσσα συναρμολόγησης. Αυτό που έψαχνα ήταν μια ακολουθία βημάτων που απαιτούνται για να μιλήσω στις μονάδες και στις ετικέτες RFID. Ενώ υπάρχουν πολλά παραδείγματα προγραμμάτων στο διαδίκτυο για τις ενότητες, τα περισσότερα από αυτά είναι γραμμένα σε λογισμικό «C» για το Arduino και χρησιμοποιούν τη διεπαφή SPI. Επίσης, τα εγχειρίδια για τα τσιπ και για τις ετικέτες Mifare χρειάζονται λίγο αποκρυπτογράφηση. Αυτή η ανάρτηση αφορά κυρίως τις πληροφορίες που θα ήθελα να είχα όταν ξεκίνησα το έργο. Περιλαμβάνω επίσης προγράμματα λογισμικού συναρμολόγησης PIC για την εκτέλεση των βασικών εντολών που απαιτούνται από κάθε ενότητα. Ακόμα κι αν δεν χρησιμοποιείτε PIC ή/και γλώσσα συναρμολόγησης, ο πηγαίος κώδικας θα πρέπει τουλάχιστον να σας παρέχει μια καλή ιδέα για τις συγκεκριμένες εντολές που απαιτούνται για την εκτέλεση κάθε βήματος.

Βήμα 1: Σειριακές διεπαφές

Σειριακές διεπαφές
Σειριακές διεπαφές
Σειριακές διεπαφές
Σειριακές διεπαφές
Σειριακές διεπαφές
Σειριακές διεπαφές
Σειριακές διεπαφές
Σειριακές διεπαφές

Και οι δύο μάρκες που χρησιμοποιούνται σε αυτές τις μονάδες είναι ικανές να διασυνδέονται μέσω SPI, I2C ή UART (HSSP). Η μονάδα PN532 διαθέτει ένα διακόπτη DIP που χρησιμοποιείται για την επιλογή της επιθυμητής διεπαφής, αλλά η μονάδα MFRC522 είναι συνδεδεμένη για τη διεπαφή SPI. Προτιμώ να χρησιμοποιώ το ενσωματωμένο UART του PIC, οπότε έκανα κυνήγι στο διαδίκτυο για να δω αν υπήρχε τρόπος να μεταφερθεί η μονάδα MFRC522 στη λειτουργία UART. Αυτό που βρήκα ήταν ότι το να κόψεις ένα ίχνος στον πίνακα θα έκανε το κόλπο. Η κοπή αφαιρεί αποτελεσματικά 3,3 βολτ από τον πείρο EA του τσιπ. Τεχνικά, ο πείρος EA θα πρέπει στη συνέχεια να συνδεθεί με τη γείωση, αλλά πολλοί άνθρωποι δεν μπορούν να αποσύρουν αυτό το επίτευγμα συγκόλλησης δεδομένης της πυκνότητας του πείρου του τσιπ. Μην ανησυχείτε, ωστόσο, επειδή η καρφίτσα EA δεν έχει εσωτερική ανύψωση και δεν "επιπλέει" όπως κάνουν οι παλιές λογικές εισόδους TTL. Ανατρέξτε στο διάγραμμα τσιπ και στην εικόνα της ενότητας του πίνακα για να κόψετε το σημείο. Βεβαιωθείτε ότι έχετε κόψει μόνο το σύντομο ίχνος πηγαίνοντας απευθείας στην καρφίτσα EA.

Βήμα 2: Υλικό

Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα

Οι συνδέσεις υλικού για επικοινωνίες UART φαίνονται στο παραπάνω διάγραμμα. Οι συνδέσεις UART για το MFRC522 δεν σημειώνονται στον πίνακα, αλλά, όπως φαίνεται στο σχήμα, ο πείρος SDA λαμβάνει δεδομένα UART και ο πείρος MISO μεταδίδει δεδομένα UART. Η μονάδα PN532 έχει τα σημάδια UART στην κάτω πλευρά του πίνακα.

Και οι δύο μονάδες λειτουργούν με τάση 3,3 βολτ και το λογικό επίπεδο 5 βολτ από τον πείρο PIC TX πρέπει επίσης να είναι περιορισμένο. Η σύνδεση LCD είναι η τυπική ρύθμιση 4-bit που έχει χρησιμοποιηθεί σε πολλά προηγούμενα έργα μου. Η προεπιλεγμένη μορφή για όλα τα μηνύματα έχει οριστεί για την τυπική οθόνη LCD 1602 (16 χαρακτήρες με 2 γραμμές). Έχω επίσης μια οθόνη LCD 40 χαρακτήρων με 2 γραμμές που χρησιμοποιώ για την αποθήκευση ακατέργαστων δεδομένων κατά τον εντοπισμό σφαλμάτων, ώστε να συμπεριλάβω ένα ορισμό στο λογισμικό που μου επιτρέπει να εκμεταλλευτώ τον επιπλέον χώρο προβολής.

Βήμα 3: Αποκλεισμός δεδομένων

Οι ετικέτες Mifare Classic 1k που χρησιμοποιούνται για αυτό το έργο έχουν διαμορφωθεί ως 16 τομείς, τέσσερα μπλοκ δεδομένων ανά τομέα, 16 byte ανά μπλοκ δεδομένων. Από τα 64 μπλοκ δεδομένων, μόνο τα 47 είναι πραγματικά χρήσιμα. Το μπλοκ δεδομένων 0 περιέχει δεδομένα κατασκευαστή και τα μπλοκ 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59 και 63 ονομάζονται μπλοκ τρέιλερ. Τα μπλοκ τρέιλερ είναι τα τελευταία σε κάθε τομέα και περιέχουν δύο κλειδιά και τα δυαδικά ψηφία πρόσβασης μπλοκ. Τα κλειδιά και τα bit πρόσβασης αποκλεισμού ισχύουν μόνο για τα μπλοκ δεδομένων σε αυτόν τον τομέα, ώστε να έχετε διαφορετικά κλειδιά και κανόνες πρόσβασης για κάθε τομέα. Τα προεπιλεγμένα πλήκτρα έχουν οριστεί σε "FF FF FF FF FFh". Για αυτό το βασικό έργο χρησιμοποιώ μόνο ένα μπλοκ δεδομένων και διατηρώ τα προεπιλεγμένα κλειδιά και bits πρόσβασης. Υπάρχουν πολλά έγγραφα που σχετίζονται με αυτές τις κάρτες, οπότε απλώς κάντε μια αναζήτηση στο διαδίκτυο για το "Mifare" ή επισκεφτείτε τον ιστότοπο NXP εάν θέλετε να τα εξερευνήσετε σε μεγαλύτερο βάθος.

Βήμα 4: Γενική λειτουργία

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

· Αρχικοποίηση της ενότητας: Σε γενικές γραμμές αυτό απαιτεί πράγματα όπως η εγγραφή τιμών σε καταχωρητές στο τσιπ, η αποστολή εντολών "αφύπνισης" και η ενεργοποίηση της κεραίας. Σε μια εφαρμογή που λειτουργεί με μπαταρία, θα θέλατε να μπορείτε να ενεργοποιήσετε και να απενεργοποιήσετε την κεραία για να εξοικονομήσετε μπαταρία, αλλά για αυτήν την απλή εφαρμογή την ενεργοποιούμε μία φορά και στη συνέχεια την αφήνουμε ενεργοποιημένη.

· Εκκαθάριση της σημαίας κρυπτογράφησης (μόνο για το 522): Όταν πιστοποιηθεί μια ετικέτα, μια σημαία ρυθμίζεται για να ενημερώνει το χρήστη ότι οι επικοινωνίες με την ετικέτα θα κρυπτογραφηθούν. Αυτή η σημαία πρέπει να διαγραφεί από τον χρήστη πριν από την επόμενη σάρωση, ακόμη και αν η ετικέτα που σαρώνεται είναι η ίδια.

· Σάρωση για μια ετικέτα: Η ενότητα ρωτά βασικά "Υπάρχει κάποιος εκεί έξω;" και η ετικέτα απαντά "είμαι εδώ". Εάν η μονάδα δεν λάβει γρήγορη απάντηση, σταματά να ακούει. Αυτό σημαίνει ότι πρέπει να στείλουμε επανειλημμένα εντολές σάρωσης στη μονάδα μέχρι να βρει μια ετικέτα.

· Λήψη της ετικέτας Αριθμός αναγνώρισης χρήστη (UID): Η ετικέτα θα απαντήσει στο αίτημα σάρωσης με ορισμένες περιορισμένες πληροφορίες, όπως ο τύπος της ετικέτας που είναι. Αυτό σημαίνει ότι μπορεί να χρειαστεί να στείλουμε μια άλλη εντολή για να λάβουμε το UID της. Το UID είναι τέσσερα byte για τις ετικέτες Mifare Classic 1k. Εάν μπορεί να είναι μεγαλύτερο για άλλες ετικέτες, αλλά αυτό το έργο δεν τις αντιμετωπίζει.

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

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

· Διαβάστε ή γράψτε την ετικέτα: Οι αναγνώσεις επιστρέφουν πάντα και τα 16 byte του ζητούμενου Block δεδομένων. Οι εγγραφές απαιτούν να γραφτούν και τα 16 byte ταυτόχρονα. Εάν θέλετε να διαβάσετε ή να γράψετε ένα άλλο μπλοκ στον ίδιο τομέα δεδομένων, η ετικέτα δεν χρειάζεται να πιστοποιηθεί ξανά. Εάν θέλετε να διαβάσετε ή να γράψετε ένα μπλοκ σε διαφορετικό τομέα δεδομένων, τότε η ετικέτα πρέπει να πιστοποιηθεί ξανά χρησιμοποιώντας το κλειδί για αυτόν τον τομέα.

Βήμα 5: Ακολουθία πρόσβασης μονάδας MFRC522

Η ρουτίνα εκκίνησης περιλαμβάνει αυτά τα βασικά βήματα που βρίσκονται στις περισσότερες εφαρμογές που εξέτασα:

· Αποστολή ομοιώματος byte δεδομένων (δείτε την επόμενη παράγραφο)

· Μαλακή επαναφορά

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

· Ορίστε το ποσοστό διαμόρφωσης ASK στο 100%

· Ορίστε την τιμή σπόρου για υπολογισμούς CRC

· Ενεργοποιήστε την κεραία

· Λήψη έκδοσης υλικολογισμικού (δεν απαιτείται)

Για κάποιο ανεξήγητο λόγο η μονάδα μου ενεργοποιείται και πιστεύει ότι έχει λάβει μια εντολή εγγραφής χωρίς το byte δεδομένων. Δεν ξέρω αν αυτό είναι απλώς ένα θέμα με την ενότητα μου, αλλά δεν έχω δει καμία αναφορά σε αυτό αλλού. Πειραματίστηκα με επαναφορά υλικού και λογισμικού και καμία από τις δύο δεν διόρθωσε το πρόβλημα. Η λύση μου ήταν να προσθέσω μια εικονική κλήση ανάγνωσης για να καταχωρήσω το "0" (απροσδιόριστο) στην αρχή της ρουτίνας προετοιμασίας της ενότητας. Εάν η μονάδα βλέπει αυτό ως δεδομένα για την άγνωστη εντολή εγγραφής, δεν φαίνεται να υπάρχουν κακές συνέπειες. Εάν το βλέπει ως εντολή ανάγνωσης, τότε δεν συμβαίνει τίποτα χρήσιμο. Με ενοχλεί που δεν μπορώ να ορίσω πλήρως το ζήτημα, ειδικά δεδομένου ότι μια επαναφορά υλικού μόνο της μονάδας δεν διορθώνει το πρόβλημα.

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

Βήμα 6: Ακολουθία πρόσβασης μονάδας PN532

Η ρουτίνα εκκίνησης περιλαμβάνει αυτά τα απαιτούμενα βήματα:

· Αποστολή συμβολοσειράς αρχικοποίησης: Αυτό είναι συγκεκριμένο για τη διεπαφή UART. Το εγχειρίδιο αναφέρει ότι η διεπαφή UART θα ξυπνήσει στο πέμπτο ανερχόμενο άκρο που εντοπίστηκε στη διεπαφή. Συνιστά την αποστολή 0x55, 0x55, 0x00, 0x00, 0x00, 0x00. Ως επί το πλείστον, χρειάζεται απλώς να υπάρχει επαρκής αριθμός χαρακτήρων με ανοδικές άκρες και δεν πρέπει να μοιάζουν με προοίμιο εντολών (00 00 FF).

· Ξυπνήστε τη μονάδα: Η εγγραφή στο εγχειρίδιο χρήσης δείχνει ότι η μονάδα αρχίζει σε μια κατάσταση ύπνου που ονομάζεται "LowVbat". Για έξοδο από αυτήν την κατάσταση πρέπει να στείλουμε μια εντολή "SAMConfiguration".

Το PN532 αναμένει ότι οι εντολές θα αποστέλλονται σε μια καθορισμένη μορφή μηνύματος που περιλαμβάνει ένα προοίμιο, το μήνυμα και ένα postamble. Τα μηνύματα απάντησης ακολουθούν την ίδια μορφή. Τα μηνύματα εντολής και απάντησης περιλαμβάνουν και τα δύο TFI (Αναγνωριστικό πλαισίου) και μια έκδοση εντολής. Η εντολή χρησιμοποιεί TFI 0xD4 και η απόκριση χρησιμοποιεί 0xD5. Οι εκδόσεις εντολών διαφέρουν, αλλά η απάντηση θα αυξάνει πάντα την έκδοση της εντολής και θα την επιστρέφει στο byte μετά το TFI. Αυτή η συνέπεια επιτρέπει στα μηνύματα απάντησης να σαρώνονται εύκολα για τις σχετικές πληροφορίες.

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

Η μορφή μηνύματος για την απάντηση είναι παρόμοια με αυτήν της εντολής. Μια τυπική απόκριση θα περιλαμβάνει ένα ACK (00 00 FF 00 FF 00) ακολουθούμενο από τη συγκεκριμένη απάντηση στην εντολή. Κάθε απόκριση εντολών ξεκινά με ένα προοίμιο 00 00 FF. Η απάντηση θα πρέπει επίσης να έχει ένα byte TFI του D5 ακολουθούμενο από τον αριθμό εντολής που αυξάνεται κατά 1. Για την εντολή "SAMConfiguration" (14) που θα είναι 15. Η εντολή "SAMConfiguration" λαμβάνει αυτήν την απάντηση: 00 00 FF 00 FF 00 00 00 FF 02 FE D5 15 16 00.

Υπάρχουν άλλες εντολές για συγκεκριμένες μονάδες που μπορούν να σταλούν, αλλά δεν είναι απαραίτητες για αυτήν την εφαρμογή. Ωστόσο, συμπεριέλαβα μια ρουτίνα που μπορεί να κληθεί για να ανακτήσει τον αριθμό έκδοσης υλικολογισμικού. Μια τυπική απάντηση (μετά το ACK και το προοίμιο) θα ήταν: 06 FA D5 03 32 01 06 07 E8 00. Το "01 06 07" υποδεικνύει τον αριθμό έκδοσης υλικολογισμικού 1.6.7.

Βήμα 7: Ακολουθία πρόσβασης ετικετών

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

Βήμα 8: Λογισμικό

Το λογισμικό χειρισμού διακοπών καλείται κάθε φορά που το PIC UART λαμβάνει ένα byte δεδομένων. Σε ορισμένα από τα προηγούμενα έργα μου UART μπόρεσα να κάνω απλώς τη δημοσκόπηση της σημαίας διακοπής RX αντί να χρειαστεί να χρησιμοποιήσω έναν χειριστή διακοπών. Αυτό δεν ισχύει για αυτό το λογισμικό, ειδικά για το PN532 που επικοινωνεί με πολύ υψηλότερο ρυθμό baud από το RC522. Η διεπαφή UART του RC522 περιορίζεται στα 9600 baud, ενώ η προεπιλογή για το PN532 είναι 115k και μπορεί να ρυθμιστεί έως και 1,288M baud. Τα ληφθέντα byte αποθηκεύονται σε μια περιοχή buffer και το κύριο μέρος του λογισμικού τα ανακτά όπως απαιτείται.

Η σημαία New_Msg υποδεικνύει ότι έχουν λάβει byte και το Byte_Count υποδεικνύει πόσα. Έχω συμπεριλάβει μια ρουτίνα "Disp_Buff" στο λογισμικό που μπορεί να κληθεί για να εμφανίσει τα περιεχόμενα του buffer λήψης κατά τον εντοπισμό σφαλμάτων. Μερικά από τα μηνύματα επιστροφής θα ξεχειλίσουν μια τυπική οθόνη 1602, αλλά έχω LCD χαρακτήρα 40 χαρακτήρων με 2 γραμμές που βρήκα σε μια ηλεκτρονική τοποθεσία πλεονασμάτων ηλεκτρονικών. Ο ορισμός "Max_Line" μπορεί να οριστεί για το μέγεθος της οθόνης LCD. Εάν επιτευχθεί "Max_Line", η ρουτίνα "Disp_Buff" συνεχίζεται γράφοντας στη δεύτερη γραμμή. Θα μπορούσατε να προσθέσετε λίγο κώδικα σε αυτήν τη ρουτίνα για να συνεχίσετε στις γραμμές τρεις και τέσσερις εάν έχετε LCD 4 γραμμών. Για το PN532 υπάρχει μια σημαία που μπορεί να ρυθμιστεί έτσι ώστε η ρουτίνα είτε να απορρίπτει όλα τα ληφθέντα byte είτε απλά να αποβάλλει τα 16 byte δεδομένων από μια απάντηση ανάγνωσης.

Δεν υπάρχει ανάγκη διαγραφής του buffer λήψης ή του Byte_Count, επειδή η εκκαθάριση της σημαίας New_Msg θα προκαλέσει την εκκαθάριση του Byte_Count από τον χειριστή διακοπών και αυτό χρησιμοποιείται ως ευρετήριο στο buffer. Το New_Msg συνήθως διαγράφεται πριν από κάθε βήμα εντολών, έτσι ώστε τα ειδικά αποτελέσματα για αυτήν την εντολή να μπορούν εύκολα να εντοπιστούν και να επαληθευτούν. Στο RC522 αυτό σημαίνει ότι το buffer λήψης έχει συνήθως μόνο 1 έως 4 byte. Σε ορισμένες περιπτώσεις, όπως η ανάγνωση μπλοκ δεδομένων, η εντολή Read_FIFO πρέπει να εκδοθεί πολλές φορές προκειμένου να μετακινηθούν τα byte από το FIFO στο buffer λήψης. Όλα τα αποτελέσματα εντολών για το PN532 καταλήγουν στο buffer λήψης, οπότε εκτελείται μια διαδικασία σάρωσης για τον εντοπισμό των συγκεκριμένων byte που απαιτούνται.

Ο κύριος βρόχος στο λογισμικό σαρώνει για μια ετικέτα και στη συνέχεια επικυρώνει την ετικέτα για ανάγνωση/εγγραφή. Για το λογισμικό δοκιμής που περιλαμβάνεται εδώ, η μεταβλητή Junk_Num τροποποιείται κάθε φορά μέσω του κύριου βρόχου και χρησιμοποιείται κατά τη διάρκεια της εγγραφής στην ετικέτα. Οι τιμές που γράφονται εναλλάσσονται μεταξύ της τιμής του Junk_Num και του συμπληρώματος 1 του Junk_Num. Τέλος, οι 16 γραπτές τιμές διαβάζονται και εμφανίζονται. Υπάρχουν μηνύματα προβολής για κάθε βήμα με καθυστερημένες κλήσεις ρουτίνας, ώστε να υπάρχει χρόνος για την ανάγνωση κάθε μηνύματος. Παρέχονται επίσης μηνύματα σφάλματος, αλλά κανονικά πρέπει να εμφανίζονται μόνο εάν η ετικέτα αφαιρεθεί κατά τη διάρκεια μιας λειτουργίας.

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

Βήμα 9: Μοναδικό λογισμικό MFRC522

Το τσιπ RC522 απαιτεί περισσότερες οδηγίες χαμηλού επιπέδου από το τσιπ PN532 για να πραγματοποιήσει επικοινωνίες με ετικέτες. Είναι σαν τον προγραμματισμό στη γλώσσα συναρμολόγησης έναντι του προγραμματισμού σε "C". Μια άλλη σημαντική διαφορά είναι ότι το RC522 απαιτεί οι επικοινωνίες με την ετικέτα να διοχετευτούν μέσω ενός buffer FIFO. Οι ρουτίνες "Write_FIFO" και "Read_FIFO" χειρίζονται αυτές τις εργασίες. Το λογισμικό MFRC522 περιλαμβάνει μια ενότητα για πολλές από τις εντολές χαμηλότερου επιπέδου από τις οποίες βασίζονται οι κύριες λειτουργίες.

Ο υπολογισμός αθροίσματος ελέγχου εντολής ετικέτας για το RC522 είναι πολύ διαφορετικός από αυτόν του PN532. Αφού ενσωματωθεί η εντολή ετικέτας στο FIFO, αποστέλλεται μια εντολή ενότητας για τον υπολογισμό του αθροίσματος ελέγχου. Το αποτέλεσμα 16-bit δεν προσαρτάται αυτόματα στην εντολή ετικέτας αλλά είναι διαθέσιμο για ανάγνωση από δύο καταχωρητές 8-bit. Ο υπολογισμός του αθροίσματος ελέγχου σκουπίζει τα δεδομένα στο FIFO, οπότε η απαιτούμενη ακολουθία έχει ως εξής:

· Δημιουργήστε την εντολή στο FIFO

· Εντολή υπολογισμού αθροίσματος ελέγχου

· Δημιουργήστε ξανά την εντολή στο FIFO

· Διαβάστε τα μητρώα CRC και γράψτε τα bytes αθροίσματος ελέγχου στο FIFO

· Στείλτε μια εντολή Transceive ή Authenticate

Η εντολή Transceive θα μεταδώσει το buffer FIFO και στη συνέχεια θα μεταβεί αυτόματα στη λειτουργία λήψης για να περιμένει την απάντηση από την ετικέτα. Η εντολή Transceive πρέπει να ακολουθείται από τη ρύθμιση του bit StartSend στο BitFramingRegister για να μεταδίδει πραγματικά τα δεδομένα. Η εντολή ελέγχου ταυτότητας δεν έχει αυτήν την απαίτηση.

Σε γενικές γραμμές, οι εφαρμογές κώδικα Arduino «C» που διατίθενται στο διαδίκτυο χρησιμοποιούν τους καταχωρητές σημαιών διακοπής και τον καταχωρητή timeout για να διασφαλίσουν ότι η σωστή απάντηση λαμβάνεται έγκαιρα. Κατά τη γνώμη μου, είναι υπερβολικό για αυτήν τη μη κρίσιμη εφαρμογή. Αντ 'αυτού, χρησιμοποιώ σύντομα χρονικά όρια λογισμικού για να περιμένω την απάντηση και στη συνέχεια να επαληθεύσω ότι είναι σωστή. Το εγχειρίδιο για τις ετικέτες Mifare περιγράφει λεπτομερώς το χρονοδιάγραμμα για τις διάφορες συναλλαγές και επιτρέπεται επίσης ο χρόνος για τον αναμενόμενο αριθμό byte που θα ληφθούν. Αυτές οι χρονικές καθυστερήσεις ενσωματώνονται στις περισσότερες υπορουτίνες εντολών χαμηλού επιπέδου.

Βήμα 10: Μοναδικό Λογισμικό PN532

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

Η ακολουθία προετοιμασίας ήταν λεπτομερής νωρίτερα και η ίδια ρουτίνα λογισμικού στέλνει επίσης την εντολή SAMConfiguration για να βγάλει τη μονάδα από την κατάσταση "LowVbat". Οι υπόλοιπες βασικές εντολές, όπως η σάρωση, ο έλεγχος ταυτότητας, η ανάγνωση/εγγραφή ετικέτας, απλώς δημιουργούνται διαδοχικά στις εφαρμοζόμενες ρουτίνες. Το άθροισμα ελέγχου υπολογίζεται απλά προσθέτοντας τα byte εντολών, κάνοντας ένα συμπλήρωμα και στη συνέχεια προσθέτοντας 1 για να γίνει συμπλήρωμα 2. Το αποτέλεσμα 8-bit προσαρτάται στη συμβολοσειρά εντολών λίγο πριν το postamble.

Δεν υπάρχει FIFO όπως στο RC522, οπότε τα πλήρη μηνύματα απόκρισης λαμβάνονται αυτόματα. Η ρουτίνα "Find_Response" σαρώνει το buffer δεδομένων λήψης για το TFI (0xD5). Η ρουτίνα εκμεταλλεύεται τη γνώση των αναμενόμενων μηνυμάτων και αγνοεί τις απλές απαντήσεις ACK που δεν περιλαμβάνουν δεδομένα. Μόλις βρεθεί το TFI, οι επιθυμητές αποκρίσεις αντισταθμίζονται από αυτό. Τα byte εντολής echo και εντολής αποθηκεύονται από τη ρουτίνα "Read_Buff" για μεταγενέστερη επαλήθευση.

Αυτά για αυτήν την ανάρτηση. Ρίξτε μια ματιά στα άλλα μου έργα ηλεκτρονικής στη διεύθυνση: www.boomerrules.wordpress.com

Συνιστάται: