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