<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于RC522的讀卡器系統方案設計

基于RC522的讀卡器系統方案設計

作者: 時(shí)間:2012-02-19 來(lái)源:網(wǎng)絡(luò ) 收藏

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

本文引用地址:http://dyxdggzs.com/article/172055.htm

  2.1 命令集的實(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所示。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>