MFRC522开发笔记
?
一:基本概念
1、ISO-14443A協(xié)議:( 國際標(biāo)準(zhǔn)化組織:International Organization for Standardization)RFID協(xié)議的一種;
?? PICC:臨近卡(分為A型和B型)、PCD:臨近耦合設(shè)備--指MFRC522模塊、
?? ATQ:對請求的應(yīng)答、ATQA 對A型卡請求的應(yīng)答、ATQB 對B型卡請求的應(yīng)答
?? REQA:對A型卡的請求、REQB:對B型卡的請求、WUPA:A型卡的喚醒命令(更多縮寫意思百度:ISO14443)
?? ASK:選擇確認
2、MIFARE: 恩智浦半導(dǎo)體(NXP Semiconductors)擁有的商標(biāo)之一;
3、MIFARE卡(M1卡):兼具讀寫功能,主要是非接觸式,有快速防沖突機制 – 處理多卡同時進入感應(yīng)區(qū)的機制,其特殊的存儲結(jié)構(gòu)適合一卡多用,目前主要芯片philip mifare1 S50、 S70等;
4、官方網(wǎng)站:http://www.cn.nxp.com/ 網(wǎng)站中可以下載MFRC522芯片手冊和各種智能卡的使用手冊。
5、MFRC522特性:
? 非接觸式讀寫卡芯片,最大通信速率13.56MHz;
? 支持接口:UART,SPI(Speed_max=10Mbit/s),IIC(快速:400Kbit/s,高速:3400Kbit/s)
? 通信協(xié)議:ISO-14443A 或者叫 MIFARE
?? 收發(fā)緩沖:64字節(jié)
?? 支持中斷模式、可編程定時器、CRC協(xié)處理器
二:MFRC522與M1卡通信
在學(xué)習(xí)RFID打卡模塊時,需要涉及的操作原理主要有兩方面。一方面是MFRC522模塊的操作原理,即主機要怎樣才能操作控制這個模塊的問題。另一方面是MFRC522與M1卡之間的通信原理。只有兩方面都正確進行了,主機才能通過MFRC522模塊和M1卡進行通信。
①MFRC522原理
SPI通信原理:主機負責(zé)產(chǎn)生SCK信號-主從機通信時鐘,以下是SPI時序流程
讀字節(jié)數(shù)據(jù):
寫字節(jié)數(shù)據(jù):
(通常在51類型的單片機中是用軟件來實現(xiàn)SPI的通信時序,我們常把這種方法稱為軟件模擬SPI方式,但是在ARM這類比較高端的SOC處理器中是集成了SPI硬件控制器的,通常讀寫SPI外設(shè)只需要把地址/數(shù)據(jù)放到指定的寄存器即可,硬件會自動完成發(fā)送)
?
②M1-IC-S50卡工作原理/操作流程:
M1卡結(jié)構(gòu):
共16個扇區(qū),每個扇區(qū)4塊(塊0~3),共64塊,按塊號編址為0~63;
第0扇區(qū)的塊0(即絕對地址0塊)用于存放廠商代碼,已經(jīng)固化,不可更改。
其他各扇區(qū):
塊0、塊1、塊2為數(shù)據(jù)塊,用于存儲數(shù)據(jù);塊3為控制塊,存放密碼A,存取控制,存放密碼B
對塊3中蘊藏的原理的解釋是操作RFID模塊的關(guān)鍵所在。
每個扇區(qū)的密碼和存取控制都是獨立的,可以根據(jù)實際需要設(shè)定各自的密碼及存取控制。
注:加密是針對一個扇區(qū)來進行的,千萬不要理解成對每一個數(shù)據(jù)塊進行加密。
?
MFRC522模塊與MF-IC卡通信流程:詳情得看MF1S50XX的手冊第八章
?
?
(1)M1卡得電復(fù)位(RPO:Power-On Restset),是MFRC522天線發(fā)出電磁波導(dǎo)致,意味著有命令REQA過來,稱為標(biāo)準(zhǔn)的請求,這種情況是M1卡進入感應(yīng)區(qū)后首次與MFRC522通信。其他情況,M1卡進入休眠狀態(tài)或之前的操作已經(jīng)終止,Halt之后被WUPA命令再次喚醒,稱為獲得所有的請求。獲得請求之后M1卡發(fā)送回應(yīng)ATQA碼。ATQA是卡的類型碼:S50的類型碼是0x04,S70的類型碼是0x02。
(2)M1卡獲得請求后再次獲得防沖突命令執(zhí)行防沖突機制。情景分析:有這么一種情況,一個時刻多張卡同時出現(xiàn)在MFRC522感應(yīng)區(qū),這時候RC522必須要專一,同時和幾張卡發(fā)生關(guān)系早晚都是要出事的,那么RC522必須要認定其中一張卡。當(dāng)然事情還要講究兩廂情愿是吧,522問人家了,這就要求M1卡能夠主動告知RC522“我就是你的唯一的標(biāo)識”。于是,事情就變成了這樣:RC522獲得最先主動告訴它的M1卡的UID,即卡的SN(4Bytes)+校驗(1Byte) ,作為下一步選擇通信卡的依據(jù),這個SN需要主機從MFRC522中讀出來暫時保存。
(3)選卡:在主機控制下MFRC522需要把選卡的命令和上一步獲取的卡SN依次發(fā)送給M1卡,卡收到信息之后很老實,是選自己的信息就主動返回SAK信息,1Byte,實際上就是卡片的容量。
(4)驗證密碼:這是極其關(guān)鍵的一步了,里面涉及比較多比較復(fù)雜的協(xié)議。在PCD選中卡之后,接著主機控制他指出將要訪問的存儲器位置,然后連同驗證密碼命令、驗證秘鑰A|B一起發(fā)送給卡,三次密碼確認(硬件)成功之后,MFRC522的Status2Reg的Bit_4置位,之后的數(shù)據(jù)傳輸都是經(jīng)過加密的。(對一個扇區(qū)一次驗證密碼成功之后根據(jù)控制字的設(shè)置可以對該扇區(qū)的數(shù)據(jù)塊進行相應(yīng)讀寫操作直到執(zhí)行Halt終止或驗證其他扇區(qū)的密碼,在選擇另一扇區(qū)時,需要先進行這一扇區(qū)密碼校驗。細心觀察上面那幅流程圖的箭頭也可以發(fā)現(xiàn)這個要求)
此外,有一點必須要說明的就是:默認控制下FF07806時A秘鑰:不可讀出,具有所有權(quán)限;B秘鑰:可讀出,沒有任何權(quán)限。控制字和秘鑰之間的聯(lián)系,推薦使用這個軟件:http://pan.baidu.com/s/1eQuCCvw
(5)存儲器操作:最終目的。
數(shù)據(jù)塊寫、數(shù)據(jù)塊讀:通過向M1卡發(fā)送WRITE、READ命令,分別是0xA0、0x30;
數(shù)據(jù)塊增值、數(shù)據(jù)塊減值:通過發(fā)M1卡的INCREMENT、DECREMENT指令,分別是0xC1、0xC0;
(寫數(shù)據(jù)塊時命令連同數(shù)據(jù)值一塊發(fā)送。)
(6)終止卡操作:HALT指令進入終止休眠模式。
(7)數(shù)據(jù)完整性措施:PCD和PICC之間的數(shù)據(jù)傳輸
每個塊16位CRC校驗、每個字節(jié)都有奇偶校驗位、位計數(shù)檢查、位編碼區(qū)別“1”“0”“無信息”、信道監(jiān)控。
CRC16校驗: MFRC522內(nèi)部有CRC16協(xié)處理器,主機通過軟件設(shè)置CRC初始值,然后把要發(fā)送的數(shù)據(jù)發(fā)送給MFRC522,激活CRC16協(xié)處理器后,等待一小會讀取CRCResultReg寄存器值即CRC16校驗值,然后把這個16位的校驗值附加到數(shù)據(jù)值后再通過MFRC522發(fā)送給M1卡片。至于其他校驗是硬件自動完成的,我們只需要自己去讀取MFRC522的Status1Reg寄存器看檢驗完成情況,讀ErrorReg寄存器就可知道成功與否。
三、問題解決
問1.各個扇區(qū)的默認秘鑰是多少?
答1.S50卡的初始密碼A和B是12個F。
問2.如何對加密扇區(qū)的某一數(shù)據(jù)塊進行讀寫數(shù)據(jù)?
答2.選中卡之后,首先要知道這個扇區(qū)的控制字,標(biāo)準(zhǔn)MF卡的控制字缺省值是0xFF078069,然后根據(jù)控制字要求驗證扇區(qū)的密碼A或密碼B,驗證成功之后就可以進行讀寫數(shù)據(jù)塊操作了。
問3.如何修改扇區(qū)的秘鑰?寫出具體編程步驟。
答3.扇區(qū)的秘鑰AB存放在該扇區(qū)的數(shù)據(jù)塊3,因此要修改扇區(qū)的密碼事先就要先知道這個扇區(qū)的控制字和原先的秘鑰A或B,根據(jù)控制字的要求驗證秘鑰A或B成功之后即可對存放在數(shù)據(jù)塊3的秘鑰AB進行修改。
編程步驟:就是MFRC522模塊與M1卡的通信流程。
問4.控制字有什么作用,如何進行修改?
答4.作用:是該扇區(qū)的各個數(shù)據(jù)塊的讀寫權(quán)限控制中心。控制字的修改和修改秘鑰的方法步驟一樣,只要根據(jù)控制字的需要密碼驗證成功之后即可對數(shù)據(jù)塊3的控制字域的值進行修改。這里先推測,修改密碼和控制字時,都是一起進行寫操作的,因為他們在同一個數(shù)據(jù)區(qū)。
四、程序設(shè)計思路
模塊化編程:
1.基本操作函數(shù)
主機的SPI接口的配置函數(shù)、收發(fā)函數(shù),讀寫RFID模塊寄存器的函數(shù)等主機與模塊的操作函數(shù)。
2.主機與M1卡通信函數(shù)——封裝基本操作函數(shù)做成標(biāo)準(zhǔn)接口。
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的MFRC522开发笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PID算法-温度控制
- 下一篇: STM32L0系列串口重定义的方法