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