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

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

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

تگ ماژول دارای یک حافظه 1KB یا 1024b است. ماژول با فرکانس استاندارد 13.56MHz کار می‌کند و بنابراین یک ماژول فرکانس بالا با دامنه کاری متوسط است. با استفاده از این ماژول می‌توانید اطلاعات تگ را خوانده یا اطلاعات مورد نظرتان را بر روی آن بنویسید. این ماژول از پروتکل‌های SPI و I2C و UART پشتیبانی میکند . ما اینجا از رابط سریال SPI با قابلیت انتقال دو طرفه دیتا با سرعت 424kb/s استفاده خواهیم کرد.

ویژگی های این ماژول:
ولتاژکاری :3.3V
جریان مصرفی : 21-53mA
جریان مصرفی در حالت : standby حدود 53تا mA53
جریان مصرفی در حالت : sleep کمتر از 03uA
فرکانس کاری :  53.11MHz
فاصله خواندن : 3 تا 13mm

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

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

و نحوه ارتباط آن به 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               3.3V                       Reset pin (3.3V)
VCC               3.3V                       3.3V power

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

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

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

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

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

  • کارت از 16 سکتور تشکیل شده(از 0 تا 15).
  • هر سکتور 4 بلوک دارد.
  • هر بلوک 16 بایت دیتا دارد.

پس داریم :    1024 =  16*16*4

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

تذکر مهم :باید توجه کنید که تنها باید روی بلوک های 0 و1 و2 و4 و5 و6 و8 و…. اطلاعات را ذخیره کنید. و نباید روی بلوک های 3و7و11و… اطلاعات را ذخیره کرد زیرا این بلوک مخصوص ذخیره کردن کلید های دسترسی می باشد.

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

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

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

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

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

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

کد اول:

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

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

کد دوم :

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

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

 

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

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

 

 

کد سوم:

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

 

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

mehdi sehati

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

مطالب مرتبط

guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
مدیریت سایت : مهدی صحتی