14443 TypeA密耦合射頻卡標準廣泛應用在門(mén)禁、身份識別和電子錢(qián)包等領(lǐng)域,而RC522作為Philips基站芯片產(chǎn)品系列的新成員,不僅兼容14443A/MIFARF標準,還具備低電壓(3.3V)、低功耗(休眠電流)。 本文設計的讀卡器系統以PICl6F7x單片機作為主控芯片,選用MIFARE S50卡片,讀卡器與卡片間以106kbps速率通信,同時(shí)實(shí)現讀卡過(guò)程中的防沖突處理和對卡E2PROM塊內容的讀/寫(xiě)等功能。讀卡器內部設置了Flash存儲器以存放卡數據,在Flash容量滿(mǎn)的情況下可通過(guò)讀卡器的以太網(wǎng)口讀出全部數據到管理中心上位機,便于建立對卡數據的綜合管理系統。 1 硬件系統設計 讀卡器硬件框圖如圖1所示。 單片機PICl6F7x通過(guò)SPI總線(xiàn)與RC522和Flash芯片AT45D011相連,同時(shí)用簡(jiǎn)化的ISA總線(xiàn)連接以太網(wǎng)接口芯片C58900,以提供連接到局域網(wǎng)的能力。AT45D0ll存儲容量為lMb,可同時(shí)存儲7400多組MIFARE的E2PROM塊和UID號,提供了足夠讀卡器一天內讀取的信息量的存放容量。對于RC522天線(xiàn)部分的設計,Philips公司有專(zhuān)門(mén)的手冊詳細介紹,本文不再贅述。RC522的SPI總線(xiàn)接口有其自身的時(shí)序要求。它只能工作于從模式,最高傳輸速率為10 Mbps,數據與時(shí)鐘相位關(guān)系滿(mǎn)足“空閑態(tài)時(shí)鐘為低電平,在時(shí)鐘上升沿同步接收和發(fā)送數據,在下降沿數據轉換”的約束關(guān)系。PICl6F7x系列單片機的片上外設包括1個(gè)SSP模塊。該模塊可配置為SPI接口使用,通過(guò)相應的寄存器可控制SPI接口的數據傳輸率、數據一時(shí)鐘相位天系等通信參數。本文中配置SSP模塊工作于SPI主模式下,時(shí)鐘為1/4單片機主頻,接收和發(fā)送數據都在時(shí)鐘上升沿發(fā)生。 需要注意的是,由于RC522支持的數字接口形式多種多樣,因此芯片在每次復位時(shí)都會(huì )檢測外部引腳連接關(guān)系。對于SPI接口,RC522的相關(guān)引腳必須按照圖2所示的連接關(guān)系配置。 除了通用的4條SPI信號線(xiàn)(時(shí)鐘線(xiàn)SCK、輸入數據線(xiàn)MOSI、輸出數據線(xiàn)MOSO和選通線(xiàn)NSS)以外,RC522要求額外的2個(gè)引腳I2C和EA分別固定接低電平和高電平。這2個(gè)引腳不參與SPI總線(xiàn)傳輸,只起設定RC522數字界面采用SPI接口的作用。另外,片選信號必須保證在寫(xiě)入數據流期問(wèn)為低電平,而在無(wú)數據流寫(xiě)入時(shí)則為高電平;用戶(hù)不得為節省PIC單片機引腳資源而一直將NSS置為低電平。 2 軟件系統設計 相對于Philips公司生產(chǎn)的其他14443基站芯片(如RC500、RC530等),RC522簡(jiǎn)化了內部系統結構,去掉了片內E2PROM。從而大大縮減了芯片命令集。另外,對載波調制電路,發(fā)送電路和解調、解碼電路的控制也相應簡(jiǎn)化,去掉了校準接收電路I時(shí)鐘、Q時(shí)鐘、校準發(fā)送與接收時(shí)鐘相位等繁瑣的操作。一般而言,單片機與RC522的通信流程如圖3所示。 根據RC522和MIFARE卡問(wèn)傳送的控制流數據的不同,通信過(guò)程中可能會(huì )出現不同的狀態(tài)。對各種狀態(tài)須作不同處理,這正是軟件系統開(kāi)發(fā)的難度所在。下面給出RC522命令集中2個(gè)最基本命令(Tranceive和MFAuthe-nt)執行過(guò)程中可能遇到的通信狀態(tài)及處理。這兩個(gè)命令分別實(shí)現向MIFARE卡發(fā)送/接收數據和加密認證功能。實(shí)際上,通過(guò)它們即可完成對MIFARE卡的所有操作,包括Request、Anticollision、Select、READ、WRITE等。 2.1 RC522命令集的實(shí)現 RC522主要的狀態(tài)指示寄存器包括ComIrqReg、Er-rorReg、Status2Reg和FIFOLevelReg等。軟件處理的思路:通過(guò)ComIrgReg得到RC522內部中斷狀態(tài);由中斷判斷RC522與MIFARE卡的通信流程信息,從而決定是否進(jìn)行下一流程處理;若中斷指示有錯誤發(fā)生,則需進(jìn)一步讀取ErrorReg的內容,據此返回錯誤字。 2.1.1 Tranceive命令 Tranceive命令的具體執行過(guò)程;讀取RC522 FIFO中的所有數據,經(jīng)基帶編碼和數字載波調制后通過(guò)通信接口以射頻形式發(fā)送到MIFARE卡;發(fā)送完畢后通過(guò)通信接口檢測有無(wú)MIFARE卡發(fā)送的射頻信號回應,并將收到的信號解調、解碼后放入FIFO中。分析以上Ttanceive命令執行過(guò)程,可以得到處理該命令的算法流程圖,如圖4所示。 為了處理MIIFARE卡在讀卡器產(chǎn)生的電磁場(chǎng)中激勵后,未完成處理義從激勵場(chǎng)中拿開(kāi)的情況,軟件中啟用了RC522芯片內部的定時(shí)器。若超過(guò)設定的時(shí)間未得到卡片應答,則中止與卡的通信,返回“卡無(wú)反應”的錯誤信息。 從圖4中可以看出Tranceive命令的核心處理方法:根據相關(guān)通信狀態(tài)指示寄存器的內容返回各種錯誤狀態(tài)字,若有位沖突錯誤,則進(jìn)一步返回位沖突位置。Tranceive命令不處理面向比特的幀,這種幀只可能在MIFARE卡防沖突循環(huán)中出現。為了保持Tranceive命令對各種MI-FARE卡命令的普適性,該命令只完成幀的發(fā)送和接收,不對幀信息作處理,所有位沖突處理留在函數外進(jìn)行。 需要注意的是,Tranceive命令不能自動(dòng)中止,在任何情況下從該命令返回時(shí)必須先執行IDLE指令使RC522轉入空閑態(tài)。 2.1.2 MFAuthent命令 RC522簡(jiǎn)化了與MIFARE卡的加密認證操作,用一個(gè)MFAuthent命令代替了原來(lái)RC500需要的Authentl和Authent2兩條命令。MFAuthent命令執行的最終目的在于開(kāi)啟RC522的加密認證單元。該指令執行成功后,RC522芯片與MIFARE卡間的通信信息將首先加密,然后再通過(guò)射頻接口發(fā)送。從本質(zhì)上講,MFAuthent是一條變相的Tranceive命令,其算法流程圖與圖4一致。但RC522芯片內部已經(jīng)對通信過(guò)程中的各種通信狀態(tài)作了相應處理,且該命令執行完后自動(dòng)中止,因此用戶(hù)只須檢測定時(shí)器狀態(tài)和錯誤寄存器狀態(tài)來(lái)判斷執行情況。實(shí)際上,MFAuthent只可能有一種錯誤狀態(tài)(RC522與MI-FARE卡通信幀格式錯誤),此時(shí)該命令不能打開(kāi)加密認證單元,用戶(hù)必須重新執行認證操作。 MFAuthent執行過(guò)程中RC522將依次從FIFO中讀取1字節認證模式、l字節要認證的E2PROM塊號、6字節密鑰和4字節射頻卡UID號等信息,在命令執行前必須保證這12字節數據完整地保存在FIFO中。認證模式有A密鑰認證和B密鑰認證兩種,一般選用A密鑰認證。 一次MFAutllent認證只能保證對MIFARE卡的一個(gè)扇區中的4個(gè)數據塊解密,若要操作其他扇區的數據用戶(hù)還須另外啟動(dòng)對該扇區的認證操作。 2.2 MIFARE卡操作指令 對MIFARE卡常用的操作指令包括查詢(xún)、防沖突、選卡、讀/寫(xiě)E2PROM塊等。其中,防沖突指令是14443A協(xié)議的精華部分,實(shí)現難度較大。下面將重點(diǎn)介紹防沖突算法的軟件實(shí)現方法。 2.2.1 防沖突指令 14443A標準定義的防沖突算法本質(zhì)上是一種基于信道時(shí)分復用的信道復用方法。在某一時(shí)刻若多個(gè)射頻卡占用射頻信道與讀卡器通信,則讀卡器將會(huì )檢測到比特流的沖突位置;然后重新啟動(dòng)另一次與射頻卡的通信過(guò)程,在過(guò)程中將沖突位置上的比特值置為確定值(一般為1)后展開(kāi)二進(jìn)制搜索,直到投有沖突錯誤被檢測到為止。MIFARE卡內有4字節的全球惟一序列號UID,而RC522防沖突處理的目的就在于最終確定MIFARE卡的UID。14443A標準的防沖突指令格式如下: 其中:命令代碼“93”代表要處理的射頻卡UID只有4字節;NVM表示此次防沖突命令的UID域中正確的比特數;BCC字節只有在NVM為70(即UID的4字節都正確)時(shí)才存在,它表示此時(shí)整個(gè)UID都被識別,防沖突流程結束。 防沖突算法流程圖如圖5所示。 NVM初始值為20,表示該命令只含有2個(gè)字節,即“93+20”,不含UID數據,MIFARE卡須返回全部UID字節作為響應。若返回的UID數據有位沖突的情況發(fā)生,則根據沖突位置更新NVM值?芍谒阉餮h(huán)中,隨著(zhù)UID已知比特數的加入,NVM不斷增加,直到70為止。它表示除了“93+70”兩個(gè)命令字節外,還有UID0~UID3和BCC 5個(gè)UID數據字節。此時(shí)命令字節共有7個(gè),防沖突命令轉變?yōu)榭ㄆx擇命令。 防沖突流程中若遇到須發(fā)送和接收面向比特的幀的情況,則必須預先設置通信控制寄存器BitFramingReg。該寄存器可指明發(fā)送幀中最后一個(gè)字節和接收幀第一個(gè)字節中不完整的比特的位數。 2.2.2 讀卡和寫(xiě)卡指令 14443A協(xié)議中并沒(méi)有具體規定對射頻卡的讀寫(xiě)操作方式,故對每種卡的讀寫(xiě)操作都必須考慮該卡的存儲區域組織形式和應答形式。MIFARE卡內部存儲器是由E2PROM組成的,共劃分為16個(gè)扇區,每個(gè)扇區4個(gè)塊,每塊16字節。對E2PROM的讀寫(xiě)都以塊為單位進(jìn)行,即每次讀/寫(xiě)16字節。 以寫(xiě)卡指令為例,MIFARE卡要求有兩步握手,指令格式分別如下所述。 Setp A:查詢(xún)塊狀態(tài)。 若塊準備好,則MIFARE卡返回4比特應答。若值為1010,則可進(jìn)行下一步操作;若值非1010,則表示塊未準備好,必須等待直至塊準備好為止。 Step B:寫(xiě)數據。 若寫(xiě)入成功,則MIFARE卡返回4比特應答,值仍為1010;若非lOl0,則表示寫(xiě)入失敗。 讀卡指令格式如下: 若執行成功,則MIFARE卡返回18字節應答比特。需要注意的是,其中只有16字節是讀取的塊數據,另外2個(gè)字節為填充字節。若字節數不為18,則可判斷讀卡操作錯誤。 MIFARE卡數據加密時(shí)以扇區為單位,一次加密認證僅能操作一個(gè)扇區的數據。這為用戶(hù)實(shí)現“一卡通”功能提供了便利,用戶(hù)可在不同的扇區內采用不同加密方式互不干擾地存放各種目的應用數據。實(shí)際生活中常見(jiàn)的一種應用是電子錢(qián)包,對卡的寫(xiě)操作須按照一定的格式進(jìn)行。一個(gè)塊的數據組成如下: 注意:address值無(wú)意義,但value值寫(xiě)入時(shí)必須在4~7字節中存入取反值。 2.3 讀卡器總體軟件設計 讀卡器的軟件設計思路是利用RC522的Tranceive命令作為標準函數,通過(guò)調用此函數實(shí)現MIFARE卡操作指令。MIFARE卡的操作流程如圖6所示,其要點(diǎn)是將操作完成的卡轉入休眠態(tài),遞減可能發(fā)生沖突的卡片數目直至所有卡片操作完畢,此時(shí)防沖突函數無(wú)卡片應答。 RC522芯片在每次使用前都必須復位,除了在復位引腳NRSTPD輸入從低電平至高電平的跳變沿外,還必須向RC522的命令寄存器CommandReg寫(xiě)人軟復位命令代碼0x0I?進(jìn)行軟復位。在利用Rc522操作MIF’RAE卡之前,用戶(hù)必須正確設置芯片模擬部分的工作狀態(tài)。依筆者經(jīng)驗,一般情況下RC522調制、解調方式采用默認設置即可;在106 kbps通信速率下可正常使用,但必須保證天線(xiàn)驅動(dòng)接口打開(kāi),可以通過(guò)設置Tx—controlReg寄存器實(shí)現。另外,由于14443A協(xié)議采用調制深度為100}《的ASK調制,這一點(diǎn)與默認設置不同,因此必須相應設置TxASKRc毽來(lái)實(shí)現該種調制方式。 RC522的通信參數設置很復雜,可以調控調制相位、調制位寬、射頻信號檢測強度、發(fā)送/接收速度等設置。在硬件調試過(guò)程中,用戶(hù)可根據實(shí)際情況選用適合自身使用的設置形式。 結語(yǔ) 本文設計的讀卡器在106 kbps通信速率下讀卡距離達50 mm,可以實(shí)現考勤、電子錢(qián)包功能;整個(gè)讀卡器采用低功耗元件,可以作為一個(gè)網(wǎng)絡(luò )終端、以電池作后備電源可靠地工作。對于Rc522的應用,防沖突和通信接口的設置是重點(diǎn)。不同的射頻卡協(xié)議,防沖突流程各不相同,通信接口也會(huì )有差異,但修改Rc522的相關(guān)設置即可使物理接口滿(mǎn)足協(xié)議要求。對于防沖突處理,Rc522{支持基于比特沖突檢測的處理方式,不可處理類(lèi)似144。13B的ALOHA時(shí)隙方式。 |