基于RC522的学生智能考勤系统
一、概述
通过点名、磁卡和接触式IC卡等方式对学生的到课情况进行考勤、记录管理,既耗时又相互干扰;而非接触式RFID学生考勤系统实现了利用无线射频识别技术 对学生考勤管理,既方便、快捷,又省时。而且通过物联网和PC机终端对数据进行处理。
二、系统组成
学生智能考勤系统由四大部分组成,非接触式IC卡、读卡器、单片机及PC终端。如下图
学生考勤系统组成
1. 当保存有学生基本信息的IC卡进入读卡器天线作用范围内时,卡片获得能量以维持卡内部电路工作;
2. 单片机负责控制读卡器进行一系列“寻卡→防冲突→选卡→读/写卡”操作,如果成功,将读取到卡片上的学生信息;
3. 单片机将学生信息发送到PC终端,由PC机对一步对数据进行处理。
三、非接触式IC卡—Mifare One卡
功能
读卡器通过天线发射激励信号(一组固定频率的电磁波),IC卡进入读写器工作区内,被读写器信号激励。在电磁波的激励下,卡内的LC串联谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2 V时,此电容可以作为电源为其他电路提供工作电压,供卡内集成电路工作所需。
(1)ATR模块:Answer To Request(“请求之应答”)
当一张MIFARE 1卡处在读写器的天线工作范围之内时,程序员控制读写器向卡发出Request all(或Request std)命令后,卡的ATR将启动,将卡片块 0 中2个字节的卡类型号(TagType)传送给读写器,建立卡与读写器的第一步通信联络。
如果不进行第一步的ATR工作,读写器对卡的其他操作(读/写操作等)将不会进行。
(2)AntiCollision模块:防(卡片)冲突功能
如果有多张MIFARE 1卡处在读写器的天线工作范围之内,则AntiCollision模块的防冲突功能将被启动工作。读写器将会首先与每一张卡进行通信,读取每一张卡的序列号(Serial Number)。由于每一张MIFARE 1卡都具有惟一的序列号,决不会相同,因此程序员将启动读写器中的AntiCollision防重叠功能配合卡上的防重叠功能模块,根据卡序列号来选定其中一张卡。被选中的卡将被激活,可以与读写器进行数据交换;而未被选中的卡处于等待状态,随时准备与读写器进行通信。
AntiCollision模块(防重叠功能)启动工作时,读写器将得到卡片的序列号(Serial Number)。序列号存储在卡的Block 0中,共有5个字节,实际有用的为4个字节,另一个字节为序列号的校验字节 。
(3)Select Application 模块:卡片的选择
当卡与读写器完成了上述两个步骤,读写器要想对卡进行读/写操作时,必须对卡进行“Select”操作,以使卡真正地被选中。
被选中的卡将卡片上存储在Block 0中的卡容量“Size” 字节传送给读写器。当读写器收到这一字节后,方可对卡进行进一步的操作,如密码验证等。
(4)Authentication & Access Control 模块:认证及存取控制模块
完成上述的三个步骤后,读写器对卡进行读/写操作之前,必须对卡上已经设置的密码进行认证,如果匹配,则允许进一步的读/写操作。
MIFARE 1 卡上有16个扇区,每个扇区都可分别设置各自的密码,互不干涉,必须分别加以认证,才能对该扇区进行下一步的操作。因此每个扇区可独立地应用于一个应用场合,整个卡可以设计成一卡多用(一卡通)的形式来应用。
密码的认证采用了三次相互认证的方法,具有很高的安全性。如果事先不知卡上的密码,则因密码的变化可以极其复杂,试图靠猜测密码而打开卡上一个扇区的可能性几乎为零。
(5)Control & Arithmetic Unit:控制及算术运算单元
这一单元是整个卡的控制中心,是卡的“头脑”。它主要对卡的各个单元进行操作控制,协调卡的各个步骤;同时它还对各种收/发的数据进行算术运算处理、递增/递减处理和CRC运算处理等,是卡中内建的中央微处理器(MCU)单元。
(6)RAM/ROM 单元
RAM主要配合控制及算术运算单元,将运算的结果进行暂时存储,例如将需存储的数据由控制及算术运算单元取出送到EEPROM存储器中;将需要传送给读写器的数据由控制及算术运算单元取出,经过RF射频接口电路的处理,通过卡片上的天线传送给读写器。RAM中的数据在卡失掉电源后(卡片离开读写器天线的有效工作范围)将会丢失。
同时,ROM中则固化了卡运行所需要的必要的程序指令,由控制及算术运算单元取出,对每个单元进行指令控制,使卡能有条不紊地与读写器进行数据通信。
(7)Crypto Unit:数据加密单元
该单元完成对数据的加密处理及密码保护。加密的算法可以为DES标准算法或其他。
(8)EEPROM存储器及其接口电路:EEPROM INTERFACE/EEPROM MEMORY
该单元主要用于存储用户数据,在卡失掉电源后(卡片离开读写器天线的有效工作范围)数据仍将被保持。
4、Mifare 1 S50卡存储EEPROM
EEPROM
Mifare 1卡内部有1的EEPROM,分成0~15共16个扇区,每个扇区分成0~3共4块,每块16字节。
1、扇区0的块0是厂商标志字节,保存着只读的卡信息及厂商信息,比如:
AF A7 3E 00 36 08 04 00 99 44 30 43 31 34 36 16
前面四个字节AF A7 3E 00是卡序列号,08是卡容量,04 00是卡类型,后面是厂商自定义的一些信息。
2、每个扇区的块0保存着该块的密钥A密钥B及该块的访问条件,第个扇区都有自己的一套密钥及访问条件,其中,4个字节的访问条件是对每个扇区4个块的读写定义,格式如下:
字节9备用默认值为0x69,_b是取反。
分成C10~C13,C20~C23,C30~C33
对块0、块1、块2存取控制X(0~2):
对块3存取控制:
比如块3的16字节如下:
00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF
前面6个字节是密钥A,因为Read永远为Never,所以读到的都是0x00,最后的6字节是密钥B,其值一为0xFF 0xFF 0xFF 0xFF 0xFF 0xFF,中间的4个字节是访问条件,有:
C1X[0..2] C2X[0..2] C3X[0..2]
0 0 0
C1X3 C2X3 C3X3
0 0 1
对应上表,可得出对该扇区块的存取控制条件。
四、读卡器—MFRC522
MF RC522 是应用于 13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员。是 NXP 公司针对“三表”应用推出的一款低电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携式手持设备研发的较好选择。
MF RC522 利用了先进的调制和解调概念,完全集成了在13.56MHz 下所有类型的被动非接触式通信方式和协议。支持ISO14443A的多层应用。其内部发送器部分可驱动读写器天线与 ISO 14443A/MIFARE®卡和应答机的通信,无需其它的电路。接收器部分提供一个坚固而有效的解调和解码电路,用于处理 ISO14443A 兼容的应答器信号。数字部分处理 ISO14443A 帧和错误检测(奇偶&CRC)。 此外,它还支持快速 CRYPTO1 加密算法, 用于验证 MIFARE 系列产品。 MFRC522支持 MIFARE®更高速的非接触式通信,双向数据传输速率高达 424kbit/s。
作为 13.56MHz 高集成度读写卡系列芯片家族的新成员,MF RC522与 MF RC500 和
MF RC530 有不少相似之处,同时也具备诸多特点和差异。它与主机间的通信采用连线较
少的串行通信,且可根据不同的用户需求,选取 SPI、I2C 或串行 UART(类似 RS232)模式
之一,有利于减少连线,缩小 PCB板体积,降低成本。
1、内部框图
(1) MFRC522支持SPI、I2C、UART接口;
(2) 64字节发送和接收的FIFO缓存;
(3) 4页,每页16个寄存器,共64个寄存器;
(4) 具有硬件掉电、软件掉电、发送掉电三种节电模式;
(5) 支持 ISO/IEC 14443 TypeA和 MIFARE®通信协议;
2、电路图
3、MFRC522支持的三种接口
定义如下
模块使用的是SPI接口,与单片机接口如下:
4、工作过程
对卡的操作分成四步:寻卡→防冲突→选卡→读/写卡;
(1) 寻卡
向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
关于下面两条命令的区别:
第一条令读取完卡后还会再次读取;
第二条命令读取完卡后会等待卡离开开线作用范围,直到再次进入。
(2) 防冲突
向FIFO中写入PICC_ANTICOLL+0x20,通过PCD_TRANSCEIVE命令将FIFO中数据通过天线发送出去,卡返回卡序列号(共5字节,第5字节是卡序列号校验码);
由于是非接触式的,同一时间天线作用范围内可能不只一张卡时,即有多于一张的MIFARE 1卡发回了卡序列号应答,则发生了冲突。此时,由于每张卡的卡序列号各不相同,MCM接收到的信息(即卡序列号)至少有1位既是0又是1(即该位的前、后半部都有副载波调制),MCM找到第1个冲突位将其置1(排除该位为0的卡),然后查第2个,依次排除,最后不再有冲突的SN即为被选中的卡。
(3) 选卡
向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 卡的密码认证方式:
=
三次相互认证的令牌原理框图
(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) 写数据
向FIFO中写入PICC_WRITE+块地址,通过PCD_TRANSCEIVE命令将FIFO中数据通过天线发送出去。
要注意写块3数据,因为块3包含了所在扇区在密钥及访问条件,如果操作不当,将导致扇区无法正常使用。
(6) 读数据
向FIFO中写入PICC_READ+块地址,通过PCD_TRANSCEIVE命令将FIFO中数据通过天线发送出去。
五、结果
通过串口接收到数据如下:
04 00
AF A7 3E 00 36
08
01 02 03 04 00 00 00 00 00 00 00 00 00 00 00 00
分别为卡类型、卡序列号、卡容量及块1的16字节数据。
上一篇: 南京理工大学:高校统一大门禁平台设计思路
下一篇: 采用热成像技术的考勤门禁软件设计与实现