|
Step2:了解RC522的接收和發(fā)送數(shù)據(jù)的流程(工作過程) 相對于PHILIPS公司生產(chǎn)的其他14443基站芯片(如RC500、RC530等),RC522簡化了內(nèi)部系統(tǒng)結(jié)構(gòu),去掉了片內(nèi)E2PROM。從而大大縮減了芯片命令集。另外,對載波調(diào)制電路,發(fā)送電路和解調(diào)、解碼電路的控制也相應(yīng)簡化,去掉了校準接收電路I時鐘、Q時鐘、校準發(fā)送與接收時鐘相位等繁瑣的操作。一般而言,單片機與RC522的通信流程如圖3所示。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps889F.tmp.png 工作過程: 對卡的操作分成四步:尋卡→防沖突→選卡→讀/寫卡; MFRC522發(fā)送與接收卡數(shù)據(jù)暫存于FIFO中; (1) 尋卡 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps88CF.tmp.jpg 向FIFO中寫入PICC_REQIDL命令,通過PCD_TRANSCEIVE命令將FIFO中數(shù)據(jù)通過天線發(fā)送出去,此時若有卡在天線作用范圍內(nèi),將識別命令,并返回卡類型; 卡類型(TagType): 0x4400 = Mifare_UltraLight 0x0400 = Mifare_One(S50) 0x0200 = Mifare_One(S70) 0x0800 = Mifare_Pro(X) 0x4403 = Mifare_DESFire 關(guān)于下面兩條命令的區(qū)別: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps88DF.tmp.jpg 第一條命令讀取完卡后還會再次讀取; 第二條命令讀取完卡后會等待卡離開開線作用范圍,直到再次進入。 (2) 防沖突 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps88F0.tmp.jpg 向FIFO中寫入PICC_ANTICOLL+0x20,通過PCD_TRANSCEIVE命令將FIFO中數(shù)據(jù)通過天線發(fā)送出去,卡返回卡序列號(共5字節(jié),第5字節(jié)是卡序列號校驗碼); 由于是非接觸式的,同一時間天線作用范圍內(nèi)可能不只一張卡時,即有多于一張的MIFARE 1卡發(fā)回了卡序列號應(yīng)答,則發(fā)生了沖突。此時,由于每張卡的卡序列號各不相同,MCM接收到的信息(即卡序列號)至少有1位既是0又是1(即該位的前、后半部都有副載波調(diào)制),MCM找到第1個沖突位將其置1(排除該位為0的卡),然后查第2個,依次排除,最后不再有沖突的SN即為被選中的卡。 (3) 選卡 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps88F1.tmp.jpg 向FIFO中寫入PICC_SElECTTAG+0x70+卡序列號,通過PCD_TRANSCEIVE命令將FIFO中數(shù)據(jù)通過天線發(fā)送出去,卡返回卡容量(對于MIFARE 1卡來說,可能為88H或08H); (4) 對卡EEPROM讀寫之前要進行認證 status = MFRC522_Auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[blockAddr/4], serNum); //認證 向FIFO中寫入PICC_AUTHENT1A/PICC_AUTHENT1B+塊地址+扇區(qū)密碼+卡序列號,通過PCD_TRANSCEIVE命令將FIFO中數(shù)據(jù)通過天線發(fā)送出去, MIFARE 1 卡的密碼認證方式: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8901.tmp.jpg 三次相互認證的令牌原理框圖 (A) 環(huán):由MIFARE 1卡片向讀寫器發(fā)送一個隨機數(shù)據(jù)RB。 (B) 環(huán):由讀寫器收到RB后向MIFARE 1卡片發(fā)送一個令牌數(shù)據(jù)TOKEN AB,其中包含了用讀寫器中存放的密碼加密后的RB及讀寫器發(fā)出的一個隨機數(shù)據(jù)RA。 (C) 環(huán):MIFARE 1卡片收到 TOKEN AB 后,用卡中的密碼對TOKEN AB的加密的部分進行解密得到RB',并校驗第一次由(A)環(huán)中MIFARE 1卡片發(fā)出去的隨機數(shù)RB是否與(B)環(huán)中接收到的TOKEN AB中的RB'相一致;若讀寫器與卡中的密碼及加密/解密算法一致,將會有RB=RB',校驗正確,否則將無法通過校驗。 (D) 環(huán):如果(C)環(huán)校驗是正確的,則MIFARE 1卡片用卡中存放的密碼對RA加密后發(fā)送令牌TOKEN BA給讀寫器。 (E) 環(huán):讀寫器收到令牌TOKEN BA后,用讀寫器中存放的密碼對令牌TOKEN BA中的RA(隨機數(shù))進行解密得到RA';并校驗第一次由(B)環(huán)中讀寫器發(fā)出去的隨機數(shù)RA是否與(D)環(huán)中接收到的TOKEN BA中的RA' 相一致;同樣,若讀寫器與卡中的密碼及加密/解密算法一致,將會有RA=RA',校驗正確,否則將無法通過校驗。 如果上述的每一個環(huán)都為“真”,且都能正確通過驗證,則整個的認證過程將成功。讀寫器將允許對剛剛認證通過的卡片上的這個扇區(qū)進入下一步的操作(讀/寫等操作)。 (5) 寫數(shù)據(jù) file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8951.tmp.jpg file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8952.tmp.jpg file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8962.tmp.jpg 向FIFO中寫入PICC_WRITE+塊地址,通過PCD_TRANSCEIVE命令將FIFO中數(shù)據(jù)通過天線發(fā)送出去。 要注意寫塊3數(shù)據(jù),因為塊3包含了所在扇區(qū)在密鑰及訪問條件,如果操作不當,將導致扇區(qū)無法正常使用。 (6) 讀數(shù)據(jù) file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8963.tmp.jpg file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps8964.tmp.jpg 向FIFO中寫入PICC_READ+塊地址,通過PCD_TRANSCEIVE命令將FIFO中數(shù)據(jù)通過天線發(fā)送出去。
|