সুচিপত্র:

RC522 এবং PN532 RFID বেসিক: 10 টি ধাপ
RC522 এবং PN532 RFID বেসিক: 10 টি ধাপ

ভিডিও: RC522 এবং PN532 RFID বেসিক: 10 টি ধাপ

ভিডিও: RC522 এবং PN532 RFID বেসিক: 10 টি ধাপ
ভিডিও: Arduino RFID Bangla tutorial । RFID rc522 Arduino tutorial । Arduino RFID Basics 2024, নভেম্বর
Anonim
RC522 এবং PN532 RFID বেসিক
RC522 এবং PN532 RFID বেসিক

দ্রষ্টব্য: আমার কাছে এখন নির্দেশাবলী রয়েছে যা RC522 এবং PN532 এর জন্য Arduino কোড সরবরাহ করে।

কিছু সময় আগে আমি পরীক্ষার জন্য তিনটি ভিন্ন RFID মডিউল কিনেছিলাম। একটি পূর্ববর্তী প্রকল্পে আমি একটি মৌলিক নিরাপত্তা ফাংশন করতে একটি সাধারণ 125-kHz মডিউল কিভাবে ব্যবহার করতে হয় তা বিস্তারিতভাবে বর্ণনা করেছি। এই জাতীয় মডিউলগুলি কেবলমাত্র পঠনযোগ্য ট্যাগ ব্যবহার করে যাতে প্রক্রিয়াটি আইডি স্ক্যান করা হয়, যদি ইচ্ছা হয় তবে সংরক্ষণ করুন এবং সঞ্চিত আইডিগুলির সাথে তুলনা করুন। আমার কেনা অন্যান্য মডিউলগুলি 13.56-MHz এ কাজ করে এবং ট্যাগ ব্যবহার করে যা পড়া এবং লেখা উভয়ই হতে পারে তাই এটি কেবল মৌলিক নিরাপত্তার জন্য ব্যবহার করা অপচয়। দুটি সাধারণ মডিউল RC522 চিপ বা PN532 চিপ ব্যবহার করে - উভয়ই NXP দ্বারা তৈরি।

আপনি যদি আমার অন্য কোন প্রকল্প পড়ে থাকেন তবে আপনি জানেন যে আমি সস্তা PIC মাইক্রোকন্ট্রোলার এবং সমাবেশ ভাষায় প্রোগ্রাম ব্যবহার করতে পছন্দ করি। তাই আমি যা খুঁজছিলাম তা হল মডিউল এবং আরএফআইডি ট্যাগগুলির সাথে কথা বলার জন্য প্রয়োজনীয় পদক্ষেপগুলির একটি ক্রম। যদিও মডিউলগুলির জন্য অনলাইনে প্রচুর উদাহরণ প্রোগ্রাম রয়েছে, সেগুলির বেশিরভাগই আরডুইনোর জন্য 'সি' সফ্টওয়্যারে লেখা এবং এসপিআই ইন্টারফেস ব্যবহার করে। এছাড়াও, চিপস এবং Mifare ট্যাগের জন্য ম্যানুয়ালগুলি কিছুটা ডিসিপারিং নেয়। এই পোস্টটি মূলত সেই তথ্য সম্বন্ধে যা আমার ইচ্ছা ছিল যখন আমি প্রকল্পটি শুরু করি। আমি প্রতিটি মডিউল দ্বারা প্রয়োজনীয় মৌলিক কমান্ডগুলি সম্পাদনের জন্য পিআইসি সমাবেশ সফ্টওয়্যার প্রোগ্রামগুলি অন্তর্ভুক্ত করি। এমনকি যদি আপনি একটি পিআইসি এবং/অথবা সমাবেশ ভাষা ব্যবহার না করেন, সোর্স কোড অন্তত প্রতিটি ধাপ সম্পাদনের জন্য প্রয়োজনীয় নির্দিষ্ট কমান্ডগুলির একটি ভাল ধারণা প্রদান করা উচিত।

ধাপ 1: সিরিয়াল ইন্টারফেস

সিরিয়াল ইন্টারফেস
সিরিয়াল ইন্টারফেস
সিরিয়াল ইন্টারফেস
সিরিয়াল ইন্টারফেস
সিরিয়াল ইন্টারফেস
সিরিয়াল ইন্টারফেস
সিরিয়াল ইন্টারফেস
সিরিয়াল ইন্টারফেস

এই মডিউলগুলিতে ব্যবহৃত উভয় চিপই SPI, I2C, বা UART (HSSP) এর মাধ্যমে ইন্টারফেস করতে সক্ষম। PN532 মডিউলের একটি DIP সুইচ আছে যা পছন্দসই ইন্টারফেস নির্বাচন করতে ব্যবহৃত হয় কিন্তু MFRC522 মডিউল SPI ইন্টারফেসের জন্য হার্ডওয়ার্ড। আমি PIC এর অন্তর্নির্মিত UART ব্যবহার করতে পছন্দ করি, তাই UART মোডে MFRC522 মডিউল পাওয়ার কোন উপায় আছে কিনা তা দেখার জন্য আমি অনলাইনে শিকার করেছি। আমি যা পেয়েছি তা হল বোর্ডে একটি ট্রেস কাটা কৌশলটি করবে। কাটা কার্যকরভাবে চিপের EA পিন থেকে 3.3 ভোল্ট অপসারণ করে। টেকনিক্যালি ইএ পিনটি মাটির সাথে সংযুক্ত হওয়া উচিত কিন্তু চিপ পিনের ঘনত্বের কারণে অনেক মানুষ সেই সোল্ডারিং কৃতিত্বটি টানতে পারে না। চিন্তা করার কিছু নেই, যদিও, ইএ পিনের অভ্যন্তরীণ টানাপোড়েন নেই এবং পুরনো টিটিএল লজিক ইনপুটগুলির মতো "ভাসমান" নয়। দাগ কাটার জন্য চিপ ডায়াগ্রাম এবং বোর্ড বিভাগের ছবি দেখুন। নিশ্চিত করুন যে আপনি কেবল EA পিনে সরাসরি যাওয়া ছোট ট্রেসটি কেটেছেন।

ধাপ 2: হার্ডওয়্যার

হার্ডওয়্যার
হার্ডওয়্যার

UART যোগাযোগের জন্য হার্ডওয়্যার সংযোগগুলি উপরের চিত্রটিতে দেখানো হয়েছে। MFRC522 এর জন্য UART সংযোগগুলি বোর্ডে চিহ্নিত করা হয় না, কিন্তু পরিকল্পিতভাবে দেখানো হয়েছে, SDA পিন UART ডেটা গ্রহণ করে এবং MISO পিন UART ডেটা প্রেরণ করে। PN532 মডিউলে বোর্ডের নিচের দিকে UART চিহ্ন রয়েছে।

উভয় মডিউল 3.3 ভোল্টে চলে এবং পিআইসি টিএক্স পিন থেকে ৫-ভোল্ট লজিক লেভেলকেও সীমিত করা প্রয়োজন। এলসিডি সংযোগ হল স্ট্যান্ডার্ড 4-বিট সেটআপ যা আমার আগের বেশ কয়েকটি প্রকল্পে ব্যবহৃত হয়েছে। সমস্ত বার্তার জন্য ডিফল্ট বিন্যাসটি 1602 LCD (16 টি অক্ষর 2 লাইনের) জন্য সেট করা আছে। আমার 2 লাইন এলসিডি দ্বারা 40 টি অক্ষর আছে যা আমি ডিবাগ করার সময় কাঁচা ডেটা ডাম্পের জন্য ব্যবহার করি তাই আমি সফ্টওয়্যারে একটি সংজ্ঞা অন্তর্ভুক্ত করেছি যা আমাকে অতিরিক্ত ডিসপ্লে স্পেসের সুবিধা নিতে দেয়।

ধাপ 3: ডেটা ব্লক

এই প্রকল্পের জন্য ব্যবহৃত Mifare ক্লাসিক 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: সাধারণ অপারেশন

যদিও উভয় মডিউলগুলি যেভাবে অ্যাক্সেস করা হয় এবং ট্যাগগুলি যেভাবে তারা অ্যাক্সেস করে তাতে অনন্য, সেখানে একটি সাধারণ প্রক্রিয়া রয়েছে যা কাজটি সম্পন্ন করার জন্য প্রয়োজনীয়। এই প্রকল্পের জন্য আমরা ধরে নিচ্ছি যে ট্যাগগুলি Mifare Classic 1k টাইপ এবং আমরা অ্যান্টেনা ক্ষেত্রে এক সময়ে শুধুমাত্র একটি ট্যাগের অনুমতি দিচ্ছি। মৌলিক পদক্ষেপগুলি নীচে সংজ্ঞায়িত করা হয়েছে।

The মডিউলটি আরম্ভ করুন: সাধারণভাবে এর জন্য চিপে রেজিস্টারে মান লেখা, "ওয়েকআপ" কমান্ড পাঠানো এবং অ্যান্টেনায় পাওয়ার চালু করার মতো জিনিসগুলির প্রয়োজন হয়। একটি ব্যাটারি চালিত অ্যাপ্লিকেশনে আপনি ব্যাটারি বাঁচানোর জন্য অ্যান্টেনা পাওয়ার চালু এবং বন্ধ করতে সক্ষম হতে চান কিন্তু এই সাধারণ অ্যাপ্লিকেশনের জন্য আমরা এটি একবার চালু করি এবং তারপর এটি চালু রাখি।

The ক্রিপ্টো পতাকা সাফ করুন (শুধুমাত্র 522): যখন একটি ট্যাগ প্রমাণিত হয় তখন একটি পতাকা সেট করা হয় যাতে ব্যবহারকারীকে জানানো যায় যে ট্যাগের সাথে যোগাযোগ এনক্রিপ্ট করা হবে। এই পতাকাটি পরবর্তী স্ক্যানের পূর্বে ব্যবহারকারীর দ্বারা পরিষ্কার করা প্রয়োজন, এমনকি যদি স্ক্যান করা ট্যাগটি একই হয়।

A একটি ট্যাগের জন্য স্ক্যান করুন: মডিউলটি মূলত জিজ্ঞাসা করে "কেউ কি সেখানে আছে?" এবং ট্যাগ সাড়া দেয় "আমি আছি"। যদি মডিউলটি দ্রুত প্রতিক্রিয়া না পায় তবে এটি শোনা বন্ধ করে দেয়। এর মানে হল যে আমাদের ট্যাগ না পাওয়া পর্যন্ত মডিউলে বারবার স্ক্যান কমান্ড পাঠাতে হবে।

User ট্যাগ পান ইউজার আইডেন্টিফিকেশন নম্বর (ইউআইডি): ট্যাগ কিছু সীমিত তথ্যের সাথে স্ক্যানের অনুরোধে সাড়া দেবে যেমন ট্যাগের ধরন। এর মানে হল যে এর ইউআইডি পেতে আমাদের অন্য কমান্ড পাঠানোর প্রয়োজন হতে পারে। MIFare Classic 1k ট্যাগের জন্য UID হল চার বাইট। যদি অন্যান্য ট্যাগের জন্য দীর্ঘ হতে পারে কিন্তু এই প্রকল্পটি তাদের সম্বোধন করে না।

· ট্যাগ নির্বাচন করুন (শুধুমাত্র 522): ইউআইডি ব্যবহার করা হয় এমন ট্যাগ নির্বাচন করতে যা ব্যবহারকারী পাঠ্য এবং লেখার জন্য প্রমাণীকরণ করতে চায়। এটি এমন সম্ভাবনার উপর ভিত্তি করে যে অ্যান্টেনা ক্ষেত্রে একাধিক ট্যাগ থাকতে পারে। এটা আমাদের সাধারণ অ্যাপ্লিকেশনের ক্ষেত্রে নয় কিন্তু যেভাবেই হোক আমাদের ট্যাগ নির্বাচন করতে হবে।

The ট্যাগটি প্রমাণীকরণ করুন: যদি আমরা ট্যাগটি পড়তে বা লিখতে চাই তবে এই পদক্ষেপটি প্রয়োজন। যদি আমরা কেবল একটি সাধারণ নিরাপত্তা অ্যাপ্লিকেশনের জন্য ট্যাগের মধ্যে পার্থক্য করতে চাই তবে UID যথেষ্ট। প্রমাণীকরণের জন্য প্রয়োজন যে আমরা ইউআইডি জানি এবং আমরা যে ট্যাগটি অ্যাক্সেস করতে চাই তার ডেটা সেক্টরের ক্রিপ্টো কী জানি। এই প্রজেক্টের জন্য আমরা ডিফল্ট কী দিয়ে আটকে থাকি কিন্তু আমার ফলো-অন প্রজেক্ট কীগুলো পরিবর্তন করে যাতে ট্যাগটি ইলেকট্রনিক ওয়ালেট হিসেবে ব্যবহার করা যায়।

The ট্যাগ পড়ুন বা লিখুন: পড়া সবসময় অনুরোধকৃত ডেটা ব্লকের সব 16 বাইট ফেরত দেয়। লেখার জন্য প্রয়োজন যে সমস্ত 16 বাইট একই সময়ে লেখা উচিত। আপনি যদি একই ডেটা সেক্টরে অন্য ব্লক পড়তে বা লিখতে চান তবে ট্যাগটি আবার প্রমাণীকরণের প্রয়োজন নেই। যদি আপনি একটি ভিন্ন ডাটা সেক্টরে একটি ব্লক পড়তে বা লিখতে চান তাহলে সেই সেক্টরের কী ব্যবহার করে ট্যাগটি আবার প্রমাণীকরণ করা প্রয়োজন।

ধাপ 5: MFRC522 মডিউল অ্যাক্সেস সিকোয়েন্স

প্রারম্ভিক রুটিন এই মৌলিক পদক্ষেপগুলি অন্তর্ভুক্ত করে যা আমি দেখেছি বেশিরভাগ অ্যাপ্লিকেশনগুলিতে:

· ডামি ডেটা বাইট পাঠান (পরবর্তী অনুচ্ছেদ দেখুন)

· সফট রিসেট

R RF রিসিভার লাভ সেট করুন (যদি ডিফল্ট ছাড়া অন্য কিছু পছন্দ করা হয়)

AS ASK মডুলেশন শতাংশ 100% সেট করুন

CR সিআরসি গণনার জন্য বীজের মান নির্ধারণ করুন

En অ্যান্টেনা চালু করুন

Firm ফার্মওয়্যার সংস্করণ পান (প্রয়োজন নেই)

কিছু অব্যক্ত কারণে আমার মডিউল ক্ষমতা বাড়ায় এবং মনে করে যে এটি ডেটা বাইট ছাড়াই একটি রাইট কমান্ড পেয়েছে। আমি জানি না এটি আমার মডিউলের সাথে একটি সমস্যা কিনা তবে আমি অন্য কোথাও এর কোন রেফারেন্স দেখিনি। আমি হার্ডওয়্যার এবং সফ্টওয়্যার উভয় রিসেট নিয়ে পরীক্ষা করেছি এবং সমস্যাটিও ঠিক করি নি। আমার সমাধান ছিল মডিউল প্রারম্ভিক রুটিনের শুরুতে "0" (অনির্ধারিত) নিবন্ধনের জন্য একটি ডামি রিড কল যোগ করা। যদি মডিউল এটিকে অজানা রাইট কমান্ডের ডেটা হিসাবে দেখে তবে সেখানে কোনও খারাপ প্রভাব দেখা যাবে না। যদি এটি এটি একটি রিড কমান্ড হিসাবে দেখে, তাহলে কিছু দরকারী হবে না। এটি আমাকে বিরক্ত করে যে আমি সমস্যাটি পুরোপুরি সংজ্ঞায়িত করতে পারি না, বিশেষত এই কারণে যে কেবল মডিউলের হার্ডওয়্যার রিসেট সমস্যাটি সমাধান করে না।

RC522 চিপটি বেশ কয়েকটি রেজিস্টারের সমন্বয়ে গঠিত, যার বেশিরভাগই পড়া এবং লেখা উভয়ই। একটি লেখা সম্পাদন করার জন্য, রেজিস্টার নম্বরটি মডিউলে পাঠানো হয় তার পরে মান লিখতে হয়। একটি রিড করার জন্য, রেজিস্টার নম্বরটিতে 0x80 যোগ করা হয়েছে এবং এটি মডিউলে পাঠানো হয়েছে। একটি রাইট কমান্ডের প্রতিক্রিয়া হল অ্যাক্সেস করা রেজিস্টারের প্রতিধ্বনি। একটি রিড কমান্ডের প্রতিক্রিয়া হল রেজিস্টারের বিষয়বস্তু। কমান্ডটি সঠিকভাবে কার্যকর করা হয়েছে কিনা তা যাচাই করার জন্য সফটওয়্যারটি সেই জ্ঞানের সুবিধা নেয়।

ধাপ 6: PN532 মডিউল অ্যাক্সেস সিকোয়েন্স

স্টার্টআপ রুটিনে এই প্রয়োজনীয় পদক্ষেপগুলি অন্তর্ভুক্ত রয়েছে:

একটি প্রারম্ভিক স্ট্রিং পাঠান: এটি UART ইন্টারফেসের জন্য নির্দিষ্ট। ম্যানুয়ালটিতে বলা হয়েছে যে UART ইন্টারফেসটি ইন্টারফেসে সনাক্ত হওয়া পঞ্চম উঠতি প্রান্তে জেগে উঠবে। এটি 0x55, 0x55, 0x00, 0x00, 0x00, 0x00 পাঠানোর পরামর্শ দেয়। বেশিরভাগ অংশে, কেবল ক্রমবর্ধমান প্রান্তগুলির সাথে পর্যাপ্ত সংখ্যক অক্ষর থাকা দরকার এবং সেগুলি অবশ্যই একটি কমান্ড প্রস্তাবনা (00 00 FF) এর মতো হওয়া উচিত নয়।

The মডিউলটি জাগান: ব্যবহারকারী ম্যানুয়ালটিতে দাফন করা হয়েছে এটি দেখায় যে মডিউলটি "লোভব্যাট" নামক এক ধরণের ঘুমের অবস্থায় শুরু করে। এই অবস্থা থেকে বেরিয়ে আসার জন্য আমাদের একটি "SAMConfiguration" কমান্ড পাঠাতে হবে।

PN532 প্রত্যাশা করে যে একটি সংজ্ঞায়িত বার্তা বিন্যাসে পাঠানো হবে যাতে একটি প্রস্তাবনা, বার্তা এবং একটি পোস্টাম্বল অন্তর্ভুক্ত থাকে। প্রতিক্রিয়া বার্তা একই বিন্যাস অনুসরণ করে। কমান্ড এবং প্রতিক্রিয়া বার্তা উভয়ই একটি TFI (ফ্রেম আইডেন্টিফায়ার) এবং একটি কমান্ড সংস্করণ অন্তর্ভুক্ত করে। কমান্ডটি 0xD4 এর TFI ব্যবহার করে এবং প্রতিক্রিয়া 0xD5 ব্যবহার করে। কমান্ড সংস্করণগুলি পরিবর্তিত হয় তবে প্রতিক্রিয়া সর্বদা কমান্ড সংস্করণ বৃদ্ধি করবে এবং TFI অনুসরণ করে এটি বাইটে ফিরিয়ে দেবে। সেই ধারাবাহিকতা প্রতিক্রিয়া বার্তাগুলিকে সহজেই প্রাসঙ্গিক তথ্যের জন্য স্ক্যান করার অনুমতি দেয়।

প্রতিটি কমান্ড বার্তা (প্রস্তাবনা অনুসরণ করে) বার্তার দৈর্ঘ্য, বার্তার দৈর্ঘ্যের 2 এর পরিপূরক, TFI, কমান্ড, ডেটা, চেকসাম এবং পোস্টাম্বল নিয়ে গঠিত। সফ্টওয়্যারটি পৃথক কমান্ড তৈরি করে এবং তারপর একটি রুটিন কল করে যা চেকসাম গণনা করে এবং পোস্টম্যাবল যুক্ত করে।

প্রতিক্রিয়া জন্য বার্তা বিন্যাস কমান্ড অনুরূপ। একটি সাধারণ প্রতিক্রিয়ার মধ্যে একটি ACK (00 00 FF 00 FF 00) থাকবে এবং তারপরে কমান্ডের নির্দিষ্ট প্রতিক্রিয়া থাকবে। প্রতিটি কমান্ড প্রতিক্রিয়া 00 00 FF এর একটি প্রস্তাবনা দিয়ে শুরু হয়। প্রতিক্রিয়াটিতে D5 এর একটি TFI বাইট থাকা উচিত এবং তারপরে কমান্ড নম্বরটি 1 দ্বারা বৃদ্ধি করা উচিত। 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) থাকতে হবে। ইউআইডি এবং কী ব্যবহার করা হবে একটি নির্দিষ্ট ট্যাগ ডেটা সেক্টরকে পড়ার/লেখার জন্য অনুমোদিত করার জন্য। ট্যাগ ডেটা পড়া/লেখা সবসময় একটি নির্দিষ্ট ডেটা ব্লকের সব 16 বাইটে করা হয়। এর অর্থ হল যে সাধারণ অ্যাপ্লিকেশনটি ডেটা ব্লকটি পড়বে, ডেটাটি পছন্দসই হিসাবে সংশোধন করবে এবং তারপরে ট্যাগে নতুন ডেটা লিখবে।

ধাপ 8: সফটওয়্যার

যখনই PIC UART একটি বাইট ডেটা পায় তখনই ইন্টারাপ্ট হ্যান্ডলার সফটওয়্যার বলা হয়। আমার পূর্ববর্তী কিছু UART প্রজেক্টে আমি শুধু একটি হস্তক্ষেপকারী হ্যান্ডলার ব্যবহার করার পরিবর্তে RX ইন্টারাপ্ট পতাকা পোল করতে পেরেছিলাম। এই সফটওয়্যারের ক্ষেত্রে তা নয়, বিশেষ করে PN532 এর জন্য যা RC522 এর চেয়ে অনেক বেশি বড রেটে যোগাযোগ করে। RC522 এর UART ইন্টারফেস 9600 বড পর্যন্ত সীমাবদ্ধ এবং PN532 এর জন্য ডিফল্ট 115k এবং 1.288M বড হিসাবে উচ্চ হিসাবে সেট করা যেতে পারে। প্রাপ্ত বাইটগুলি একটি বাফার এলাকায় সংরক্ষণ করা হয় এবং সফ্টওয়্যারের মূল অংশ প্রয়োজন অনুযায়ী সেগুলি পুনরুদ্ধার করে।

New_Msg পতাকা নির্দেশ করে যে বাইট প্রাপ্ত হয়েছে এবং বাইট_কাউন্ট নির্দেশ করে যে কতগুলি। আমি সফটওয়্যারে একটি "Disp_Buff" রুটিন অন্তর্ভুক্ত করেছি যা ডিবাগ করার সময় রিসিভ বাফারের বিষয়বস্তু প্রদর্শন করতে বলা যেতে পারে। কিছু রিটার্ন মেসেজ একটি সাধারণ 1602 ডিসপ্লে উপচে পড়বে কিন্তু আমার 2 লাইন এলসিডি দ্বারা 40 অক্ষর আছে যা আমি একটি অনলাইন উদ্বৃত্ত ইলেকট্রনিক্স সাইটে পেয়েছি। "Max_Line" সংজ্ঞা আপনার LCD আকারের জন্য সেট করা যেতে পারে। যদি "Max_Line" পৌঁছে যায়, "Disp_Buff" রুটিন দ্বিতীয় লাইনে লিখে চালিয়ে যায়। আপনার যদি 4-লাইনের এলসিডি থাকে তবে আপনি সেই রুটিনে একটি ছোট কোড যোগ করতে পারেন তিন এবং চার লাইনে যেতে। PN532 এর জন্য একটি পতাকা রয়েছে যা সেট করা যেতে পারে যাতে রুটিনটি সমস্ত প্রাপ্ত বাইটগুলিকে ডাম্প করে বা একটি পঠিত প্রতিক্রিয়া থেকে 16 টি ডেটা বাইট ফেলে দেয়।

রিসিভ বাফার বা বাইট_কাউন্ট সাফ করার দরকার নেই কারণ নতুন_ এমএসজি পতাকা সাফ করার ফলে বাইট_কাউন্ট ইন্টারাপ্ট হ্যান্ডলার দ্বারা ক্লিয়ার হয়ে যাবে এবং সেটাই বাফারে সূচক হিসেবে ব্যবহৃত হয়। New_Msg সাধারণত প্রতিটি কমান্ড স্টেপের আগে ক্লিয়ার হয়ে যায় যাতে সেই কমান্ডের জন্য নির্দিষ্ট ফলাফল সহজেই পাওয়া যায় এবং যাচাই করা যায়। RC522 এর মানে হল যে রিসিভ বাফারে সাধারণত 1 থেকে 4 বাইট থাকে। কিছু ক্ষেত্রে, যেমন ডাটা ব্লক রিডস, রিড_ফিফো কমান্ডটি একাধিকবার জারি করতে হবে যাতে ফিফো থেকে বাইটগুলি রিসিভ বাফারে স্থানান্তরিত হয়। PN532 এর জন্য সমস্ত কমান্ডের ফলাফল রিসিভ বাফারে শেষ হয় তাই প্রয়োজনীয় নির্দিষ্ট বাইটগুলি সনাক্ত করার জন্য একটি স্ক্যান পদ্ধতি সম্পন্ন করা হয়।

সফটওয়্যারের মূল লুপটি একটি ট্যাগের জন্য স্ক্যান করে এবং তারপর পড়ার/লেখার জন্য ট্যাগটি প্রমাণ করে। এখানে অন্তর্ভুক্ত পরীক্ষার সফ্টওয়্যারের জন্য ভ্যারিয়েবল Junk_Num প্রতিবার মূল লুপের মাধ্যমে সংশোধন করা হয় এবং ট্যাগে লেখার সময় ব্যবহৃত হয়। মানগুলি জাঙ্ক_নুমের মান এবং জাঙ্ক_নামের 1 এর পরিপূরকের মধ্যে বিকল্প লেখা। অবশেষে, 16 টি লিখিত মান পড়ে এবং প্রদর্শিত হয়। প্রতিটি মেসেজ পড়ার সময় দেওয়ার জন্য বিলম্বিত রুটিন কল সহ প্রতিটি ধাপের জন্য ডিসপ্লে বার্তা রয়েছে। ত্রুটির বার্তাগুলিও সরবরাহ করা হয় তবে সাধারণত একটি অপারেশনের সময় ট্যাগটি সরানো হলেই এটি হওয়া উচিত।

সফ্টওয়্যার আরম্ভের অংশ হল কোডের একটি বিভাগ যা শুধুমাত্র পাওয়ার আপে কার্যকর করা হয় এবং সফটওয়্যার রিসেট ধরা পড়লে বাদ দেওয়া হয়। ত্রুটি বার্তাগুলি সাধারণত মূল লুপ থেকে বেরিয়ে আসার উপায় হিসাবে একটি সফ্টওয়্যার রিসেট দিয়ে শেষ হয়। রিসেটটি "টিল্ট" রুটিনে ঘটে যা কেবল ওয়াচডগ টাইমারকে সক্ষম করে এবং তারপর সময়সীমার অপেক্ষায় অসীম লুপে চলে যায়।

ধাপ 9: MFRC522 অনন্য সফটওয়্যার

RC522 চিপের জন্য PN532 চিপের চেয়ে কম স্তরের নির্দেশাবলী প্রয়োজন যা ট্যাগের মাধ্যমে যোগাযোগ সম্পন্ন করে। এটি এক ধরণের সমাবেশ ভাষায় প্রোগ্রামিং বনাম "সি" -তে প্রোগ্রামিংয়ের মতো। আরেকটি উল্লেখযোগ্য পার্থক্য হল যে RC522 এর প্রয়োজন যে ট্যাগের সাথে যোগাযোগ একটি FIFO বাফারের মাধ্যমে ফানেল হয়ে যায়। "Writ_FIFO" এবং "Read_FIFO" রুটিনগুলি সেই কাজগুলি পরিচালনা করে। MFRC522 সফ্টওয়্যারটিতে নিম্ন স্তরের অনেক কমান্ডের জন্য একটি বিভাগ অন্তর্ভুক্ত রয়েছে যেখান থেকে প্রধান ফাংশন তৈরি করা হয়েছে।

RC522 এর জন্য ট্যাগ কমান্ড চেকসাম গণনা PN532 এর চেয়ে অনেক আলাদা। FIFO তে ট্যাগ কমান্ড তৈরির পর, চেকসাম গণনা করার জন্য একটি মডিউল কমান্ড পাঠানো হয়। 16-বিট ফলাফল স্বয়ংক্রিয়ভাবে ট্যাগ কমান্ডের সাথে যুক্ত হয় না কিন্তু দুটি 8-বিট রেজিস্টার থেকে পড়ার জন্য উপলব্ধ। চেকসাম গণনা ফিফোতে ডেটা মুছে ফেলে তাই প্রয়োজনীয় ক্রমটি নিম্নরূপ:

FIFO তে কমান্ড তৈরি করুন

A একটি চেকসাম গণনা কমান্ড

The আবার FIFO তে কমান্ড তৈরি করুন

The সিআরসি রেজিস্টার পড়ুন এবং ফিফোতে চেকসাম বাইট লিখুন

Either হয় একটি ট্রান্সসিভ বা প্রমাণীকরণ কমান্ড পাঠান

ট্রান্সসিভ কমান্ড FIFO বাফার প্রেরণ করবে এবং তারপর স্বয়ংক্রিয়ভাবে রিসিভ মোডে স্যুইচ করে ট্যাগ থেকে সাড়া পাওয়ার জন্য অপেক্ষা করবে। ট্রান্সসিভ কমান্ডটি অবশ্যই BitFramingRegister এ StartSend বিট সেটিং দ্বারা অনুসরণ করতে হবে যাতে প্রকৃতপক্ষে ডেটা প্রেরণ করা যায়। প্রমাণীকরণ কমান্ডের সেই প্রয়োজনীয়তা নেই।

সাধারণভাবে, অনলাইনে উপলব্ধ Arduino "C" কোড অ্যাপ্লিকেশনগুলি সঠিক প্রতিক্রিয়াটি সময়মত প্রাপ্ত হয়েছে তা নিশ্চিত করার জন্য বাধা পতাকা নিবন্ধন এবং সময়সীমা নিবন্ধন ব্যবহার করে। আমার মতে যে এই অ-সময় সমালোচনামূলক অ্যাপ্লিকেশন জন্য overkill হয়। পরিবর্তে, আমি প্রতিক্রিয়াটির জন্য অপেক্ষা করার জন্য সংক্ষিপ্ত সফ্টওয়্যার সময়সীমা ব্যবহার করি এবং তারপরে যাচাই করি যে এটি সঠিক। Mifare ট্যাগের জন্য ম্যানুয়াল বিভিন্ন লেনদেনের সময় এবং সময় প্রত্যাশিত বাইট প্রাপ্তির জন্য সময় অনুমোদিত। এই সময় বিলম্বগুলি নিম্ন-স্তরের কমান্ড সাবরুটিনে তৈরি করা হয়।

ধাপ 10: PN532 অনন্য সফটওয়্যার

মডিউলটি আরম্ভ করার পরে, ট্যাগটি সন্ধান এবং প্রমাণীকরণের জন্য প্রয়োজনীয় পদক্ষেপগুলি প্রয়োজনীয় ডেটা অনুসারে উপযুক্ত কমান্ড লিখে সম্পন্ন হয়। স্ক্যান কমান্ডটি ইউআইডি ফেরত দেয় যা পরে প্রমাণীকরণের জন্য ব্যবহৃত হয়। তারপরে, পাঠানো এবং লেখা ট্যাগ পাঠানো বা ঠিকানা ডেটা ব্লকের জন্য 16-বাইট ফেরত।

ইনিশিয়ালাইজ সিকোয়েন্সটি আগে বিস্তারিত ছিল এবং একই সফটওয়্যার রুটিন "লোভব্যাট" অবস্থা থেকে মডিউলটি বের করার জন্য SAMConfiguration কমান্ডও পাঠায়। স্ক্যান, প্রমাণীকরণ, পড়ুন/লিখুন ট্যাগের মতো অন্যান্য মৌলিক কমান্ডগুলি প্রযোজ্য রুটিনে ক্রমানুসারে তৈরি করা হয়েছে। চেকসাম গণনা করা হয় শুধু কমান্ড বাইট যোগ করে, একটি পরিপূরক করে, এবং তারপর 1 যোগ করে এটিকে 2 এর পরিপূরক করে তোলে। 8-বিট ফলাফল পোস্টাম্বলের ঠিক আগে কমান্ড স্ট্রিং এর সাথে যুক্ত হয়।

RC522 এর মত কোন FIFO নেই তাই সম্পূর্ণ প্রতিক্রিয়া বার্তা স্বয়ংক্রিয়ভাবে প্রাপ্ত হয়। "Find_Response" রুটিন TFI (0xD5) এর জন্য প্রাপ্ত ডাটা বাফার স্ক্যান করে। প্রত্যাশিত বার্তাগুলি কী হওয়া উচিত তা জানার রুটিন সুবিধা নেয় এবং সাধারণ ACK প্রতিক্রিয়াগুলি উপেক্ষা করে যা ডেটা অন্তর্ভুক্ত করে না। একবার TFI পাওয়া গেলে, কাঙ্ক্ষিত প্রতিক্রিয়াগুলি এটি থেকে একটি পরিচিত অফসেট। কমান্ড ইকো এবং কমান্ড স্ট্যাটাস বাইটগুলি পরবর্তী যাচাইকরণের জন্য “Read_Buff” রুটিন দ্বারা সংরক্ষিত হয়।

এই পোস্টের জন্য এটাই। আমার অন্যান্য ইলেকট্রনিক্স প্রকল্পগুলি দেখুন: www.boomerrules.wordpress.com

প্রস্তাবিত: