在C51單片機上對讀寫卡芯片MFRC522編程_第1頁
在C51單片機上對讀寫卡芯片MFRC522編程_第2頁
在C51單片機上對讀寫卡芯片MFRC522編程_第3頁
在C51單片機上對讀寫卡芯片MFRC522編程_第4頁
在C51單片機上對讀寫卡芯片MFRC522編程_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 在C51單片機上對讀寫卡芯片MFRC522編程1 概述在整個的射頻識別系統(tǒng)中。讀寫卡模塊負(fù)責(zé)建立單片機與電子標(biāo)簽之間的通信,起著非常重要的作用。而整個讀寫卡模塊的核心,就是讀寫卡芯片MFRC522MFRC522 是NXP 公司專為各種計量檢測設(shè)備而設(shè)計、推出的一款低成本、低功耗的非接觸式讀寫卡芯片。該芯片應(yīng)用于 13.56MHz 非接觸通信,應(yīng)用了較為先進(jìn)的調(diào)制和解調(diào)概念,集成了眾多的通信方式和協(xié)議,其內(nèi)部強大的電路可直接驅(qū)動天線無需其他外接電路,通過其獨特的加密算法,更使其具備可較強的安全性。作為一款較為成功的讀寫卡芯片,MFRC522與主機間的通信采用的是連線較少的串行通信,而且可根據(jù)不

2、同的用戶需求,從 SPI、I2C、串行 UART三種總線模式中選擇,這樣的設(shè)計有利于減少連線數(shù)量,縮小 PCB 板體積,降低成本。目前MFRC522在很多的領(lǐng)域都得到了廣泛應(yīng)用,尤其適用于低成本、小尺寸、低功耗和單電源的非接觸式通信的應(yīng)用場合,是智能儀表、板上單元、便攜式手持設(shè)備的極佳選擇。 目前,全國各大城市的公共交通終端以及非接觸式公用電話應(yīng)用的正是MFRC5222 特性1. 高度集成的模擬電路模塊,應(yīng)用新概念完成調(diào)制和解調(diào)。2. 支持ISO 14443A與MIFARE通信協(xié)議3. 驅(qū)動優(yōu)化,采用少量外部器件就能輸出驅(qū)動級到天線4. 支持MIFARE的加密算法5. 可自由選擇多樣的主機接口

3、:10Mbit/s的SPI接口 I2C接口,快速傳輸模式的速率為400kbit/s,高速模式的速率為3400kbit/s串行UART,傳輸速率高達(dá)1228.8kbit/s,幀取決于RS232接口,電壓電平取決于提供的管腳電壓6. 靈活的中斷模式7. 64字節(jié)的發(fā)送接收緩沖區(qū)8. 具備軟件掉電、硬件掉電和發(fā)送器掉電三種低功耗模式,能夠通過關(guān)閉相應(yīng)的模塊或驅(qū)動器達(dá)到節(jié)電的目的。9. 2.53.3V的低電源電壓,低功耗設(shè)計10. 內(nèi)部振蕩器,鏈接27.12HZ的晶體11可編程定時器 12自由編程的I/O管腳13內(nèi)置溫度傳感器,當(dāng)芯片溫度過高時會自動停止射頻信號的發(fā)射14. 體積小,僅有5mm5mm0

4、.85mm3 系統(tǒng)結(jié)構(gòu)MFRC522與MCU通過串口進(jìn)行數(shù)據(jù)交換,其支持3種微控制器接口類型:SPI、I2C以及串行UART。且MFRC522 具備接口復(fù)位功能,能夠自動檢測當(dāng)前執(zhí)行了上電復(fù)位或硬復(fù)位的微控制器的接口類型。 MFRC522的數(shù)據(jù)處理模塊負(fù)責(zé)執(zhí)行數(shù)據(jù)的并行與串行之間的轉(zhuǎn)換和奇偶校驗,并且集成了多種協(xié)議,支持 ISO14443A 的所有層。狀態(tài)和控制模塊通過對器件進(jìn)行配置來達(dá)到適應(yīng)環(huán)境和外部影響的目的,從而使芯片性能達(dá)到最佳狀態(tài)。 CRYPTO1 流密碼單元是保障MFRC522通信穩(wěn)定、安全的關(guān)鍵,當(dāng)芯片與MIFARE電子標(biāo)簽建立通信時,高速CRYPTO1 流密碼單元和非易失性密匙

5、存儲器將完成密匙的校驗。 模擬電路中包含了一個功能強大的驅(qū)動部分,負(fù)責(zé)信號的發(fā)送、檢測合接收。4 引腳配置 作者利用Protel繪制的原理圖:如上圖所示,MFRC522芯片為 32 腳 HVQFN 封裝。器件使用了 3 個獨立的電源以實現(xiàn)在電磁兼容方面的要求。天線 MFRC522芯片通過TX1和TX2這兩個管腳向外輸出13.56MHz 的能量載波來驅(qū)動天線;當(dāng)電子標(biāo)簽收到天線發(fā)出的激勵信號后,就會發(fā)射出響應(yīng)信號,天線接收到響應(yīng)信號就會通過天線的外部電路將其送給RX管腳進(jìn)行處理。名 稱類 型功 能TX1, TX2輸出緩沖天線驅(qū)動器WMID模擬參考電壓RX輸入模擬天線輸入信號此外,為了確保驅(qū)動模塊

6、的正常工作,MF RC522設(shè)計了單獨電源專為驅(qū)動部分供電。 名 稱 類 型功 能TVDD 電源發(fā)送器電源電壓TVSS電源 發(fā)送器電源地模擬電源MFRC522 的模擬部分使用單獨電源進(jìn)行供電。 名 稱 類 型功 能AVDD電源模擬部分電源電壓AVSS 電源模擬部分電源地 數(shù)字電源MFRC522 數(shù)字部分使用單獨電源進(jìn)行供電。 名 稱類 型功 能 DVDD電源數(shù)字部分電源電壓 DVSS電源數(shù)字部分電源地 振蕩器頻率為27.12MHz 的晶振通過一段緩沖區(qū)被連接到OSCIN管腳和 OSCOUT管腳。如果開發(fā)者需要采用外部晶振作為時鐘,可從 OSCIN 引入外部時鐘信號。 名稱類型功能OSCIN輸入

7、振蕩器緩沖輸入OSCOUT輸出振蕩器緩沖輸出電子標(biāo)簽接口MFRC522 為 MIFARE®有源天線的設(shè)計提供了相應(yīng)的支持。通過SIGIN 和SIGOUT就可以對MIFARE的信號進(jìn)行處理。名稱類型功能 SIGIN帶施密特觸發(fā)器的輸入MIFARE 接口輸入SIGOUT輸出MIFARE 接口輸出AUX1/2輸出輔助輸出:用于測試 串行接口名稱類型功能D1 D7I/O不同接口的數(shù)據(jù)線 (測試腳、I2C、SPI、UART ) SDAI/O串行數(shù)據(jù)線I2C輸入I2C使能EA輸入地址:提供I2C的地址 由于本次設(shè)計中MFRC522與MCU之間最終選擇了SPI接口,在此特將各引腳在SPI接口模式下

8、的定義列出:引腳名稱SPI 方式 SDANSSI2CLEAHD7MISOD6MOSID5SCK5 MFRC522的功能實現(xiàn)為了通過編程實現(xiàn)MFRC522的讀寫卡功能,我們的第一步就是把要用的命令字和地址進(jìn)行定義。我們通過查找芯片手冊,得到詳盡的MFRC522命令字、MifareOne卡片命令字以及MFRC522各寄存器的功能與定義。接下來,打開Keil uVision4并在工程中添加rc522.h文件,用這個文件定義所有射頻識別過程中可能用到的命令字與地址:通過上圖大家可以看到,整個522.h文件中基本全都是#define 我們只需要將芯片手冊中的信息仔細(xì)錄入,并寫好注釋。而且,為了便于管理,

9、rc522.h里的語句被我分成了四類,分別是:MFRC522命令字 MifareOne卡片命令字 MFRC522寄存器 MF522通訊錯誤的處理代碼接下來,我們就要開始編程實現(xiàn)MFRC522的一些具體功能了。在工程中新建rc522.c文件,在該文件中編寫MFRC5222讀寫卡過程中需要的指令。開始 RC522完整的讀寫卡流程框圖:端口初始化RC522復(fù)位 尋卡N是否有卡Y防沖撞,選卡N能否通過密碼驗證 YNY扇區(qū)改變?讀卡或?qū)懣ǜ鶕?jù)上面的讀寫卡流程框圖,我們按照每個框的內(nèi)容編寫與之相對應(yīng)的程序。尋卡請求讀寫卡模塊向外發(fā)射激勵信號,一旦有Mifare卡進(jìn)入讀寫器天線工作范圍,讀寫模塊發(fā)送命令。M

10、ifare卡收到命令后會將卡上的儲存單元中的卡片類型號(TagType)信息即2個字節(jié)數(shù)據(jù)發(fā)給讀寫器。從而建立Mifare卡與RC522通信的第一步。尋卡請求函數(shù):char PcdRequest(unsigned char req_code,unsigned char *pTagType)說明:req_codeIN:尋卡方式 0x52 = 尋感應(yīng)區(qū)內(nèi)所有符合14443A標(biāo)準(zhǔn)的卡 0x26 = 尋未進(jìn)入休眠狀態(tài)的卡 pTagTypeOUT:卡片類型代碼 0x4400 = Mifare_UltraLight 0x0400 = Mifare_One(S50) 0x0200 = Mifare_One(

11、S70) 0x0800 = Mifare_Pro(X) 0x4403 = Mifare_DESFire操作成功返回值為0 即完成整個的尋卡請求。防沖撞+選定Mifare卡由于RC522在同一時間內(nèi)只能與一個Mifare卡進(jìn)行通信,因此在完成尋卡請求之后,為了防止有多個Mifare卡同時處于讀寫卡模塊天線工作范圍而造成沖撞,需進(jìn)行防沖撞操作,即讀寫卡模塊與一張Mifare卡建立聯(lián)絡(luò),取得其全球唯一的序列號。防沖撞函數(shù):char PcdAnticoll(unsigned char *pSnr)說明: pSnrOUT:用于卡片序列號,4字節(jié)操作成功時函數(shù)返回值為0.在獲得Mifare卡的序列號之后,

12、我們需要做的就是對指定的序列號的Mifare卡進(jìn)行選定,只有被選中的卡才能與RC522建立進(jìn)一步的通信,其它的Mifare卡將全部回到初始狀態(tài)。選定Mifar卡函數(shù):char PcdSelect(unsigned char *pSnr)說明:pSnrIN:之前防沖撞操作中獲得的Mifare卡序列號,4字節(jié)操作成功時函數(shù)返回值為0.驗證Mifare密碼為了訪問Mifare卡中的某個扇區(qū)里存放的數(shù)據(jù),必須進(jìn)行密碼的驗證。用戶首先要通過編程將已經(jīng)設(shè)定好的密鑰存入RC522內(nèi)部的密鑰存儲區(qū)中,然后再比對Mifare卡中存放的密鑰與RC522密鑰存儲區(qū)中的密鑰是否相同,只有確認(rèn)二者相同之后才可以對當(dāng)前M

13、ifare卡的這個扇區(qū)進(jìn)行下一步操作。密碼驗證函數(shù):char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)說明:auth_modeIN: 密碼驗證模式 0x60 = 驗證A密鑰 0x61 = 驗證B密鑰 addrIN:塊地址 pKeyIN:密碼 pSnrIN:卡片序列號,4字節(jié)操作正確時返回 0.讀操作完成了密碼認(rèn)證,我們就可以從Mifare卡中的扇區(qū)中讀出數(shù)據(jù),每次讀出數(shù)據(jù)的大小為16字節(jié)。讀操作函數(shù):char PcdRead(unsigned

14、char addr,unsigned char *pData)說明:addrIN:塊地址,取值范圍063pDataOUT:從Mifare卡中讀出的數(shù)據(jù),16字節(jié)操作成功返回0.本次設(shè)計中使用的程序:void ctrlprocess(void) unsigned char ii; char status; status=PcdRequest(PICC_REQIDL,&RevBuffer0);/尋天線區(qū)內(nèi)未進(jìn)入休眠狀態(tài)的卡,返回卡片類型 2字節(jié) if(status!=MI_OK) return; status=PcdAnticoll(&RevBuffer2);/防沖撞,返回卡的序列

15、號, 4字節(jié)的序列號被存放在RevBuffer2中 if(status!=MI_OK) return; memcpy(MLastSelectedSnr,&RevBuffer2,4);/將RevBuffer2中存放的4字節(jié)的序列號復(fù)制到MLastSelectedSnr變量中存儲for(ii=0;ii<4;ii+) Show816(0,5+2*ii,(MLastSelectedSnrii>>4)&0x0f); Show816(0,6+2*ii,MLastSelectedSnrii&0x0f); /將4個字節(jié)序列號分別存放到MLastSelectedSnr0

16、到MLastSelectedSnr3,方便后續(xù)的顯示與發(fā)送2 Mifare One卡 Mifare卡的激勵首先,通信系統(tǒng)中的讀卡器始終都在通過天線向周圍發(fā)射一組頻率固定的電磁波,這組電磁波即激勵信號。接下來,一旦非接觸式Mifare卡進(jìn)入讀寫器工作范圍內(nèi),即會被讀寫器的激勵限號信號所激勵。受到激勵信號的影響,Mifare卡內(nèi)部的諧振電路就會產(chǎn)生共振,從而使卡的內(nèi)部電容中內(nèi)產(chǎn)生了電荷。而在這個電容的另一端,我們通過一個單向?qū)ǖ碾娮颖?,就可以將電容?nèi)儲存的電荷轉(zhuǎn)移到另一個電容內(nèi)儲存。然后,整個共振和電荷轉(zhuǎn)移的過程周而復(fù)始,當(dāng)電容中存儲的電壓達(dá)到2 V時,此電容就成為Mifare卡的電源,并開始為

17、卡內(nèi)的其他電路提供工作電壓,從而幫助Mifare卡完成應(yīng)答、存儲、通信等一系列功能。 ATR模塊的啟動:Answer To Request(“應(yīng)答讀寫器發(fā)出的請求”)當(dāng)非接觸式Mifare卡進(jìn)入讀寫器的工作范圍內(nèi)時,我們就可以控制讀寫器向Mifare卡發(fā)出Request all(或Request std)指令,收到指令后的Mifare卡將啟動ATR模塊。這時,Mifare卡的內(nèi)部芯片就會將卡的類型號(TagType)傳送給讀寫器,從而建立Mifare卡與讀寫器的聯(lián)絡(luò)。注意,如果不進(jìn)行ATR的啟動,讀寫器對卡的進(jìn)一步操作(讀/寫操作等)將不會進(jìn)行。所以,我們可以將ATR啟動理解為Mifare卡與

18、讀寫器之間通信的第一步。 AntiCollision模塊:Mifare卡防沖突 當(dāng)有多張Mifare卡處在讀寫器的天線工作范圍內(nèi)時,AntiCollision模塊,即防沖突功能將被啟動。這時,讀寫器首先將逐一地與每一張Mifare卡進(jìn)行通信,從而讀取每一張Mifare卡序列號(Serial Number)。由于每一張Mifare卡都的序列號都是獨一無二的,因此我們就可以借助讀寫器中的AntiCollision防重疊模塊以及Mifare卡上的防重疊模塊,通過Mifare卡唯一的序列號來選定多張Mifare卡中的一張。被選中的卡就可以暢通無阻地與讀寫器進(jìn)行數(shù)據(jù)交換,而那些未被選中的卡則處于待命狀態(tài),準(zhǔn)備隨時與讀寫器進(jìn)行通信聯(lián)絡(luò)。 Select Application 模塊:選中并鎖定Mifare卡片當(dāng)Mifare卡與讀寫器完成了上面的兩個步驟之后,若讀寫器要想對卡進(jìn)行讀/寫操作,還須對已經(jīng)完成了ATR啟動的Mifare卡進(jìn)行“Select”操作,從而使卡真正地被選中。被選中并鎖定的Mifare卡會將卡片上存儲的“Size” 字節(jié)傳送給讀寫器。只有當(dāng)讀寫器收

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論