विषयसूची:

RC522 और PN532 RFID मूल बातें: 10 कदम
RC522 और PN532 RFID मूल बातें: 10 कदम

वीडियो: RC522 और PN532 RFID मूल बातें: 10 कदम

वीडियो: RC522 और PN532 RFID मूल बातें: 10 कदम
वीडियो: Arduino MFRC522 RFID module Pinouts, Interfacing, how to read RFID tags ID identity number and use 2024, जुलाई
Anonim
RC522 और PN532 RFID मूल बातें
RC522 और PN532 RFID मूल बातें

नोट: मेरे पास अब ऐसे निर्देश हैं जो RC522 और PN532 के लिए Arduino कोड प्रदान करते हैं।

कुछ समय पहले मैंने प्रयोग के लिए तीन अलग-अलग RFID मॉड्यूल खरीदे। पिछली परियोजना में मैंने विस्तार से बताया था कि बुनियादी सुरक्षा कार्य करने के लिए एक साधारण 125-kHz मॉड्यूल का उपयोग कैसे करें। इस तरह के मॉड्यूल केवल-पढ़ने के लिए टैग का उपयोग करते हैं, इसलिए प्रक्रिया आईडी के लिए स्कैन की जाती है, यदि वांछित हो तो स्टोर करें, और संग्रहीत आईडी के साथ तुलना करें। मेरे द्वारा खरीदे गए अन्य मॉड्यूल 13.56-मेगाहर्ट्ज पर काम करते हैं और ऐसे टैग का उपयोग करते हैं जिन्हें पढ़ा और लिखा जा सकता है, इसलिए बुनियादी सुरक्षा के लिए उनका उपयोग करना एक तरह की बर्बादी है। दो सामान्य मॉड्यूल या तो RC522 चिप या PN532 चिप का उपयोग करते हैं - दोनों NXP द्वारा बनाए गए हैं।

यदि आपने मेरा कोई अन्य प्रोजेक्ट पढ़ा है तो आप जानते हैं कि मुझे सस्ते PIC माइक्रोकंट्रोलर और असेंबली भाषा में प्रोग्राम का उपयोग करना पसंद है। तो मैं जो खोज रहा था वह मॉड्यूल और आरएफआईडी टैग से बात करने के लिए आवश्यक चरणों का एक क्रम था। जबकि मॉड्यूल के लिए ऑनलाइन बहुत सारे उदाहरण कार्यक्रम हैं, उनमें से अधिकांश Arduino के लिए 'C' सॉफ़्टवेयर में लिखे गए हैं और SPI इंटरफ़ेस का उपयोग करते हैं। साथ ही, चिप्स और मिफेयर टैग के मैनुअल को समझने में थोड़ा समय लगता है। यह पोस्ट मुख्य रूप से उस जानकारी के बारे में है जो मेरी इच्छा है कि जब मैंने परियोजना शुरू की थी। मैं प्रत्येक मॉड्यूल के लिए आवश्यक बुनियादी आदेशों को निष्पादित करने के लिए पीआईसी असेंबली सॉफ्टवेयर प्रोग्राम भी शामिल करता हूं। यहां तक कि अगर आप पीआईसी और/या असेंबली भाषा का उपयोग नहीं करते हैं, तो स्रोत कोड कम से कम आपको प्रत्येक चरण को करने के लिए आवश्यक विशिष्ट आदेशों का एक अच्छा विचार प्रदान करना चाहिए।

चरण 1: सीरियल इंटरफेस

सीरियल इंटरफेस
सीरियल इंटरफेस
सीरियल इंटरफेस
सीरियल इंटरफेस
सीरियल इंटरफेस
सीरियल इंटरफेस
सीरियल इंटरफेस
सीरियल इंटरफेस

इन मॉड्यूल पर उपयोग किए गए दोनों चिप्स SPI, I2C, या UART (HSSP) के माध्यम से इंटरफेस करने में सक्षम हैं। PN532 मॉड्यूल में एक DIP स्विच होता है जिसका उपयोग वांछित इंटरफ़ेस का चयन करने के लिए किया जाता है लेकिन MFRC522 मॉड्यूल SPI इंटरफ़ेस के लिए हार्डवायर्ड होता है। मैं पीआईसी के अंतर्निहित यूएआरटी का उपयोग करना पसंद करता हूं, इसलिए मैंने यह देखने के लिए ऑनलाइन शिकार किया कि क्या एमएफआरसी 522 मॉड्यूल को यूएआरटी मोड में लाने का कोई तरीका है या नहीं। मैंने जो पाया वह यह था कि बोर्ड पर एक निशान काटने से चाल चल जाएगी। कट चिप के ईए पिन से 3.3 वोल्ट को प्रभावी ढंग से हटा देता है। तकनीकी रूप से ईए पिन को तब जमीन से जोड़ा जाना चाहिए, लेकिन चिप पिन घनत्व को देखते हुए बहुत से लोग सोल्डरिंग करतब को नहीं खींच सकते। हालांकि, चिंता की कोई बात नहीं है, क्योंकि ईए पिन में आंतरिक पुल-अप नहीं होता है और पुराने टीटीएल लॉजिक इनपुट की तरह "फ्लोट" नहीं होता है। स्पॉट काटने के लिए चिप आरेख और बोर्ड अनुभाग चित्र देखें। सुनिश्चित करें कि आपने सीधे ईए पिन पर जाने वाले छोटे ट्रेस को ही काट दिया है।

चरण 2: हार्डवेयर

हार्डवेयर
हार्डवेयर

UART संचार के लिए हार्डवेयर कनेक्शन ऊपर दिए गए चित्र में दिखाए गए हैं। एमएफआरसी 522 के लिए यूएआरटी कनेक्शन बोर्ड पर चिह्नित नहीं हैं, लेकिन जैसा कि योजनाबद्ध में दिखाया गया है, एसडीए पिन यूएआरटी डेटा प्राप्त करता है और एमआईएसओ पिन यूएआरटी डेटा प्रसारित करता है। PN532 मॉड्यूल में बोर्ड के निचले हिस्से में UART चिह्न होते हैं।

दोनों मॉड्यूल 3.3 वोल्ट पर चलते हैं और PIC TX पिन से 5-वोल्ट लॉजिक स्तर को भी सीमित करने की आवश्यकता है। एलसीडी कनेक्शन मानक 4-बिट सेटअप है जिसका उपयोग मेरी पिछली कई परियोजनाओं में किया गया है। सभी संदेशों के लिए डिफ़ॉल्ट प्रारूप मानक 1602 एलसीडी (2 पंक्तियों द्वारा 16 वर्ण) के लिए निर्धारित है। मेरे पास 2 लाइन एलसीडी द्वारा 40 वर्ण भी है जो मैं डिबगिंग के दौरान कच्चे डेटा डंप के लिए उपयोग करता हूं इसलिए मैंने सॉफ़्टवेयर में एक परिभाषा शामिल की जो मुझे अतिरिक्त डिस्प्ले स्पेस का लाभ उठाने की अनुमति देती है।

चरण 3: डेटा ब्लॉक

इस परियोजना के लिए उपयोग किए जाने वाले Mifare Classic 1k टैग्स को 16 सेक्टर, चार डेटा ब्लॉक प्रति सेक्टर, 16 बाइट्स प्रति डेटा ब्लॉक के रूप में कॉन्फ़िगर किया गया है। 64 डेटा ब्लॉक में से केवल 47 ही वास्तव में प्रयोग करने योग्य हैं। डेटा ब्लॉक 0 में निर्माता डेटा होता है और ब्लॉक 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59 और 63 को ट्रेलर ब्लॉक कहा जाता है। ट्रेलर ब्लॉक प्रत्येक सेक्टर में अंतिम होते हैं और उनमें दो कुंजी और ब्लॉक एक्सेस बिट्स होते हैं। कुंजी और ब्लॉक एक्सेस बिट्स उस क्षेत्र में केवल डेटा ब्लॉक पर लागू होते हैं ताकि आपके पास प्रत्येक क्षेत्र के लिए अलग-अलग कुंजी और एक्सेस नियम हो सकें। डिफ़ॉल्ट कुंजियाँ "FF FF FF FF FFh" पर सेट हैं। इस मूल परियोजना के लिए मैं केवल एक डेटा ब्लॉक का उपयोग करता हूं और डिफ़ॉल्ट कुंजी और एक्सेस बिट्स रखता हूं। इन कार्डों से संबंधित बहुत सारे दस्तावेज़ हैं, इसलिए बस "Mifare" के लिए एक ऑनलाइन खोज करें या यदि आप उन्हें और अधिक गहराई से देखना चाहते हैं तो NXP वेबसाइट पर जाएँ।

चरण 4: सामान्य ऑपरेशन

जबकि दोनों मॉड्यूल इस तरह से अद्वितीय हैं कि उन्हें एक्सेस किया जाता है और जिस तरह से वे टैग तक पहुंचते हैं, वहां एक सामान्य प्रक्रिया होती है जो काम पूरा करने के लिए आवश्यक होती है। इस परियोजना के लिए हम मानते हैं कि टैग्स मिफेयर क्लासिक 1k प्रकार हैं और हम एंटीना क्षेत्र में एक समय में केवल एक टैग की अनुमति दे रहे हैं। बुनियादी चरणों को नीचे परिभाषित किया गया है।

· मॉड्यूल को इनिशियलाइज़ करें: सामान्य तौर पर इसके लिए चिप में रजिस्टरों के लिए मान लिखने, "वेकअप" कमांड भेजने और एंटीना को पावर चालू करने जैसी चीजों की आवश्यकता होती है। बैटरी से चलने वाले एप्लिकेशन में आप बैटरी बचाने के लिए एंटीना पावर को चालू और बंद करने में सक्षम होना चाहते हैं, लेकिन इस सरल एप्लिकेशन के लिए हम इसे एक बार चालू करते हैं और फिर इसे छोड़ देते हैं।

· क्रिप्टो ध्वज साफ़ करें (केवल 522): जब एक टैग प्रमाणित होता है तो उपयोगकर्ता को यह बताने के लिए एक ध्वज सेट हो जाता है कि टैग के साथ संचार एन्क्रिप्ट किया जाएगा। अगले स्कैन से पहले इस फ़्लैग को उपयोगकर्ता द्वारा साफ़ करने की आवश्यकता है, भले ही स्कैन किया जा रहा टैग वही हो।

· एक टैग के लिए स्कैन करें: मॉड्यूल मूल रूप से पूछता है "क्या कोई बाहर है?" और टैग जवाब देता है "मैं यहाँ हूँ"। यदि मॉड्यूल को त्वरित प्रतिक्रिया नहीं मिलती है तो यह सुनना बंद कर देता है। इसका मतलब है कि हमें मॉड्यूल को बार-बार स्कैन कमांड भेजने की जरूरत है जब तक कि उसे कोई टैग न मिल जाए।

· टैग प्राप्त करें उपयोगकर्ता पहचान संख्या (यूआईडी): टैग कुछ सीमित जानकारी के साथ स्कैन अनुरोध का जवाब देगा जैसे कि यह किस प्रकार का टैग है। इसका मतलब है कि हमें इसका यूआईडी प्राप्त करने के लिए एक और कमांड भेजने की आवश्यकता हो सकती है। Mifare Classic 1k टैग के लिए UID चार बाइट्स है। यदि अन्य टैग के लिए लंबा हो सकता है लेकिन यह प्रोजेक्ट उन्हें संबोधित नहीं करता है।

· टैग का चयन करें (केवल 522): यूआईडी का उपयोग उस टैग का चयन करने के लिए किया जाता है जिसे उपयोगकर्ता पढ़ने और लिखने के लिए प्रमाणित करना चाहता है। यह इस संभावना पर आधारित है कि एंटीना क्षेत्र में एक से अधिक टैग हो सकते हैं। यह हमारे साधारण आवेदन के मामले में नहीं है लेकिन हमें वैसे भी टैग का चयन करने की आवश्यकता है।

टैग को प्रमाणित करें: यदि हम टैग को पढ़ना या लिखना चाहते हैं तो यह चरण आवश्यक है। यदि हम केवल एक साधारण सुरक्षा एप्लिकेशन के लिए टैग के बीच अंतर करना चाहते हैं तो यूआईडी पर्याप्त है। प्रमाणीकरण की आवश्यकता है कि हम यूआईडी को जानते हैं और हम उस टैग के डेटा सेक्टर के लिए क्रिप्टो कुंजी जानते हैं जिसे हम एक्सेस करना चाहते हैं। इस प्रोजेक्ट के लिए हम डिफ़ॉल्ट कुंजियों के साथ चिपके रहते हैं लेकिन मेरा फॉलो-ऑन प्रोजेक्ट चाबियों को बदल देता है ताकि टैग को इलेक्ट्रॉनिक वॉलेट के रूप में इस्तेमाल किया जा सके।

टैग पढ़ें या लिखें: हमेशा अनुरोधित डेटा ब्लॉक के सभी 16 बाइट्स पढ़ता है। राइट्स की आवश्यकता है कि सभी 16 बाइट्स एक ही समय में लिखे जाएं। यदि आप उसी डेटा सेक्टर में किसी अन्य ब्लॉक को पढ़ना या लिखना चाहते हैं तो टैग को फिर से प्रमाणित करने की आवश्यकता नहीं है। यदि आप किसी भिन्न डेटा सेक्टर में किसी ब्लॉक को पढ़ना या लिखना चाहते हैं तो उस सेक्टर के लिए कुंजी का उपयोग करके टैग को फिर से प्रमाणित करने की आवश्यकता है।

चरण 5: MFRC522 मॉड्यूल एक्सेस अनुक्रम

स्टार्टअप रूटीन में मेरे द्वारा देखे गए अधिकांश एप्लिकेशन में पाए गए ये बुनियादी चरण शामिल हैं:

· डमी डेटा बाइट भेजें (अगला पैराग्राफ देखें)

· कंप्यूटर पुनः स्थापना

· आरएफ रिसीवर लाभ सेट करें (यदि डिफ़ॉल्ट के अलावा कुछ और वांछित है)

· एएसके मॉडुलन प्रतिशत को 100% पर सेट करें

· सीआरसी गणना के लिए बीज मूल्य निर्धारित करें

· एंटीना चालू करें

· फर्मवेयर संस्करण प्राप्त करें (आवश्यक नहीं)

कुछ अस्पष्ट कारणों से मेरा मॉड्यूल शक्ति देता है और सोचता है कि उसे डेटा बाइट के बिना एक लिखित आदेश प्राप्त हुआ है। मुझे नहीं पता कि यह मेरे मॉड्यूल के साथ सिर्फ एक मुद्दा है, लेकिन मैंने कहीं और इसका कोई संदर्भ नहीं देखा है। मैंने हार्डवेयर और सॉफ़्टवेयर रीसेट दोनों के साथ प्रयोग किया और न ही समस्या को ठीक किया। मेरा समाधान मॉड्यूल इनिशियलाइज़ेशन रूटीन की शुरुआत में "0" (अपरिभाषित) रजिस्टर करने के लिए एक डमी रीड कॉल जोड़ना था। यदि मॉड्यूल इसे अज्ञात राइट कमांड के डेटा के रूप में देखता है तो कोई बुरा प्रभाव नहीं दिखता है। यदि यह इसे रीड कमांड के रूप में देखता है, तो कुछ भी उपयोगी नहीं होता है। यह मुझे परेशान करता है कि मैं इस मुद्दे को पूरी तरह से परिभाषित नहीं कर सकता, विशेष रूप से यह देखते हुए कि केवल मॉड्यूल का हार्डवेयर रीसेट समस्या को ठीक नहीं करता है।

RC522 चिप कई रजिस्टरों से बना है, जिनमें से अधिकांश पढ़ने और लिखने दोनों हैं। लिखने के लिए, रजिस्टर नंबर मॉड्यूल को भेजा जाता है और उसके बाद मूल्य लिखने के लिए भेजा जाता है। पढ़ने के लिए, रजिस्टर संख्या में 0x80 जोड़ा गया है और इसे मॉड्यूल को भेजा जाता है। राइट कमांड की प्रतिक्रिया एक्सेस किए गए रजिस्टर की एक प्रतिध्वनि है। रीड कमांड की प्रतिक्रिया रजिस्टर की सामग्री है। सॉफ्टवेयर उस ज्ञान का लाभ यह सत्यापित करने के लिए लेता है कि कमांड को ठीक से निष्पादित किया गया था।

चरण 6: PN532 मॉड्यूल एक्सेस अनुक्रम

स्टार्टअप रूटीन में ये आवश्यक चरण शामिल हैं:

· एक आरंभीकरण स्ट्रिंग भेजें: यह UART इंटरफ़ेस के लिए विशिष्ट है। मैनुअल में कहा गया है कि UART इंटरफ़ेस इंटरफ़ेस पर पाए गए पांचवें बढ़ते किनारे पर जाग जाएगा। यह 0x55, 0x55, 0x00, 0x00, 0x00, 0x00 भेजने की अनुशंसा करता है। अधिकांश भाग के लिए, बढ़ते किनारों के साथ पर्याप्त संख्या में वर्णों की आवश्यकता होती है और उन्हें कमांड प्रस्तावना (00 00 FF) की तरह नहीं दिखना चाहिए।

· मॉड्यूल को जगाएं: उपयोगकर्ता मैनुअल में दफन यह दर्शाता है कि मॉड्यूल एक प्रकार की नींद की स्थिति में शुरू होता है जिसे "लोवबैट" कहा जाता है। इस स्थिति से बाहर निकलने के लिए हमें "SAMConfiguration" कमांड भेजने की आवश्यकता है।

PN532 एक परिभाषित संदेश प्रारूप में आदेश भेजने की अपेक्षा करता है जिसमें एक प्रस्तावना, संदेश और एक पोस्टमबल शामिल है। प्रतिक्रिया संदेश उसी प्रारूप का पालन करते हैं। कमांड और रिस्पांस संदेशों में एक TFI (फ़्रेम आइडेंटिफ़ायर) और एक कमांड संस्करण दोनों शामिल हैं। कमांड 0xD4 के TFI का उपयोग करता है और प्रतिक्रिया 0xD5 का उपयोग करती है। कमांड संस्करण अलग-अलग होते हैं लेकिन प्रतिक्रिया हमेशा कमांड संस्करण में वृद्धि करेगी और इसे टीएफआई के बाद बाइट में वापस कर देगी। यह संगति प्रासंगिक जानकारी के लिए प्रतिक्रिया संदेशों को आसानी से स्कैन करने की अनुमति देती है।

प्रत्येक कमांड संदेश (प्रस्तावना के बाद) में संदेश की लंबाई, संदेश की लंबाई के 2 के पूरक, टीएफआई, कमांड, डेटा, चेकसम और पोस्टमबल शामिल हैं। सॉफ्टवेयर व्यक्तिगत कमांड बनाता है और फिर एक रूटीन को कॉल करता है जो चेकसम की गणना करता है और पोस्टमबल को जोड़ता है।

प्रतिक्रिया के लिए संदेश प्रारूप कमांड के समान है। एक विशिष्ट प्रतिक्रिया में एक एसीके (00 00 एफएफ 00 एफएफ 00) शामिल होगा जिसके बाद कमांड की विशिष्ट प्रतिक्रिया होगी। प्रत्येक कमांड प्रतिक्रिया 00 00 FF की प्रस्तावना से शुरू होती है। प्रतिक्रिया में D5 का एक TFI बाइट भी होना चाहिए जिसके बाद कमांड संख्या 1 से बढ़ी हुई हो। हमारे "SAMConfiguration" कमांड (14) के लिए जो कि 15 होगा। "SAMConfiguration" कमांड को यह प्रतिक्रिया मिलती है: 00 00 FF 00 FF 00 00 00 एफएफ 02 एफई डी5 15 16 00.

अन्य मॉड्यूल-विशिष्ट कमांड हैं जिन्हें भेजा जा सकता है लेकिन इस एप्लिकेशन के लिए उनकी आवश्यकता नहीं है। हालाँकि, मैंने एक रूटीन शामिल किया था जिसे फर्मवेयर संस्करण संख्या को पुनः प्राप्त करने के लिए कहा जा सकता है। एक विशिष्ट प्रतिक्रिया (ACK और प्रस्तावना के बाद) होगी: 06 FA D5 03 32 01 06 07 E8 00। "01 06 07" फर्मवेयर संस्करण संख्या 1.6.7 इंगित करता है।

चरण 7: टैग एक्सेस अनुक्रम

मॉड्यूल तैयार होने के बाद, हम टैग के लिए विशिष्ट कमांड भेज सकते हैं। टैग डेटा को पढ़ने या लिखने के लिए हमारे पास इसकी पहचान संख्या (यूआईडी) होनी चाहिए। यूआईडी और कुंजी का उपयोग पढ़ने/लिखने के लिए एक विशिष्ट टैग डेटा सेक्टर को अधिकृत करने के लिए किया जाएगा। टैग डेटा हमेशा एक निर्दिष्ट डेटा ब्लॉक में सभी 16 बाइट्स पर पढ़ता/लिखता है। इसका मतलब है कि विशिष्ट एप्लिकेशन डेटा ब्लॉक को पढ़ेगा, डेटा को वांछित के रूप में संशोधित करेगा, और फिर नया डेटा वापस टैग पर लिखेगा।

चरण 8: सॉफ्टवेयर

जब भी PIC UART को डेटा का बाइट प्राप्त होता है तो इंटरप्ट हैंडलर सॉफ़्टवेयर को कॉल किया जाता है। मेरी पिछली कुछ यूएआरटी परियोजनाओं में मैं एक इंटरप्ट हैंडलर का उपयोग करने के बजाय सिर्फ आरएक्स इंटरप्ट ध्वज को मतदान करने में सक्षम था। इस सॉफ़्टवेयर के लिए ऐसा नहीं है, विशेष रूप से PN532 के लिए जो RC522 की तुलना में बहुत अधिक बॉड दर पर संचार करता है। RC522 का UART इंटरफ़ेस 9600 बॉड तक सीमित है जबकि PN532 के लिए डिफ़ॉल्ट 115k है और इसे 1.288M बॉड जितना ऊंचा सेट किया जा सकता है। प्राप्त बाइट्स को बफर क्षेत्र में संग्रहीत किया जाता है और सॉफ्टवेयर का मुख्य भाग उन्हें आवश्यकतानुसार पुनः प्राप्त करता है।

New_Msg ध्वज इंगित करता है कि बाइट प्राप्त हुए हैं और बाइट_काउंट इंगित करता है कि कितने। मैंने सॉफ़्टवेयर में "डिस्प_बफ़" रूटीन शामिल किया है जिसे डीबगिंग के दौरान प्राप्त बफर की सामग्री को प्रदर्शित करने के लिए बुलाया जा सकता है। कुछ वापसी संदेश एक विशिष्ट १६०२ डिस्प्ले को ओवरफ्लो करेंगे लेकिन मेरे पास २ लाइन एलसीडी द्वारा ४० वर्ण है जो मुझे एक ऑनलाइन अधिशेष इलेक्ट्रॉनिक्स साइट पर मिला है। आपके एलसीडी आकार के लिए "Max_Line" परिभाषित किया जा सकता है। यदि "Max_Line" पर पहुँच जाता है, तो "Disp_Buff" रूटीन दूसरी पंक्ति में लिखकर जारी रहता है। यदि आपके पास 4-लाइन एलसीडी है तो आप तीन और चार पंक्तियों पर जारी रखने के लिए उस दिनचर्या में थोड़ा कोड जोड़ सकते हैं। PN532 के लिए एक ध्वज है जिसे सेट किया जा सकता है ताकि दिनचर्या या तो सभी प्राप्त बाइट्स को डंप कर दे या केवल 16 डेटा बाइट्स को रीड रिस्पांस से डंप कर दे।

प्राप्त बफ़र या बाइट_काउंट को साफ़ करने की आवश्यकता नहीं है क्योंकि New_Msg ध्वज को साफ़ करने से बाइट_काउंट को इंटरप्ट हैंडलर द्वारा साफ़ कर दिया जाएगा और यही बफर में इंडेक्स के रूप में उपयोग किया जाता है। New_Msg आमतौर पर प्रत्येक कमांड चरण से पहले साफ़ हो जाता है ताकि उस आदेश के लिए विशिष्ट परिणाम आसानी से स्थित और सत्यापित हो सकें। RC522 में इसका मतलब है कि प्राप्त बफर में आमतौर पर केवल 1 से 4 बाइट्स होते हैं। कुछ मामलों में, जैसे डेटा ब्लॉक पढ़ता है, फीफो से बाइट्स को रिसीव बफर में ले जाने के लिए Read_FIFO कमांड को कई बार जारी किया जाना चाहिए। PN532 के लिए सभी कमांड परिणाम प्राप्त बफर में समाप्त होते हैं, इसलिए आवश्यक विशिष्ट बाइट्स का पता लगाने के लिए एक स्कैन प्रक्रिया की जाती है।

सॉफ़्टवेयर में मुख्य लूप एक टैग के लिए स्कैन करता है और फिर टैग को पढ़ने/लिखने के लिए प्रमाणित करता है। यहां शामिल परीक्षण सॉफ़्टवेयर के लिए, जंक_नम चर को हर बार मुख्य लूप के माध्यम से संशोधित किया जाता है और टैग को लिखने के दौरान उपयोग किया जाता है। Junk_Num के मान और Junk_Num के 1 के पूरक के बीच वैकल्पिक रूप से लिखे गए मान। अंत में, 16 लिखित मान पढ़े और प्रदर्शित किए जाते हैं। प्रत्येक संदेश को पढ़ने के लिए समय की अनुमति देने के लिए विलंब नियमित कॉल के साथ प्रत्येक चरण के लिए प्रदर्शन संदेश हैं। त्रुटि संदेश भी प्रदान किए जाते हैं लेकिन सामान्य रूप से केवल तभी होना चाहिए जब किसी ऑपरेशन के दौरान टैग हटा दिया जाए।

सॉफ़्टवेयर इनिशियलाइज़ेशन का एक हिस्सा कोड का एक भाग है जिसे केवल पावर अप पर निष्पादित किया जाता है और सॉफ़्टवेयर रीसेट का पता चलने पर छोड़ दिया जाता है। त्रुटि संदेश आम तौर पर मुख्य लूप से बाहर निकलने के तरीके के रूप में सॉफ़्टवेयर रीसेट के साथ समाप्त हो जाते हैं। रीसेट "टिल्ट" रूटीन में होता है जो केवल वॉचडॉग टाइमर को सक्षम करता है और फिर टाइमआउट की प्रतीक्षा में एक अनंत लूप में चला जाता है।

चरण 9: MFRC522 अद्वितीय सॉफ्टवेयर

टैग के साथ संचार को पूरा करने के लिए RC522 चिप को PN532 चिप की तुलना में अधिक निम्न-स्तरीय निर्देशों की आवश्यकता होती है। यह असेंबली भाषा में प्रोग्रामिंग बनाम "सी" में प्रोग्रामिंग की तरह है। एक और महत्वपूर्ण अंतर यह है कि RC522 के लिए आवश्यक है कि टैग के साथ संचार FIFO बफर के माध्यम से फ़नल हो जाए। रूटीन "Write_FIFO" और "Read_FIFO" उन कार्यों को संभालते हैं। MFRC522 सॉफ्टवेयर में निचले स्तर के कई कमांडों के लिए एक खंड शामिल है जिससे मुख्य कार्य निर्मित होते हैं।

RC522 के लिए टैग कमांड चेकसम गणना PN532 की तुलना में बहुत अलग है। FIFO में टैग कमांड बनने के बाद, चेकसम की गणना के लिए एक मॉड्यूल कमांड भेजा जाता है। 16-बिट परिणाम स्वचालित रूप से टैग कमांड में संलग्न नहीं होता है, लेकिन दो 8-बिट रजिस्टरों से पढ़ने के लिए उपलब्ध होता है। चेकसम गणना FIFO में डेटा को मिटा देती है, इसलिए आवश्यक अनुक्रम इस प्रकार है:

· फीफो में कमांड बनाएं

· चेकसम गणना का आदेश दें

· फीफो में फिर से कमांड बनाएं

· सीआरसी रजिस्टरों को पढ़ें और फीफो को चेकसम बाइट्स लिखें

· या तो एक ट्रांसीव या ऑथेंटिकेट कमांड भेजें

Transceive कमांड FIFO बफर को ट्रांसमिट करेगा और फिर टैग से प्रतिक्रिया की प्रतीक्षा करने के लिए स्वचालित रूप से रिसीव मोड पर स्विच करेगा। वास्तव में डेटा संचारित करने के लिए BitFramingRegister में StartSend बिट की सेटिंग द्वारा Transceive कमांड का पालन किया जाना चाहिए। प्रमाणीकरण आदेश में वह आवश्यकता नहीं है।

सामान्य तौर पर, ऑनलाइन उपलब्ध Arduino "C" कोड एप्लिकेशन इंटरप्ट फ्लैग रजिस्टरों और टाइमआउट रजिस्टर का उपयोग यह सुनिश्चित करने के लिए करते हैं कि सही प्रतिक्रिया समय पर प्राप्त हो। मेरी राय में यह इस गैर-समय के महत्वपूर्ण अनुप्रयोग के लिए अधिक है। इसके बजाय, मैं प्रतिक्रिया की प्रतीक्षा करने के लिए छोटे सॉफ़्टवेयर टाइमआउट का उपयोग करता हूं और फिर सत्यापित करता हूं कि यह सही है। Mifare टैग के लिए मैनुअल विभिन्न लेनदेन के समय का विवरण देता है और बाइट्स की अपेक्षित संख्या प्राप्त करने के लिए समय की भी अनुमति है। इस समय की देरी अधिकांश निम्न-स्तरीय कमांड सबरूटीन्स में निर्मित होती है।

चरण 10: PN532 अद्वितीय सॉफ्टवेयर

मॉड्यूल के आरंभ होने के बाद, टैग को खोजने और प्रमाणित करने के लिए आवश्यक चरणों को उपयुक्त कमांड और उसके बाद आवश्यक डेटा लिखकर पूरा किया जाता है। स्कैन कमांड यूआईडी लौटाता है जो तब प्रमाणीकरण के लिए उपयोग किया जाता है। उसके बाद, टैग को पढ़ता और लिखता है, संबोधित डेटा ब्लॉक के लिए 16-बाइट भेजता या लौटाता है।

इनिशियलाइज़ सीक्वेंस को पहले विस्तृत किया गया था और वही सॉफ्टवेयर रूटीन भी मॉड्यूल को "लोवबैट" स्थिति से बाहर निकालने के लिए SAMConfiguration कमांड भेजता है। बाकी बुनियादी कमांड, जैसे स्कैन, ऑथेंटिकेट, रीड/राइट टैग, लागू रूटीन में क्रमिक रूप से बनाए गए हैं। चेकसम की गणना केवल कमांड बाइट्स को जोड़कर, एक पूरक करके, और फिर इसे 2 का पूरक बनाने के लिए 1 जोड़कर की जाती है। 8-बिट परिणाम पोस्टमबल से ठीक पहले कमांड स्ट्रिंग में जोड़ा जाता है।

RC522 की तरह कोई FIFO नहीं है इसलिए पूर्ण प्रतिक्रिया संदेश स्वचालित रूप से प्राप्त होते हैं। "Find_Response" रूटीन TFI (0xD5) के लिए प्राप्त डेटा बफर को स्कैन करता है। रूटीन यह जानने का लाभ उठाता है कि अपेक्षित संदेश क्या होने चाहिए और सरल ACK प्रतिक्रियाओं को अनदेखा कर देता है जिसमें डेटा शामिल नहीं होता है। एक बार टीएफआई मिल जाने के बाद, वांछित प्रतिक्रियाएं इससे ज्ञात ऑफसेट होती हैं। कमांड इको और कमांड स्टेटस बाइट्स को बाद में सत्यापन के लिए "रीड_बफ" रूटीन द्वारा सेव किया जाता है।

इस पोस्ट के लिए बस इतना ही। मेरे अन्य इलेक्ट्रॉनिक्स प्रोजेक्ट यहां देखें: www.boomerrules.wordpress.com

सिफारिश की: