MFRC522開發筆記


一、了解基本概念

①ISO-14443A協議:( 國際標准化組織:International Organization for Standardization)RFID協議的一種;
   PICC:臨近卡(分為A型和B型)、PCD:臨近耦合設備--指MFRC522模塊、
   ATQ:對請求的應答、ATQA 對A型卡請求的應答、ATQB 對B型卡請求的應答
   REQA:對A型卡的請求、REQB:對B型卡的請求、WUPA:A型卡的喚醒命令(更多縮寫意思百度:ISO14443)
   ASK:選擇確認

②MIFARE: 恩智浦半導體(NXP Semiconductors)擁有的商標之一;

③MIFARE卡(M1卡):兼具讀寫功能,主要是非接觸式,有快速防沖突機制 – 處理多卡同時進入感應區的機制,其特殊的存儲結構適合一卡多用,目前主要芯片philip mifare1 S50、 S70等;

④官方網站:http://www.cn.nxp.com/ 網站中可以下載MFRC522芯片手冊和各種智能卡的使用手冊。

⑤MFRC522特性:

   非接觸式讀寫卡芯片、最大通信速率13.56MHz、

   支持接口:UART、SPI(Speed_max=10Mbit/s)、IIC(快速:400Kbit/s,高速:3400Kbit/s)

   通信協議:ISO-14443A 或者叫 MIFARE

   收發緩沖:64字節

   支持中斷模式、可編程定時器、CRC協處理器

二、MFRC522與M1卡通信

     在學習RFID打卡模塊時,需要涉及的操作原理主要有兩方面。一方面是MFRC522模塊的操作原理,即主機要怎樣才能操作控制這個模塊的問題。另一方面是MFRC522與M1卡之間的通信原理。只有兩方面都正確進行了,主機才能通過MFRC522模塊和M1卡進行通信。

①MFRC522基本原理實現
其SPI接口通信原理:主機負責產生(控制)SCK信號-主從機通信時鍾,以下是SPI線上操作的時序。
讀字節數據:主機寫地址---先發要讀的數據字節地址的MSB位放到MOSI引腳,直到LSB位發完,SCK=1時RC522模塊獲取MOSI引腳值作為其中一地址位,SCK=0時RC522准備讀下一位地址;
                 主機讀數據---寫完地址之后即可開始讀MISO引腳數據,先從這個引腳讀取電平當做數據的MSB位,SCK = 1時,MISO數據保持不變,SCK = 0時,MISO切換到下一位的值。
寫字節數據:也是先串行寫目的地址到MOSI引腳,然后同樣再串行寫數據到MOSI引腳,MSB位為起始發送位。
(通常在51類型的單片機中是用軟件來實現SPI的通信時序,我們常把這種方法稱為軟件模擬SPI方式,但是在ARM這類比較高端的SOC處理器中是集成了SPI硬件控制器的,通常讀寫SPI外設只需要把地址/數據放到指定的寄存器即可,硬件會自動完成發送)
FIFO工作原理:64字節的FIFO負責緩沖RC522接收(來自主機)和發送的數據。訪問FIFO緩沖區主要通過其內部FIFODataReg寄存器,由於主機一次操作只能是讀或者是寫,FIFO緩沖區中數據要么就是主機寫進去的內容,要不就是主機即將讀出來的內容—IC卡片發送給RC522模塊的數據。相關操作:
FIFO清除----操作FIFOLevelReg寄存器的bit7-FlushBuffer
查看FIFO中數據量----訪問FIFOLevelReg寄存器的FIFOLevel段,主機往FIFODataReg寫數據時,FIFOLevel自動加1,相反,減1.
主要狀態:
空狀態警告----FIFO數據空間小於等於WaterLevelReg的WaterLevel值時,Status1Reg的LoAlert置1

滿狀態警告----FIFO剩余空間小於等於WaterLevelReg的WaterLevel值時,Status1Reg的HiAlert置1
(硬件的巧妙設計:一個WaterLevel值起到兩個作用)

②M1-IC-S50卡工作原理/操作流程

M1卡結構
共16個扇區,每個扇區4塊(塊0~3),共64塊,按塊號編址為0~63。
第0扇區的塊0(即絕對地址0塊)用於存放廠商代碼,已經固化,不可更改。
其他各扇區:
塊0、塊1、塊2為數據塊,用於存貯數據;
塊3為控制塊,存放密碼A、存取控制、密碼B。

【對塊3中蘊藏的原理的理解是操作RFID模塊的關鍵所在】
每個扇區的密碼和存取控制都是獨立的,可以根據實際需要設定各自的密碼及存取控制。
注:加密是針對一個扇區來進行的,千萬不要理解成對每一個數據塊進行加密!!!
MFRC522模塊與MF-IC卡通信流程:詳情得看MF1S50XX的手冊第八章

(1)M1卡得電復位(RPO:Power-On Restset),是MFRC522天線發出電磁波導致,意味着有命令REQA過來,稱為標准的請求,這種情況是M1卡進入感應區后首次與MFRC522通信。其他情況,M1卡進入休眠狀態或之前的操作已經終止,Halt之后被WUPA命令再次喚醒,稱為獲得所有的請求。獲得請求之后M1卡發送回應ATQA碼。ATQA是卡的類型碼:S50的類型碼是0x04,S70的類型碼是0x02。
(2)M1卡獲得請求后再次獲得防沖突命令執行防沖突機制。情景分析:有這么一種情況,一個時刻多張卡同時出現在MFRC522感應區,這時候RC522必須要專一,同時和幾張卡發生關系早晚都是要出事的,那么RC522必須要認定其中一張卡。當然事情還要講究兩廂情願是吧,522問人家了,這就要求M1卡能夠主動告知RC522“我就是你的唯一的標識”。於是,事情就變成了這樣:RC522獲得最先主動告訴它的M1卡的UID,即卡的SN(4Bytes)+校驗(1Byte) ,作為下一步選擇通信卡的依據,這個SN需要主機從MFRC522中讀出來暫時保存。
(3)選卡:在主機控制下MFRC522需要把選卡的命令和上一步獲取的卡SN依次發送給M1卡,卡收到信息之后很老實,是選自己的信息就主動返回SAK信息,1Byte,實際上就是卡片的容量。

(4)驗證密碼:這是極其關鍵的一步了,里面涉及比較多比較復雜的協議。在PCD選中卡之后,接着主機控制他指出將要訪問的存儲器位置,然后連同驗證密碼命令、驗證秘鑰A|B一起發送給卡,三次密碼確認(硬件)成功之后,MFRC522的Status2Reg的Bit_4置位,之后的數據傳輸都是經過加密的。(對一個扇區一次驗證密碼成功之后根據控制字的設置可以對該扇區的數據塊進行相應讀寫操作直到執行Halt終止或驗證其他扇區的密碼,在選擇另一扇區時,需要先進行這一扇區密碼校驗。細心觀察上面那幅流程圖的箭頭也可以發現這個要求)
此外,有一點必須要說明的就是:默認控制下FF07806時A秘鑰:不可讀出,具有所有權限;B秘鑰:可讀出,沒有任何權限。控制字和秘鑰之間的聯系,推薦使用這個軟件:http://pan.baidu.com/s/1eQuCCvw

(5)存儲器操作:最終目的。

數據塊寫、數據塊讀:通過向M1卡發送WRITE、READ命令,分別是0xA0、0x30;

數據塊增值、數據塊減值:通過發M1卡的INCREMENT、DECREMENT指令,分別是0xC1、0xC0;
(寫數據塊時命令連同數據值一塊發送。)

(6)終止卡操作:HALT指令進入終止休眠模式。

(7)數據完整性措施:PCD和PICC之間的數據傳輸
每個塊16位CRC校驗、每個字節都有奇偶校驗位、位計數檢查、位編碼區別“1”“0”“無信息”、信道監控。
CRC16校驗: MFRC522內部有CRC16協處理器,主機通過軟件設置CRC初始值,然后把要發送的數據發送給MFRC522,激活CRC16協處理器后,等待一小會讀取CRCResultReg寄存器值即CRC16校驗值,然后把這個16位的校驗值附加到數據值后再通過MFRC522發送給M1卡片。至於其他校驗是硬件自動完成的,我們只需要自己去讀取MFRC522的Status1Reg寄存器看檢驗完成情況,讀ErrorReg寄存器就可知道成功與否。
三、問題解決

問1.各個扇區的默認秘鑰是多少?
答1.S50卡的初始密碼A和B是12個F。
問2.如何對加密扇區的某一數據塊進行讀寫數據?
答2.選中卡之后,首先要知道這個扇區的控制字,標准MF卡的控制字缺省值是0xFF078069,然后根據控制字要求驗證扇區的密碼A或密碼B,驗證成功之后就可以進行讀寫數據塊操作了。

問3.如何修改扇區的秘鑰?寫出具體編程步驟。
答3.扇區的秘鑰AB存放在該扇區的數據塊3,因此要修改扇區的密碼事先就要先知道這個扇區的控制字和原先的秘鑰A或B,根據控制字的要求驗證秘鑰A或B成功之后即可對存放在數據塊3的秘鑰AB進行修改。
編程步驟:就是MFRC522模塊與M1卡的通信流程。
問4.控制字有什么作用,如何進行修改?
答4.作用:是該扇區的各個數據塊的讀寫權限控制中心。控制字的修改和修改秘鑰的方法步驟一樣,只要根據控制字的需要密碼驗證成功之后即可對數據塊3的控制字域的值進行修改。這里先推測,修改密碼和控制字時,都是一起進行寫操作的,因為他們在同一個數據區。

四、程序設計思路

模塊化編程:

1.基本操作函數

主機的SPI接口的配置函數、收發函數,讀寫RFID模塊寄存器的函數等主機與模塊的操作函數。

2.主機與M1卡通信函數——封裝基本操作函數做成標准接口。

最快的方法就是找一份51的程序通讀一遍,理解后直接移植到自己的平台,賊快了。

 

下雨天做什么好呢?吃個早餐先,再計划計划^_^

08:09:53


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM