湖南人文科技学院毕业论文(设计)
作。如果只有一张进入感应区,并且已经知道了卡的序列号(SN),则可跳过此步,直接进入选卡命令,若不知道卡的序列号,则必须调用防冲突函数Mf5oocascAnticoll(),以得到感应区内卡的序列号。若同时有多张卡在感应区内,防冲突函数能够选择其中的一张卡并得到其序列号。
防冲突指令只是获得一张Mifi甘el卡的序列号,并没有真正选中这张卡。选中卡应由Select(见下一步)指令完成。SN为40位长5个字节,实际有意义的只有前4个字节,最后一个字节是SN的异或校验的校验码,在获得SN之后,一般应在程序中对所接收到的SN进行校验,以确保数据的正确性。
Mf5OOCascAnticoll()函数主要代码及相关注释见附录2。 入口参数:
Select_code:表示模式选择,标准应为0x93;
Bcnt:表示读入多少个位,一般应为32位,即四个有效字节; *sn:表示输入或输出四个字节。 5.2.3 选择卡片
选择卡片就是根据已知的序列号读出卡的容量编码(一字节)。只有经过这一步骤后才算真正选中了一张卡,以后的操作都对这张卡进行。选择卡片指令是很重要的,而且必须首先被使用,因为卡片只有先被选中了,然后才能进行读、写等操作。选择卡片过程是通过Mf500cascse1eet()函数实现的,其主要程序代码及相关注释见附录3。
入口参数:
Select_code:模式选择(一般为ox93);
*snr:表示由微处理器控制RC500向PICC发出四个字节的序号,然后等待 卡片的回应。四个字节是在Anticon操作中接收到的四个字节: *sak:应答信号,共8位,其中bit6和bit3可用。 5.2.4 验证
在对所选Mifare l卡进行读、写之前,必需对Mifare1卡进行验证,也即检 查卡的合法性,这可以通过将存储在MFRC500RAM中的密码集(KEYSET)中的 一组密码与Mifare1卡片上的密码进行比较实现,如果它们匹配,说明所选 Mifare1卡合法,则卡的验证成功,允许对卡进行读、写操作。验证卡片的过程
28
湖南人文科技学院毕业论文(设计)
是通过Mf500LoadKey()函数实现的,其主要程序代码及相关注释如下: unsignedeharMf500LoadKey(unsigned char key[]) regwrite(RegInterruptEn,ox7F)://禁止所有中断 regwrite(RegInterruptRq,ox7F)://复位request中断
regwrite(RegCommand,PCD_IDLE);//中止可能正在运行的其它 regwrite(Regeontrol,regread[[regcontrol]|ox0l);//清空FIFO for (status=0;status<12;status++)
regwrite(RegFIFOData.key[status])://写入key到FIFO regwrite(RegInterruptEn,0x84)://使能IdleIRq中断
regwrite(RegCommand,PCD_LOADKEY)://写入loadkey命令 d0 {
Status=(regread(RegErrorFlag)&ox40); }
while((!(regread (RegPrimary status)&ox08)))://等待命令执行完毕 if(status)
status=MI_WRONGLOAD_MODE;//判断错误类型 e1se
status=MI_O K;
regwrite(RegCommand,PCD_IDLE)://程序终止 return status; }
5.2.5 读取卡片
如果完成了前面几个步骤,说明己经通过了安全检查,所选卡是本系统的卡,就可以对Mifare1卡正常进行读、写了。读卡函数Mf500Read()从已通过密码验证的扇区中读取一个数据块,共16个字节,其中前面几个字节即为卡号(l个字节表示2位卡号,本系统卡号长度为10,所以需要前面5个字节)。Mf500Read()函数主要代码及相关注释见附录4。
入口参数:
block_add:块地址(0-63): value:输出数据指针。 5.2.6 卡挂起
当对卡中的数据处理完后,程序应使卡处于挂起状态,此时即使卡在感应 区域,读卡器也不会再对该卡进行任何。Mf500Halt()函数用来实现卡挂起功能,其主要代码及相关注释如下:
unsigned char Mf500Halt() {
29
湖南人文科技学院毕业论文(设计)
unsigned char status=MI_CODEERR:
regwrite(RegInterruptEn,ox7F;//禁止所有中断 regwrite(RegInterruptRq,ox7F);//复位request中断
regwrite(RegCommand,PCD_IDLE);//中止可能正在运行的其它程序 regwrite(RegControl,regead(RegControl)}ox0l);//清空FIFO regwrite(RegFIFOData,PICC_HALT);//写入命令代码 regwrite(RegFIFOData,ox00);
regwrite(RegInterruptEn,ox84);//使能TimerIRq和ldleIRq regwrite(RegCommand,PCD_TRANSCEIVE)://命令开始执行 mrc500_cnt=0x00;
while((!(regread(RegPrimaryStatus)&0x08))&&(mre500_cnt<100)) mre50_cnt+=l;//超时或命令结束判断 if(mre500_cnt>=100)//超时时的处理 {
regwrite(RegCommand,PCD_IDLE)://中止程序 status=MI_ACCESSTIMEOUT; }
if(status=MI_ACCESSTIMEOUT) status=MI_OK;
regwrite(RegCommand,PCD_IDLE): return Status; }
30
湖南人文科技学院毕业论文(设计)
第6章 总结与期望
本报告论述了射频识别门禁系统的总体设计,以MF RC500为核心,结合AT89C52、液晶屏、看门狗等设计了门禁系统总体结构,其中包括了读卡器实时时钟、RS485通信等软硬件的设计,给出了电路原理图。读卡器主要由射频天线、读卡模块、RS485通信接口及单片机控制系统组成,能读写Philips公司的Mifare非接触式智能射频卡读卡距离约10cm。初步分析了射频天线的设计,设计和优化了直接匹配天线的EMC和接收电路;液晶显示采用点阵式液晶显示器WGM-12832,通过SPI总线接口与单片机连接。实时时钟采用DS1302时钟芯片,当没有卡进入读卡能量范围时,系统显示时钟,当有卡进入时则读卡内数据并将卡号显示在液晶显示器上。采用I2C和SPI串口接口的设计节省了单片机的I/O引脚。
(2)设计了串口通信模块,微处理器的信号通过SP485R芯片经RS485总线传输,再通过RS485/RS232的转换头转换,最后由上位机接收。RS485比RS232具有更远的传输距离。读卡器平时可独立工作,PC机会每隔一定时间访问读卡器,用PC机上的时钟统一校准读卡器上的时钟,并读取存储器内的读卡数据,以便读卡器中的数据得到及时处理。
(3)采用模块化软件设计方法设计了下位机的程序。根据MF RC500的特性,系统地对MF RC500芯片的操作流程进行研究,给出了读卡控制器的主程序流程,使用C51语言开发了底层控制软件、液晶显示、存储、RS485通信和实时时钟等模块子程序,通过KeiluVision2平台完成了各部分程序的编译。经过充分的调查和对智能门禁系统发展现状的分析, 采用C语言完成了读卡器的软件设计包括(系统初始化、RFID信息的读取、电子锁的控制和报警系统的设计)以及读卡器的串行通信程序的设计。由于经历的有限且时间不够充分,在设计和研究该门禁系统时,系统的有些功能并没有设计只是在理论研究阶段,还有些功能只是设计阶段没有真正的实现,该系统还需要在今后的工作中进一步的研究和改善。
本系统的管理软件设计不完善,没有实现到多机互联等功能。高级智能门禁系统是当前门禁系统的重要发展方向,随着社会的发展和人们生活水平的提高,智能建筑和智能小区的发展将日益迅猛,作为智能建筑安防系统的一个重要组成部分,智能门禁系统
31