معرفی ماژول YLMF18 به همراه شرح کامل دستورات کاربردی و نحوه برقراری ارتباط با کارت مایفر
در این مطلب یکی دیگر از ماژول های ریدر و رایتر RFID را معرفی می کنیم در مطالب قبلی نوعی دیگر از این ماژول ها را معرفی نمودیم و نحوه عملکرد آن و برنامه آن با نرم افزار بسکام را توضیح دادیم برای مشاهده معرفی ماژول RC522 به لینک زیر مراجعه نمایید.
در ماژول RC522 از رابط SPI برای برقراری ارتباط با آن استفاده شده است ولی در ماژول YLMF18 برای برقراری ارتباط از رابط سریال استفاده شده است در ادامه به شرح عملکرد دستورات کاربردی این ماژول می پردازیم.
مشخصات کلی این ماژول به شرح زیر می باشد:
با توجه به این موضوع که برای برقراری ارتباط با ماژول دستورات و داده ها از طریق پورت سریال رد و بدل می شوند پس لازم است برای برقراری ارتباط با ماژول یک قالب استاندار را رعایت نماییم با توجه به جدول زیر فرمان ها مطابق این استاندارد ارسال می شوند
در ابتدا برای ارسال فرمان باید دو بایت که به عنوان Head نام گذاری شده اند ارسال شوند این مقادیر که در مبنای هگزا دسیمال می باشند برابر 0xAA , 0xBB هستند و پس از آن دو بایت که با عنوان Length مشخص شده اند طول داده ارسالی به ماژول را مشخص می نمایند. طول بسته ارسالی به ماژول از Node ID آغاز می شود و تا XOR ادامه پیدا می کند. پس از طول بسته شماره آدرس مقصد یا Node ID را در دو بایت قرار می دهیم. پس از Node ID باید کد فرمان مورد نظر یا Function code را در دو بایت ارسال کنیم که لیست دستورات در ادامه توضیح داده می شوند. در ادامه با توجه به فرمان ارسالی اگر نیاز به داده ای بود پس از Function code قرار می دهیم و در انتها تمام بایت ها را از Node ID تا آخرین بایت Data با هم XOR می کنیم و در انتهای بسته ارسالی قرار می دهیم
با توجه به جدول بالا پس از ارسال داده به ماژول در صورتیکه داده به درستی و با باودریت مناسب و قالب استاندارد ارسال شود یک رشته از ماژول در پاسخ به فرمان، ارسال می شود که شرح قالب ارسالی با توجه به جدول بالا به شرح زیر می باشد.
مانند قالب فرمان، پاسخ دریافتی از ماژول با دو بایت Head با مقادیر 0xAA , 0xBB آغاز می شود و پس از آن طول پاسخ نیز در دو بایت مشخص می شود . پس از طول بسته شماره آدرس مقصد یا Node ID در دو بایت می باشد پس از Node ID کد فرمان مورد نظر یا Function code در دو بایت توسط ماژول ارسال می شود .سپس یک بایت به عنوان وضعیت یا Status قرار داد که این بایت بسیار مهم می باشد و فقط در صورتی پاسخ دریافتی اعتبار دارد که این بایت صفر باشد در ادامه اگر داده ای وجود داشت پس از Status قرار می گیرد و در انتها تمام بایت ها از Node ID تا آخرین بایت Data با هم XOR شده و در انتهای پاسخ ماژول قرار می گیرند.
با استفاده از این دستور می توان باودریت ماژول را تغییر داد که با توجه به کد دستور زیربایت باودریت مورد نظر را باید در بایت Baud_para قرار داد. فرمت قالب سریال بصورت 8 بیتی بهمراه یک Stop Bit و بدون Parity می باشد.
Initialize port :0x0101
"aa bb 06 00 00 01 01 "Baud_para" "xor Chk
مقدار باود ریت مورد نظر از جدول زیر قابل محاسبه است.
از این دستور بیشتر برای تست ماژول استفاده می شود که با توجه به توضیحات زیرمی توان قالب مورد نظر را آماده و به ماژول ارسال کرد تا LED وضعیت مورد نظر ما را به خود بگیرد. که این کار را با قرار دادن کد مناسب در بخش Data قابل انجام است
Set Led color : 0x0107
aa bb 06 00 00 00 07 01 03 05 // set Red&green LED on
0 = LED_RED Off , LED_GREEN Off
1 = LED_RED On , LED_GREEN = Off
2 = LED_GREEN Off , LED_RED On
3 = LED_GREEN On , LED_RED On
برای اینکه متوجه شویم که آیا کارت مایفری در محدوده آنتن ماژول وجود دارد این فرمان را به ماژول ارسال می کنیم در صورتیکه کارتی در محدوده ماژول بود مقدار بیت Status صفر می باشد و دو بایت پس از Status نوع کارت بازگشتی نیز مشخص می شود با توجه به جدول زیر می توان تشخیص داد کدام نوع از انواع کارت های مایفر در محدوده ماژول قرار گرفته است.
Mifare Request , 0x0201
aa bb 06 00 00 00 01 02 req_code XOR
req_code=Request mode
req_code=0x52: request all Type A card In filed
req_code=0x26: request idle card
هر کارت مایفر دارای یک ID منحصر بفرد می باشد که طول آن 4 بایت است با استفاده از فرمان زیر می توان این ID را خواند .
Mifare anticollision , 0x0202
Function :card anticollision
Format : aa bb 05 00 00 00 02 02 00
Respond : aa bb 0a 00 52 51 02 02 00 46 ff a6 b8 a4
“46 ff a6 b8”is card serial number
برای انتخاب کارتی که در محدوده ماژول قرار دارد از فرمان زیر استفاده می کنیم که برای اینکار ابتدا باید ID کارت را از طریق Mifare anticollision بدست آورد و سپس آن را در قالب زیر مجددا به کارت ارسال نمود.
Mifare Select 0x0203 :
aa bb 09 00 00 00 03 02 xx xx xx xx XOR
Ninth to twelfth is card serial number 。
Sample : Host to Reader : aa bb 09 00 00 00 03 02 46 ff a6 b8 a6
Respond : aa bb 07 00 52 51 03 02 00 08 0a
با استفاده از این دستور می توان به درون یک بلوک وارد شد که ابتدا باید کارت را انتخاب کرده باشیم و پس از آن با قرار دادن رمز بلوک مورد نظر در قالب زیر وارد بلوک گردیم. رمز پیش فرض بلوک ها برابر FF FF FF FF FF FF می باشد.
Mifare Authentication2 0x0207:
aa bb xx 00 00 00 07 02 Auth_mode Block xx xx xx xx xx xx XOR
Auth_mode= Authenticate mode ,0x60: KEY A ,0x61: KEY B
Block = Authenticate block
Sample :Host to Reader : aa bb 0d 00 00 00 07 02 60 04 ff ff ff ff ff ff 61
Authenticate Block 4 Key A = “FF FF FF FF FF FF”
Respond : aa bb 06 00 52 51 07 02 00 06
پس از وارد شدن به بلوک مورد نظر می توان اطلاعات کارت را خواند یا روی کارت اطلاعات مورد نظر را نوشت . برای خواندن اطلاعات کارت از فرمان زیر استفاده می شود.
Mifare Read 0x0208
Function :Read block
Format :aa bb 06 00 00 00 08 02 Block XOR
Block = which block want read
Sample :Host to Reader : aa bb 06 00 00 00 08 02 04 0e
Respond :aa bb 16 00 52 51 08 02 00 00 00 00 00 00 00 00 00 00 00 00 00 12 34 56 78 01
Tenth to sixteenth byte is Data
پس از وارد شدن به بلوک مورد نظر می توانید داده ای را روی آن بنویسید که برای اینکار از دستور زیر استفاده می شود.
Mifare Write 0x0209
aa bb 16 00 00 00 09 02 Block
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 Da Db Dc Dd De Df XOR
Sample : write data to Block4
Host to Reader
aa bb 16 00 00 00 09 02 04 00 00 00 00 00 00 00 00 00 00 00 00 12 34 78 56 07
Respond: aa bb 06 00 52 51 09 02 00 08
برای برقراری ارتباط با مایفر و خواندن Card Serial Number می بایست پروسه زیر را انجام داد:
برای دیدن آموزش جلسه دوم کلیک کنید.