RC522学习计划(V1.0)时间:2013年3月12号18:22Step1:了解RC522的接口(SPI)开始:18:28RCC的接口与配置模式:RC522的SPI总线接口有其自身的时序要求。它只能工作于从模式,最高传输速率为10Mbps,数据与时钟相位关系满足“空闲态时钟为低电平,在时钟上升沿同步接收和发送数据,在下降沿数据转换”的约束关系。本文中配置STM32工作于SPI主模式下,时钟小于10Mbps,接收和发送数据都在时钟上升沿发生。对于SPI接口,RC522的相关引脚必须按照图2所示的连接关系配置。除了通用的4条SPI信号线(时钟线SCK、输入数据线MOSI、输出数据线MOSO和选通线NSS)以外,RC522要求额外的2个引脚I2C和EA分别固定接低电平和高电平。这2个引脚不参与SPI总线传输,只起设定RC522数字界面采用SPI接口的作用。另外,片选信号必须保证在写入数据流期问为低电平,而在无数据流写入时则为高电平,不能一直将NSS置为低电平。Step2:了解RC522的接收和发送数据的流程(工作过程)相对于PHILIPS公司生产的其他14443基站芯片(如RC500、RC530等),RC522简化了内部系统结构,去掉了片内E2PROM。从而大大缩减了芯片命令集。另外,对载波调制电路,发送电路和解调、解码电路的控制也相应简化,去掉了校准接收电路I时钟、Q时钟、校准发送与接收时钟相位等繁琐的操作。一般而言,单片机与RC522的通信流程如图3所示。工作过程:对卡的操作分成四步:寻卡→防冲突→选卡→读/写卡;MFRC522发送与接收卡数据暂存于FIFO中;(1)寻卡向FIFO中写入PICC_REQIDL命令,通过PCD_TRANSCEIVE命令将FIFO中数据通过天线发送出去,此时若有卡在天线作用范围内,将识别命令,并返回卡类型;卡类型(TagType):0x4400=Mifare_UltraLight0x0400=Mifare_One(S50)0x0200=Mifare_One(S70)0x0800=Mifare_Pro(X)0x4403=Mifare_DESFire关于下面两条命令的区别:第一条命令读取完卡后还会再次读取;第二条命令读取完卡后会等待卡离开开线作用范围,直到再次进入。(2)防冲突向FIFO中写入PICC_ANTICOLL+0x20,通过PCD_TRANSCEIVE命令将FIFO中数据通过天线发送出去,卡返回卡序列号(共5字节,第5字节是卡序列号校验码);由于是非接触式的,同一时间天线作用范围内可能不只一张卡时,即有多于一张的MIFARE1卡发回了卡序列号应答,则发生了冲突。此时,由于每张卡的卡序列号各不相同,MCM接收到的信息(即卡序列号)至少有1位既是0又是1(即该位的前、后半部都有副载波调制),MCM找到第1个冲突位将其置1(排除该位为0的卡),然后查第2个,依次排除,最后不再有冲突的SN即为被选中的卡。(3)选卡向FIFO中写入PICC_SElECTTAG+0x70+卡序列号,通过PCD_TRANSCEIVE命令将FIFO中数据通过天线发送出去,卡返回卡容量(对于MIFARE1卡来说,可能为88H或08H);(4)对卡EEPROM读写之前要进行认证status=MFRC522_Auth(PICC_AUTHENT1A,blockAddr,sectorKeyA[blockAddr/4],serNum);//认证向FIFO中写入PICC_AUTHENT1A/PICC_AUTHENT1B+块地址+扇区密码+卡序列号,通过PCD_TRANSCEIVE命令将FIFO中数据通过天线发送出去,MIFARE1卡的密码认证方式:三次相互认证的令牌原理框图(A)环:由MIFARE1卡片向读写器发送一个随机数据RB。(B)环:由读写器收到RB后向MIFARE1卡片发送一个令牌数据TOKENAB,其中包含了用读写器中存放的密码加密后的RB及读写器发出的一个随机数据RA。(C)环:MIFARE1卡片收到TOKENAB后,用卡中的密码对TOKENAB的加密的部分进行解密得到RB',并校验第一次由(A)环中MIFARE1卡片发出去的随机数RB是否与(B)环中接收到的TOKENAB中的RB'相一致;若读写器与卡中的密码及加密/解密算法一致,将会有RB=RB',校验正确,否则将无法通过校验。(D)环:如果(C)环校验是正确的,则MIFARE1卡片用卡中存放的密码对RA加密后发送令牌TOKENBA给读写器。(E)环:读写器收到令牌TOKENBA后,用读写器中存放的密码对令牌TOKENBA中的RA(随机数)进行解密得到RA';并校验第一次由(B)环中读写器发出去的随机数RA是否与(D)环中接收到的TOKENBA中的RA'相一致;同样,若读写器与卡中的密码及加密/解密算法一致,将会有RA=RA',校验正确,否则将无法通过校验。如果上述的每一个环都为“真”,且都能正确通过验证,则整个的认证过程将成功。读写器将允许对刚刚认证通过的卡片上的这个扇区进入下一步的操作(读/写等操作)。(5)写数据向FIFO中写入PICC_WRITE+块地址,通过PCD_TRANSCEIVE命令将FIFO中数据通过天线发送出去。要注意写块3数据,因为块3包含了所在扇区在密钥及访问条件,如果操作不当,将导致扇区无法正常使用。(6)读数据向FIFO中写入PICC_READ+块地址,通过PCD_TRANSCEIVE命令将FIFO中数据通过天线发送出去。Step3:参考例程,改写程序(例程)Step4:先在STM32MINi上运行Step5:然后移植到AVRmega16Step6:优化代码,添加注释,编写技术文档