0.png (502.84 KB, 下載次數(shù): 126)
下載附件
2016-10-12 12:45 上傳
學(xué)習(xí)一種模塊,有很多種方法,其中一種方式是先去弄明白怎么使用這個模塊,親自體驗了這個模塊的大體功能之后,再回過頭來了解該模塊的工作原理,再去深層次的研究該模塊。 在這里,著重介紹怎么用程序?qū)崿F(xiàn)RC522模塊的一些功能,而RC522的結(jié)構(gòu),功能等便不再介紹。 這個程序的講解是基于MSP430F149/169單片機(jī)的。
模塊使用的是SPI接口,與單片機(jī)接口如下:
#define RF_LPCTL BIT3 // P2.3 射頻卡休眠控制------RST #define RF_SS BIT7 // p2.7 射頻卡從機(jī)選擇(SS)---SDA #define RF_SCLK BIT6 // p2.6 射頻卡數(shù)據(jù)時鐘輸出(SCLK) #define RF_DATA_OUT BIT5 // p2.5 射頻卡數(shù)據(jù)輸出(MOSI) #define RF_DATA_IN BIT1 // p2.1 射頻模塊輸入(MISO)
要想對模塊內(nèi)部的數(shù)據(jù)塊進(jìn)行讀寫,需要完成4個步驟:尋卡→防沖突→選卡→讀/寫卡; 第一步:尋卡。 status2=PcdRequest(0x52,Temp);////尋卡 參數(shù)Temp為返回的卡類型 if(status2== MI_OK) { tochar(Temp[0]); tochar(Temp[1]);//輸出卡類型 } 其中0x52代表尋天線區(qū)內(nèi)全部卡。 卡類型(TagType): 0x4400 =Mifare_UltraLight 0x0400 =Mifare_One(S50) 0x0200 =Mifare_One(S70) 0x0800 =Mifare_Pro(X) 0x4403 =Mifare_DESFire 比如,當(dāng)Temp[0]=04,Temp[1]=00時,卡類型為S50。
第二步:防沖突。 status2= PcdAnticoll(UID); //防沖撞處理,輸出卡片序列號,4字節(jié) if(status2==MI_OK) { PutString0("Card Id is:"); tochar(UID[0]); tochar(UID[1]); tochar(UID[2]); tochar(UID[3]); //輸出卡片序列號 } 第三步:選卡。 status2= PcdSelect(UID); //選擇卡片,輸入卡片序列號,4字節(jié) 第四步:在讀寫卡之前需要先進(jìn)行認(rèn)證。 status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID); 其中四個參數(shù)分別代表:驗證A密鑰+塊地址+扇區(qū)密碼+卡序列號。 然后進(jìn)行寫操作: status2=PcdWrite(1,writeData);//寫數(shù)據(jù),將數(shù)組writeData中的數(shù)寫入到卡中 其中第一個參數(shù) 1 代表寫入的地址為塊1. 或者進(jìn)行讀卡操作: status2 = PcdRead(1, str);//讀卡 其中第一個參數(shù) 1 代表讀的地址為塊1. 讀卡后得到的數(shù)據(jù)存放于數(shù)組str中。
至此,已將RC522的基本操作介紹了一遍,明白了以上這些函數(shù),就可以對卡進(jìn)行一些初步的操作,可以再結(jié)合程序研究一下。 如果需要進(jìn)一步了解RC522的工作原理,可以到網(wǎng)上搜資料,網(wǎng)上有很多的,也可以在下方留言,大家討論討論。
0.png (48.81 KB, 下載次數(shù): 108)
下載附件
2016-10-12 12:45 上傳
|