پروژه کامل راه اندازی ماژول RFID RC522 توسط STM32

با سلام خدمت همه دوستان !

در این پروژه راه اندازی کامل RFID RC522 با قابلیت خواندن و نوشتن و رمز نگاری روی کارت های ۱۳٫۵۶MHz که  اصطلاحا به این کارت ها MIFARE (مایفر ) می گویند، توسط STM32 را خواهیم داشت.

سیستم های RFID بر حسب فرکانس کاریشون به ۳ دسته تقسیم میشن:

  • دسته اول LF یا Low Frequency هستند که رنج فرکانسشون بین ۱۲۵ تا ۱۳۴ KHz هستش. ماکزیمم رنج فاصله ای که پوشش میدن ۱۰cm هستش.این ها از نوع Passive هستن.یعنی غیر فعال، و شما منبع توانی نیاز نیست برای تگ ها تامین کنید.
  • دسته دوم HF یا High Frequency هستند که محدوده فرکانسی تگ، فرکانس ۱۳٫۵۶MHz هستش  و تا فاصله ۳۰cm رو پوشش میدن. و همچنین از نوع Passive هستند. در نوع های Passive تگ هر چقدر بزرگتر باشه برد بیشتری رو پوشش میده. پس هر کدام از موارد بالا امکان پاسخ گرفتن توی بردهای بیشتر رو هم دارن .مثلا HF تا ۲ متر هم جواب داده. اما خیلی به جزئیات طراحی تگ بستگی داره. پروتکل NFC هم از نوع HF استفاده میکنه.
  • دسته سوم UHF یا Ultra High Frequency هستند که محدوده فرکانسی متنوعی رو شامل میشه و به ۲ دسته Active و Passive تقسیم میشه. دسته Active تگ، نیاز به تغذیه دارن و از باتری استفاده میکنند. در فرکانس ۴۳۳ MHz و محدوده بین ۸۵۶ تا ۹۶۰ MHz کار میکنند و فاصله ۵ متر رو راحت پوشش میدن. ماکزیمم محدوده این دسته هم با توجه به تفاوت طراحی های تگ و توان مصرفیشون متنوع هستند .من تا ۳۰ متر رو توی داکیومنت ها دیدم. دسته UHF نوع Passive هم داره، تگ ها تو این دسته با استفاده از انرژی وجود در امواج RF تغذیه میشن. محدوده فرکانسی بین ۸۵۶ تا ۹۶۰ MHz دارن و با ابعاد تگ معمول تا ۱۲ متر هم پوشش میدن. اما همونطور که گفتم اگه ابعاد تگ بزرگ باشه ۳۰ متر هم توی بعضی موارد پوشش داده. بحثی که اینجا مطرح میشه انرژِی و توان موجود در سیگنال RF هستش که نباید برای برد بالای سیستم از مضرات توان بالای RF غافل شد.
  •  دسته دیگر هم که نسبتاً جدید هستش تگ های RFID با فرکانس ۲٫۴۵GHz هستن که دسته SHF یا Super High Frequency نام دارن و فقط از نوع Active هستن و ظاهراً بالای ۱۰۰ متر رو هم پوشش میدن.

لینک توضیحات بیشتر

ما اینجا از دسته دوم استفاده میکنیم ، تگ ماژول دارای یک حافظه ۱KB یا ۱۰۲۴b است. ماژول با فرکانس استاندارد ۱۳٫۵۶MHz کار می‌کند و بنابراین یک ماژول فرکانس بالا با دامنه کاری متوسط است. با استفاده از این ماژول می‌توانید اطلاعات تگ را خوانده یا اطلاعات مورد نظرتان را بر روی آن بنویسید. این ماژول از پروتکل‌های SPI و I2C و UART پشتیبانی میکند . ما اینجا از رابط سریال SPI با قابلیت انتقال دو طرفه دیتا با سرعت ۴۲۴kb/s استفاده خواهیم کرد.

ویژگی های این ماژول:
ولتاژکاری :۳٫۳V
جریان مصرفی : ۲۱-۵۳mA
جریان مصرفی در حالت : standby حدود ۵۳تا mA53
جریان مصرفی در حالت : sleep کمتر از ۰۳uA
فرکانس کاری :  ۵۳٫۱۱MHz
فاصله خواندن : ۳ تا ۱۳mm

نکته : تغذیه این ماژول با ولتاژ ۳٫۳V است. اما پایه‌های سیگنال ماژول تحمل ولتاژ ۵V را دارند.

پین های خروجی ماژول به صورت زیر است :

و نحوه ارتباط آن به spi1 میکرو کنترلر stm32  به صورت زیر است:

 MFRC522      STM32F103         DESCRIPTION
CS(SDA)        PA4 SPI1_NSS       Chip select for SPI
SCK               PA5 SPI1_SCK        Serial Clock for SPI
MOSI             PA7 SPI1_MOSI      Master In Slave Out for SPI
MISO             PA6 SPI1_MISO      Master Out Slave In for SPI
IRQ                –                             Irq
GND              GND                       Ground
RST               ۳٫۳V                       Reset pin (3.3V)
VCC               ۳٫۳V                       ۳٫۳V power

نکته : پایه IRQ ماژول را به منظور فعال شده وقفه در هنگام خواندن UID تگ ها ، به صورت لبه پایین رونده ، فعال می کند.

آموزش ساختار و مشخصات کارت های مایفر و نحوه ذخیره سازی دیتا روی آن

در ابتدا تمامی بلوک های یک کارت خام را میخونم و مشخصات و تعداد بلوک ها و سکتور ها را توضیح میدم :

از دوستان عذرخواهی میکنم عکس ها بی کیفیت هستن اما دیتای خاصی نیست بیشتر ساختار مهمه.

فقط باید نکات زیر رو بدونید:

  • کارت از ۱۶ سکتور تشکیل شده(از ۰ تا ۱۵).
  • هر سکتور ۴ بلوک دارد.
  • هر بلوک ۱۶ بایت دیتا دارد.

پس داریم :    ۱۰۲۴ =  ۱۶*۱۶*۴

نکته مهم : در سکتور ۰ و بلاک ۰ آی دی کارت قرار دارد نمیتوانیم روی ان بنویسیم.

تذکر مهم :باید توجه کنید که تنها باید روی بلوک های ۰ و۱ و۲ و۴ و۵ و۶ و۸ و…. اطلاعات را ذخیره کنید. و نباید روی بلوک های ۳و۷و۱۱و… اطلاعات را ذخیره کرد زیرا این بلوک مخصوص ذخیره کردن کلید های دسترسی می باشد.

شرح دیتای استخراج شد از کارت خام:

همانطور که مشاهده می کنید در ابتدا پارامتر UID که آی دی منحصر به فرد هر تگ است ، نمایش داده شده است. در
حقیقت این آی دی در سکتور ۰ و بلوک ۰ ذخیره می شود.
پارامتر بعدی  SAK یا Acknowledge Select  است که نمایش داده شده است. مقدار این پارامتر برای تگ های مایفر
۵ کیلو بایتی برابر ۳۰ می باشد و برای ۱ کیلو بایتی هم ۸ است. برای کسب اطلاعات بیشتر در مورد این پارامتر AN10833 از شرکت NXP را بخوانید.
پارامتر سوم  PICC Type  یعنی نوع PICC می باشد.  PICC به  Proximity Integrated Circuit Contactless به تگ های RFID بدون تماس اشاره دارد.

نحوه عملکرد کلی برنامه:

به طور کلی ما برای اینکه دیتایی روی کارتی بخوانیم یا بنویسیم در ابتدا باید ID کارت را بخوانیم و آن را درون متغییری بریزیم سپس با استفاده از کلید KEY A  یا KEY B که به صورت پیش فرض ۶ بایت FF  است کارت را باز کنیم و سپس روی بلاک های ان دیتا بریزیم یا بخوانیم

uint8_t keyA[6] = {0xFf, 0xFf, 0xFF, 0xFF, 0xFF, 0xFF, };
uint8_t keyB[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, };

من چندین نمونه کد براتون با STM32F103C8T6 قرار دادم هر کدوم براتون کاربردی بود میتونید تهیه کنید.

کد اول:

رید و رایت روی کارت که توسط STM32 انجام میشود و دیتا و لاگ جهت نمایش به یوزارت ۱ میکرو ارسال می شود و شما میتوانید از طریق یک مبدل USB به سریال لاگ و دیتای کارت رو ببینید.

فیلم عملکرد برنامه اول:

کد دوم :

همان قابلیت خواندن و نوشتن روی کارت است اما این بار قابلیت USB دیوایس میکرو STM32 نیز راه اندازی شده است که میکرو  شما میتوانید با استفاده از شارژر میکرو USB تلفنتون  برد STM32 رو به لبتاب متصل کنید و برد به عنوان یک کیبورد به لبتاب شناسایی میشود اینجا کافیست تا یه نوت پد باز کنید و مکان نما هر جا چشمک بزند دیتا و لاگ برای شما تایپ می شود.از این پروژه در موارد دیگر هم میتوانید استفاده کنید و هر عبارتی را توسط STM32 تایپ کنید صدارا کم و زیاد کنید و …

  • مزیت این روش :نیاز به هیچ نرم افزار  و درایور جانبی جهت نمایش لاگ و دیتا ندارید و میتوانید در هر جا دیتا را ببینید و سریعا توسط سیستم شناسایی می شود چون میکرو یک کیبورد است
  • عیب این روش:برای نمایش لاگ کمی کند است اگر نمایش لاگ را در برنامه خاموش کنید که این قابلیت را قرار دادم و فقط دیتای بلوک ها و ID کارت را بخواهید ببینید هیچ مشکلی وجود ندارد سرعت کافی است.

 

  • منظور از لاگ پرینت لحظه ای عملکرد برنامه است.
  • منظور از دیتا هم ID و مقدار بلوک ها است.

فیلم عملکرد برنامه دوم:

 

 

کد سوم:

در این کد که بسیار حرفه ای تر نوشتم از قابلیت CDC میکرو استفاده کردم و  همچنین توسط دوتابع رید و رایتی که نوشتم میتونید روی کارت بنویسید و بخوانید و تمامی عملیات شناسایی کارت رمز گشایی و خواندن و نوشتن توسط توابع انجام می شود . فقط کافیست به ورودی تابع مقدار بدهید.

قابلیت CDC میکرو چیست: در حالت بخش USB دیوایس میکروکنترلر STM32 به صورت یک پورت کام با بادریت ۱۱۵۲۰۰  به لبتاب معرفی می شود و شما میتوانید توسط یک نرم افزار ترمینال دیتا را به طور کامل از میکرو دریافت و به میکرو ارسال کنید.

تابع کامل نوشتن روی کارت در کد سوم:

bool writing_card(uint8_t block_number,uint8_t* Sectorkey,uint8_t *cardid,uint8_t *block_content)

ورودی اول: شماره بلوک

ورودی دوم: کلید امنیتی که پیش فرض ۶ تا FF است

ورودی سوم: ای دی کارتی که قرار است روی آن بنویسم

ورودی چهارم: یک ارایه ۱۶ کاراکتری یا دیتای بلاک

این تابع در نهایت اگر موفق به نوشتن شود به شما مقدار TRUE را برمیگرداند در غیر این صورت FALSE برمیگرداند.

 

تابع کامل خواندن از کارت در کد سوم:

bool reading_card(uint8_t block_number,uint8_t* Sectorkey,uint8_t *cardid,uint8_t *block_content)

ورودی اول: شماره بلوک

ورودی دوم :کلید امنیتی که پیش فرض ۶ تا FF است

ورودی سوم: ای دی کارتی که قرار است از روی آن بخوانیم

ورودی چهارم :یک ارایه ۱۸ بایتی به ورودی تایع میدهیم تابع دیتا را از بلوک خوانده و درون ارایه می ریزد و در نهایت ما از ارایه استفاده میکنیم.

فیلم عملکرد کد سوم :

جهت تهیه سورس کد ها و برنامه اول و دوم و سوم میتوانید از طریق لینک زیر اقدام کنید

سوالی داشتید میتونید از طریق تلگرام با بنده در ارتباط باشید.

 

اضافه کردن به سبدخرید

mehdi sehati

در این سایت پروژه و آموزش های انواع ماژول ها و میکروکنترلر ها و نحوه ارتباط سخت افزار با نرم افزار (برنامه نویسی اندروید برای گوشی و برنامه نویسی سی شارپ برای کامپیوتر) و برنامه نویسی پایتون و رسبری پای و ماژول های وای فای قرار میگیرد همچنین دوستان برای توضیحات بیشتر و سفارش پروژه میتوانند به آی دی تلگرام بنده مراجعه کنند

مطالب مرتبط

guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x