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中数据通过天线发送出去。
|