天天看點

基站晶片RC522的14443A讀卡器設計

摘要介紹基于Philips公司的基站晶片RC522的14443A協定讀卡器系統的設計與實作;着重介紹了RC522應用過程中防沖突處理的實作方法,給出了相應的設計程式;指出對射頻卡進行操作時必須按照卡記憶體儲器的組織形式進行讀/寫,并簡要介紹了RC522應用時通信模拟接口的設定問題。

關鍵詞14443A基站晶片RC522 防沖突PIC單片機

引 言

    14443 TypeA密耦合射頻卡标準廣泛應用在門禁、身份識别和電子錢包等領域,而RC522作為Philips基站晶片産品系列的新成員,不僅相容14443A/MIFARF标準,還具備低電壓(3.3V)、低功耗(休眠電流<lμA)、低成本、小尺寸等優點,适用于智能儀表和手持裝置的資料采集和處理。RC522對外提供多種标準的數字接口(如并行接口、SPI、I2C等),對其的控制通過對晶片内部的4頁64個寄存器進行讀/寫來實作。由于寄存器控制涉及數字接口、防沖突和通信模拟接口等功能子產品,是以,基于RC522的讀卡器的設計難度主要展現在通過軟體與RC522片内寄存器的互動,以實作對RC522與系統主要晶片間以及RC522與14443A射頻卡間通信過程的控制上。

    本文設計的讀卡器系統以PICl6F7x單片機作為主要晶片,選用MIFARE S50卡片,讀卡器與卡片間以106kbps速率通信,同時實作讀卡過程中的防沖突處理和對卡E2PROM塊内容的讀/寫等功能。讀卡器内部設定了Flash存儲器以存放卡資料,在Flash容量滿的情況下可通過讀卡器的以太網口讀出全部資料到管理中心上位機,便于建立對卡資料的綜合管理系統。

1 硬體系統設計

    讀卡器硬體框圖如圖1所示。

單片機PICl6F7x通過SPI總線與RC522和Flash晶片AT45D011相連,同時用簡化的ISA總線連接配接以太網接口晶片C58900,以提供連接配接到區域網路的能力。AT45D0ll存儲容量為lMb,可同時存儲7400多組MIFARE的E2PROM塊和UID号,提供了足夠讀卡器一天内讀取的資訊量的存放容量。對于RC522天線部分的設計,Philips公司有專門的手冊詳細介紹,本文不再贅述。RC522的SPI總線接口有其自身的時序要求。它隻能工作于從模式,最高傳輸速率為10 Mbps,資料與時鐘相位關系滿足“空閑态時鐘為低電平,在時鐘上升沿同步接收和發送資料,在下降沿資料轉換”的限制關系。PICl6F7x系列單片機的片上外設包括1個SSP子產品。該子產品可配置為SPI接口使用,通過相應的寄存器可控制SPI接口的資料傳輸率、資料一時鐘相位天系等通信參數。本文中配置SSP子產品工作于SPI主模式下,時鐘為1/4單片機主頻,接收和發送資料都在時鐘上升沿發生。

    需要注意的是,由于RC522支援的數字接口形式多種多樣,是以晶片在每次複位時都會檢測外部引腳連接配接關系。對于SPI接口,RC522的相關引腳必須按照圖2所示的連接配接關系配置。

除了通用的4條SPI信号線(時鐘線SCK、輸入資料線MOSI、輸出資料線MOSO和選通線NSS)以外,RC522要求額外的2個引腳I2C和EA分别固定接低電平和高電平。這2個引腳不參與SPI總線傳輸,隻起設定RC522數字界面采用SPI接口的作用。另外,片選信号必須保證在寫入資料流期問為低電平,而在無資料流寫入時則為高電平;使用者不得為節省PIC單片機引腳資源而一直将NSS置為低電平。

2 軟體系統設計

    相對于Philips公司生産的其他14443基站晶片(如RC500、RC530等),RC522簡化了内部系統結構,去掉了片内E2PROM。進而大大縮減了晶片指令集。另外,對載波調制電路,發送電路和解調、解碼電路的控制也相應簡化,去掉了校準接收電路I時鐘、Q時鐘、校準發送與接收時鐘相位等繁瑣的操作。一般而言,單片機與RC522的通信流程如圖3所示。

根據RC522和MIFARE卡問傳送的控制流資料的不同,通信過程中可能會出現不同的狀态。對各種狀态須作不同處理,這正是軟體系統開發的難度所在。下面給出RC522指令集中2個最基本指令(Tranceive和MFAuthe-nt)執行過程中可能遇到的通信狀态及處理。這兩個指令分别實作向MIFARE卡發送/接收資料和加密認證功能。實際上,通過它們即可完成對MIFARE卡的所有操作,包括Request、Anticollision、Select、READ、WRITE等。

2.1 RC522指令集的實作

    RC522主要的狀态訓示寄存器包括ComIrqReg、Er-rorReg、Status2Reg和FIFOLevelReg等。軟體處理的思路:通過ComIrgReg得到RC522内部中斷狀态;由中斷判斷RC522與MIFARE卡的通信流程資訊,進而決定是否進行下一流程處理;若中斷訓示有錯誤發生,則需進一步讀取ErrorReg的内容,據此傳回錯誤字。

2.1.1 Tranceive指令

    Tranceive指令的具體執行過程;讀取RC522 FIFO中的所有資料,經基帶編碼和數字載波調制後通過通信接口以射頻形式發送到MIFARE卡;發送完畢後通過通信接口檢測有無MIFARE卡發送的射頻信号回應,并将收到的信号解調、解碼後放入FIFO中。分析以上Ttanceive指令執行過程,可以得到處理該指令的算法流程圖,如圖4所示。

為了處理MIIFARE卡在讀卡器産生的電磁場中激勵後,未完成處理義從激勵場中拿開的情況,軟體中啟用了RC522晶片内部的定時器。若超過設定的時間未得到卡片應答,則中止與卡的通信,傳回“卡無反應”的錯誤資訊。

    從圖4中可以看出Tranceive指令的核心處理方法:根據相關通信狀态訓示寄存器的内容傳回各種錯誤狀态字,若有位沖突錯誤,則進一步傳回位沖突位置。Tranceive指令不處理面向比特的幀,這種幀隻可能在MIFARE卡防沖突循環中出現。為了保持Tranceive指令對各種MI-FARE卡指令的普适性,該指令隻完成幀的發送和接收,不對幀資訊作處理,所有位沖突處理留在函數外進行。

    需要注意的是,Tranceive指令不能自動中止,在任何情況下從該指令傳回時必須先執行IDLE指令使RC522轉入空閑态。

2.1.2 MFAuthent指令

    RC522簡化了與MIFARE卡的加密認證操作,用一個MFAuthent指令代替了原來RC500需要的Authentl和Authent2兩條指令。MFAuthent指令執行的最終目的在于開啟RC522的加密認證單元。該指令執行成功後,RC522晶片與MIFARE卡間的通信資訊将首先加密,然後再通過射頻接口發送。從本質上講,MFAuthent是一條變相的Tranceive指令,其算法流程圖與圖4一緻。但RC522晶片内部已經對通信過程中的各種通信狀态作了相應處理,且該指令執行完後自動中止,是以使用者隻須檢測定時器狀态和錯誤寄存器狀态來判斷執行情況。實際上,MFAuthent隻可能有一種錯誤狀态(RC522與MI-FARE卡通信幀格式錯誤),此時該指令不能打開加密認證單元,使用者必須重新執行認證操作。

    MFAuthent執行過程中RC522将依次從FIFO中讀取1位元組認證模式、l位元組要認證的E2PROM塊号、6位元組密鑰和4位元組射頻卡UID号等資訊,在指令執行前必須保證這12位元組資料完整地儲存在FIFO中。認證模式有A密鑰認證和B密鑰認證兩種,一般選用A密鑰認證。

    一次MFAutllent認證隻能保證對MIFARE卡的一個扇區中的4個資料塊解密,若要操作其他扇區的資料使用者還須另外啟動對該扇區的認證操作。

2.2 MIFARE卡操作指令

    對MIFARE卡常用的操作指令包括查詢、防沖突、選卡、讀/寫E2PROM塊等。其中,防沖突指令是14443A協定的精華部分,實作難度較大。下面将重點介紹防沖突算法的軟體實作方法。

2.2.1 防沖突指令

    14443A标準定義的防沖突算法本質上是一種基于信道時分複用的信道複用方法。在某一時刻若多個射頻卡占用射頻信道與讀卡器通信,則讀卡器将會檢測到比特流的沖突位置;然後重新啟動另一次與射頻卡的通信過程,在過程中将沖突位置上的比特值置為确定值(一般為1)後展開二進制搜尋,直到投有沖突錯誤被檢測到為止。MIFARE卡内有4位元組的全球惟一序列号UID,而RC522防沖突處理的目的就在于最終确定MIFARE卡的UID。14443A标準的防沖突指令格式如下:

基站晶片RC522的14443A讀卡器設計

    其中:指令代碼“93”代表要處理的射頻卡UID隻有4位元組;NVM表示此次防沖突指令的UID域中正确的比特數;BCC位元組隻有在NVM為70(即UID的4位元組都正确)時才存在,它表示此時整個UID都被識别,防沖突流程結束。

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

NVM初始值為20,表示該指令隻含有2個位元組,即“93+20”,不含UID資料,MIFARE卡須傳回全部UID位元組作為響應。若傳回的UID資料有位沖突的情況發生,則根據沖突位置更新NVM值。可知在搜尋循環中,随着UID已知比特數的加入,NVM不斷增加,直到70為止。它表示除了“93+70”兩個指令位元組外,還有UID0~UID3和BCC 5個UID資料位元組。此時指令位元組共有7個,防沖突指令轉變為卡片選擇指令。

    防沖突流程中若遇到須發送和接收面向比特的幀的情況,則必須預先設定通信控制寄存器BitFramingReg。該寄存器可指明發送幀中最後一個位元組和接收幀第一個位元組中不完整的比特的位數。

2.2.2 讀卡和寫卡指令

    14443A協定中并沒有具體規定對射頻卡的讀寫操作方式,故對每種卡的讀寫操作都必須考慮該卡的存儲區域組織形式和應答形式。MIFARE卡内部存儲器是由E2PROM組成的,共劃分為16個扇區,每個扇區4個塊,每塊16位元組。對E2PROM的讀寫都以塊為機關進行,即每次讀/寫16位元組。

    以寫卡指令為例,MIFARE卡要求有兩步握手,指令格式分别如下所述。

    Setp A:查詢塊狀态。

基站晶片RC522的14443A讀卡器設計

    若塊準備好,則MIFARE卡傳回4比特應答。若值為1010,則可進行下一步操作;若值非1010,則表示塊未準備好,必須等待直至塊準備好為止。

    Step B:寫資料。

基站晶片RC522的14443A讀卡器設計

    若寫入成功,則MIFARE卡傳回4比特應答,值仍為1010;若非lOl0,則表示寫入失敗。

    讀卡指令格式如下:

基站晶片RC522的14443A讀卡器設計

    若執行成功,則MIFARE卡傳回18位元組應答比特。需要注意的是,其中隻有16位元組是讀取的塊資料,另外2個位元組為填充位元組。若位元組數不為18,則可判斷讀卡操作錯誤。

    MIFARE卡資料加密時以扇區為機關,一次加密認證僅能操作一個扇區的資料。這為使用者實作“一卡通”功能提供了便利,使用者可在不同的扇區内采用不同加密方式互不幹擾地存放各種目的應用資料。實際生活中常見的一種應用是電子錢包,對卡的寫操作須按照一定的格式進行。一個塊的資料組成如下:

基站晶片RC522的14443A讀卡器設計

    注意:address值無意義,但value值寫入時必須在4~7位元組中存入取反值。

2.3 讀卡器總體軟體設計

    讀卡器的軟體設計思路是利用RC522的Tranceive指令作為标準函數,通過調用此函數實作MIFARE卡操作指令。MIFARE卡的操作流程如圖6所示,其要點是将操作完成的卡轉入休眠态,遞減可能發生沖突的卡片數目直至所有卡片操作完畢,此時防沖突函數無卡片應答。

RC522晶片在每次使用前都必須複位,除了在複位引腳NRSTPD輸入從低電平至高電平的跳變沿外,還必須向RC522的指令寄存器CommandReg寫人軟複位指令代碼0x0I?進行軟複位。在利用Rc522操作MIF’RAE卡之前,使用者必須正确設定晶片模拟部分的工作狀态。依筆者經驗,一般情況下RC522調制、解調方式采用預設設定即可;在106 kbps通信速率下可正常使用,但必須保證天線驅動接口打開,可以通過設定Tx—controlReg寄存器實作。另外,由于14443A協定采用調制深度為100}《的ASK調制,這一點與預設設定不同,是以必須相應設定TxASKRc毽來實作該種調制方式。

    RC522的通信參數設定很複雜,可以調控調制相位、調制位寬、射頻信号檢測強度、發送/接收速度等設定。在硬體調試過程中,使用者可根據實際情況選用适合自身使用的設定形式。

結語

    本文設計的讀卡器在106 kbps通信速率下讀卡距離達50 mm,可以實作考勤、電子錢包功能;整個讀卡器采用低功耗元件,可以作為一個網絡終端、以電池作後備電源可靠地工作。對于Rc522的應用,防沖突和通信接口的設定是重點。不同的射頻卡協定,防沖突流程各不相同,通信接口也會有差異,但修改Rc522的相關設定即可使實體接口滿足協定要求。對于防沖突處理,Rc522{支援基于比特沖突檢測的處理方式,不可處理類似144。13B的ALOHA時隙方式。(針對PIC16F7x開發的部分源程式見本刊網站www.mesnet.com.cn——編者注)

繼續閱讀