新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于RC522的讀卡器系統(tǒng)設(shè)計(jì)

基于RC522的讀卡器系統(tǒng)設(shè)計(jì)

作者: 時(shí)間:2010-09-29 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/173194.htm

  根據(jù)和MIFARE卡問傳送的控制流數(shù)據(jù)的不同,通信過程中可能會(huì)出現(xiàn)不同的狀態(tài)。對(duì)各種狀態(tài)須作不同處理,這正是軟件開發(fā)的難度所在。下面給出命令集中2個(gè)最基本命令(Tranceive和MFAuthe-nt)執(zhí)行過程中可能遇到的通信狀態(tài)及處理。這兩個(gè)命令分別實(shí)現(xiàn)向MIFARE卡發(fā)送/接收數(shù)據(jù)和加密認(rèn)證功能。實(shí)際上,通過它們即可完成對(duì)MIFARE卡的所有操作,包括Request、Anticollision、Select、READ、WRITE等。

  2.1 命令集的實(shí)現(xiàn)

  RC522主要的狀態(tài)指示寄存器包括ComIrqReg、Er-rorReg、Status2Reg和FIFOLevelReg等。軟件處理的思路:通過ComIrgReg得到RC522內(nèi)部中斷狀態(tài);由中斷判斷RC522與MIFARE卡的通信流程信息,從而決定是否進(jìn)行下一流程處理;若中斷指示有錯(cuò)誤發(fā)生,則需進(jìn)一步讀取ErrorReg的內(nèi)容,據(jù)此返回錯(cuò)誤字。

  2.1.1 Tranceive命令

  Tranceive命令的具體執(zhí)行過程;讀取RC522 FIFO中的所有數(shù)據(jù),經(jīng)基帶編碼和數(shù)字載波調(diào)制后通過通信接口以射頻形式發(fā)送到MIFARE卡;發(fā)送完畢后通過通信接口檢測(cè)有無MIFARE卡發(fā)送的射頻信號(hào)回應(yīng),并將收到的信號(hào)解調(diào)、解碼后放入FIFO中。分析以上Ttanceive命令執(zhí)行過程,可以得到處理該命令的算法流程圖,如圖4所示。

  

  為了處理MIIFARE卡在產(chǎn)生的電磁場(chǎng)中激勵(lì)后,未完成處理義從激勵(lì)場(chǎng)中拿開的情況,軟件中啟用了RC522芯片內(nèi)部的定時(shí)器。若超過設(shè)定的時(shí)間未得到卡片應(yīng)答,則中止與卡的通信,返回“卡無反應(yīng)”的錯(cuò)誤信息。

  從圖4中可以看出Tranceive命令的核心處理方法:根據(jù)相關(guān)通信狀態(tài)指示寄存器的內(nèi)容返回各種錯(cuò)誤狀態(tài)字,若有位沖突錯(cuò)誤,則進(jìn)一步返回位沖突位置。Tranceive命令不處理面向比特的幀,這種幀只可能在MIFARE卡防沖突循環(huán)中出現(xiàn)。為了保持Tranceive命令對(duì)各種MI-FARE卡命令的普適性,該命令只完成幀的發(fā)送和接收,不對(duì)幀信息作處理,所有位沖突處理留在函數(shù)外進(jìn)行。

  需要注意的是,Tranceive命令不能自動(dòng)中止,在任何情況下從該命令返回時(shí)必須先執(zhí)行IDLE指令使RC522轉(zhuǎn)入空閑態(tài)。

  2.1.2 MFAuthent命令

  RC522簡化了與MIFARE卡的加密認(rèn)證操作,用一個(gè)MFAuthent命令代替了原來RC500需要的Authentl和Authent2兩條命令。MFAuthent命令執(zhí)行的最終目的在于開啟RC522的加密認(rèn)證單元。該指令執(zhí)行成功后,RC522芯片與MIFARE卡間的通信信息將首先加密,然后再通過射頻接口發(fā)送。從本質(zhì)上講,MFAuthent是一條變相的Tranceive命令,其算法流程圖與圖4一致。但RC522芯片內(nèi)部已經(jīng)對(duì)通信過程中的各種通信狀態(tài)作了相應(yīng)處理,且該命令執(zhí)行完后自動(dòng)中止,因此用戶只須檢測(cè)定時(shí)器狀態(tài)和錯(cuò)誤寄存器狀態(tài)來判斷執(zhí)行情況。實(shí)際上,MFAuthent只可能有一種錯(cuò)誤狀態(tài)(RC522與MI-FARE卡通信幀格式錯(cuò)誤),此時(shí)該命令不能打開加密認(rèn)證單元,用戶必須重新執(zhí)行認(rèn)證操作。

  MFAuthent執(zhí)行過程中RC522將依次從FIFO中讀取1字節(jié)認(rèn)證模式、l字節(jié)要認(rèn)證的E2PROM塊號(hào)、6字節(jié)密鑰和4字節(jié)射頻卡UID號(hào)等信息,在命令執(zhí)行前必須保證這12字節(jié)數(shù)據(jù)完整地保存在FIFO中。認(rèn)證模式有A密鑰認(rèn)證和B密鑰認(rèn)證兩種,一般選用A密鑰認(rèn)證。

  一次MFAutllent認(rèn)證只能保證對(duì)MIFARE卡的一個(gè)扇區(qū)中的4個(gè)數(shù)據(jù)塊解密,若要操作其他扇區(qū)的數(shù)據(jù)用戶還須另外啟動(dòng)對(duì)該扇區(qū)的認(rèn)證操作。

  2.2 MIFARE卡操作指令

  對(duì)MIFARE卡常用的操作指令包括查詢、防沖突、選卡、讀/寫E2PROM塊等。其中,防沖突指令是14443A協(xié)議的精華部分,實(shí)現(xiàn)難度較大。下面將重點(diǎn)介紹防沖突算法的軟件實(shí)現(xiàn)方法。

  2.2.1 防沖突指令

  14443A標(biāo)準(zhǔn)定義的防沖突算法本質(zhì)上是一種信道時(shí)分復(fù)用的信道復(fù)用方法。在某一時(shí)刻若多個(gè)射頻卡占用射頻信道與通信,則將會(huì)檢測(cè)到比特流的沖突位置;然后重新啟動(dòng)另一次與射頻卡的通信過程,在過程中將沖突位置上的比特值置為確定值(一般為1)后展開二進(jìn)制搜索,直到投有沖突錯(cuò)誤被檢測(cè)到為止。MIFARE卡內(nèi)有4字節(jié)的全球惟一序列號(hào)UID,而RC522防沖突處理的目的就在于最終確定MIFARE卡的UID。14443A標(biāo)準(zhǔn)的防沖突指令格式如下:

  

  其中:命令代碼“93”代表要處理的射頻卡UID只有4字節(jié);NVM表示此次防沖突命令的UID域中正確的比特?cái)?shù);BCC字節(jié)只有在NVM為70(即UID的4字節(jié)都正確)時(shí)才存在,它表示此時(shí)整個(gè)UID都被識(shí)別,防沖突流程結(jié)束。

  防沖突算法流程圖如圖5所示。

  



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉