基于RC522的讀卡器系統(tǒng)設(shè)計
根據(jù)RC522和MIFARE卡問傳送的控制流數(shù)據(jù)的不同,通信過程中可能會出現(xiàn)不同的狀態(tài)。對各種狀態(tài)須作不同處理,這正是軟件系統(tǒng)開發(fā)的難度所在。下面給出RC522命令集中2個最基本命令(Tranceive和MFAuthe-nt)執(zhí)行過程中可能遇到的通信狀態(tài)及處理。這兩個命令分別實現(xiàn)向MIFARE卡發(fā)送/接收數(shù)據(jù)和加密認證功能。實際上,通過它們即可完成對MIFARE卡的所有操作,包括Request、Anticollision、Select、READ、WRITE等。
2.1 RC522命令集的實現(xiàn)
RC522主要的狀態(tài)指示寄存器包括ComIrqReg、Er-rorReg、Status2Reg和FIFOLevelReg等。軟件處理的思路:通過ComIrgReg得到RC522內(nèi)部中斷狀態(tài);由中斷判斷RC522與MIFARE卡的通信流程信息,從而決定是否進行下一流程處理;若中斷指示有錯誤發(fā)生,則需進一步讀取ErrorReg的內(nèi)容,據(jù)此返回錯誤字。
2.1.1 Tranceive命令
Tranceive命令的具體執(zhí)行過程;讀取RC522 FIFO中的所有數(shù)據(jù),經(jīng)基帶編碼和數(shù)字載波調(diào)制后通過通信接口以射頻形式發(fā)送到MIFARE卡;發(fā)送完畢后通過通信接口檢測有無MIFARE卡發(fā)送的射頻信號回應(yīng),并將收到的信號解調(diào)、解碼后放入FIFO中。分析以上Ttanceive命令執(zhí)行過程,可以得到處理該命令的算法流程圖,如圖4所示。
為了處理MIIFARE卡在讀卡器產(chǎn)生的電磁場中激勵后,未完成處理義從激勵場中拿開的情況,軟件中啟用了RC522芯片內(nèi)部的定時器。若超過設(shè)定的時間未得到卡片應(yīng)答,則中止與卡的通信,返回“卡無反應(yīng)”的錯誤信息。
從圖4中可以看出Tranceive命令的核心處理方法:根據(jù)相關(guān)通信狀態(tài)指示寄存器的內(nèi)容返回各種錯誤狀態(tài)字,若有位沖突錯誤,則進一步返回位沖突位置。Tranceive命令不處理面向比特的幀,這種幀只可能在MIFARE卡防沖突循環(huán)中出現(xiàn)。為了保持Tranceive命令對各種MI-FARE卡命令的普適性,該命令只完成幀的發(fā)送和接收,不對幀信息作處理,所有位沖突處理留在函數(shù)外進行。
需要注意的是,Tranceive命令不能自動中止,在任何情況下從該命令返回時必須先執(zhí)行IDLE指令使RC522轉(zhuǎn)入空閑態(tài)。
2.1.2 MFAuthent命令
RC522簡化了與MIFARE卡的加密認證操作,用一個MFAuthent命令代替了原來RC500需要的Authentl和Authent2兩條命令。MFAuthent命令執(zhí)行的最終目的在于開啟RC522的加密認證單元。該指令執(zhí)行成功后,RC522芯片與MIFARE卡間的通信信息將首先加密,然后再通過射頻接口發(fā)送。從本質(zhì)上講,MFAuthent是一條變相的Tranceive命令,其算法流程圖與圖4一致。但RC522芯片內(nèi)部已經(jīng)對通信過程中的各種通信狀態(tài)作了相應(yīng)處理,且該命令執(zhí)行完后自動中止,因此用戶只須檢測定時器狀態(tài)和錯誤寄存器狀態(tài)來判斷執(zhí)行情況。實際上,MFAuthent只可能有一種錯誤狀態(tài)(RC522與MI-FARE卡通信幀格式錯誤),此時該命令不能打開加密認證單元,用戶必須重新執(zhí)行認證操作。
MFAuthent執(zhí)行過程中RC522將依次從FIFO中讀取1字節(jié)認證模式、l字節(jié)要認證的E2PROM塊號、6字節(jié)密鑰和4字節(jié)射頻卡UID號等信息,在命令執(zhí)行前必須保證這12字節(jié)數(shù)據(jù)完整地保存在FIFO中。認證模式有A密鑰認證和B密鑰認證兩種,一般選用A密鑰認證。
一次MFAutllent認證只能保證對MIFARE卡的一個扇區(qū)中的4個數(shù)據(jù)塊解密,若要操作其他扇區(qū)的數(shù)據(jù)用戶還須另外啟動對該扇區(qū)的認證操作。
2.2 MIFARE卡操作指令
對MIFARE卡常用的操作指令包括查詢、防沖突、選卡、讀/寫E2PROM塊等。其中,防沖突指令是14443A協(xié)議的精華部分,實現(xiàn)難度較大。下面將重點介紹防沖突算法的軟件實現(xiàn)方法。
2.2.1 防沖突指令
14443A標準定義的防沖突算法本質(zhì)上是一種基于信道時分復(fù)用的信道復(fù)用方法。在某一時刻若多個射頻卡占用射頻信道與讀卡器通信,則讀卡器將會檢測到比特流的沖突位置;然后重新啟動另一次與射頻卡的通信過程,在過程中將沖突位置上的比特值置為確定值(一般為1)后展開二進制搜索,直到投有沖突錯誤被檢測到為止。MIFARE卡內(nèi)有4字節(jié)的全球惟一序列號UID,而RC522防沖突處理的目的就在于最終確定MIFARE卡的UID。14443A標準的防沖突指令格式如下:
其中:命令代碼“93”代表要處理的射頻卡UID只有4字節(jié);NVM表示此次防沖突命令的UID域中正確的比特數(shù);BCC字節(jié)只有在NVM為70(即UID的4字節(jié)都正確)時才存在,它表示此時整個UID都被識別,防沖突流程結(jié)束。
防沖突算法流程圖如圖5所示。
評論