基于嵌入式技术的智能卡门禁系统设计
2009-06-09
作者:洪家平
摘 要:介绍了基于智能卡读写模块ZLG500的门禁系统设计的原理与方法,主要分析了该智能卡门禁系统中的数据存储与传输模块、系统主模块和系统时钟模块的工作原理,同时给出了智能卡读写模块ZLG500与主模块MCU的硬件接口及部分软件代码。本系统经过实际运行,具有稳定可靠和操作简便等特点。
关键词:ZLG500;智能卡;门禁系统
目前智能卡的应用越来越广泛,如校园一卡通系统、城市公交系统、大型会议签到系统、消费系统、考勤系统、门禁系统等都使用了智能卡。本文以ZLG500读写模块作为卡与门禁机交换数据的接口模块为例,介绍了ZLG500在智能卡门禁系统中的应用。
1 读写模块ZLG500
1.1 ZLG500与MCU的接口原理
ZLG500模块采用Philips公司最新推出的高集成ISO14443读卡芯片MF RC500该芯片。该芯片能读写RC500内EEPROM,提供三线制SPI接口,并具有控制线输出端口,能与任何MCU连接。ZLG500与MCS51单片机的接口原理图如图1所示。ZLG500模块的EMC性能优良,并且自带无源蜂鸣器信号输出,还能用软件控制输出频率及输出持续时间。
图1中,SS、SCLK、SDATA为ZLG500与MCU相连接的控制线,分别为片选线SS、时钟线SCLK和数据线SDATA。主控制器的MCU和读卡模块内的MCU通过此三线相连。接口空闲时,主机的SS=1、SCLK=0、SDATA=0,而从机的SS=1、SCLK=1、SDATA=0。其中,SS和SDATA都是双向的,而时钟线SCLK是单向的,即时钟只能由主控制器产生,该信号必须严格遵守时序规范,否则将出现通信错误,此时读卡模块必须释放该线。
SS还作为数据发送使能端,若一方有数据要发送给另一方,则该方控制SS线为低电平,并在发送结束后将该线置高电平,接收数据方不得控制该线,双方必须遵守该通信协议,不得同时控制该线。
SDATA为数据线,由数据发送端控制数据,接收端必须释放该线。SDATA在一次传输开始时还同时作为数据接收端的响应信号。
1.2 ZLG500与MCU接口的时序及通信协议
ZLG500与MCU无论数据传输的方向如何,SPI 线上信号的波形总是如图2所示。由图中可以看出,在SS为低时,时钟和数据线上的信号才有效;且在SCLK为低时,SDATA才变化,在SCLK为高时,SDATA应保持稳定。
以上传输中,从数据发送器请求开始至数据接收器响应的时间是不确定的,取决于接收器内的MCU是否忙。因此,有必要设置看门狗定时器对数据接收器的响应进行监视,一旦接收器响应,则MCU必须根据数据传输方向,严格控制以下几个时间,以确保数据传输无误。
t1:数据接收器响应至MCU产生第1个SCLK上升沿的时间。
t2:2个字节传输之间SCLK低电平的持续时间。
t3:传输最后1个字节的最后1位的SCLK信号的上升沿至SS上升沿的时间。
tH:SCLK信号的高电平持续时间。
tL:SCLK信号的低电平持续时间。
数据传输的方向不同时,对时间t1、t2、t3、tH、tL都有各自不同的要求。
MCU与ZLG500的通信必须先由MCU发送命令和数据给ZLG500,ZLG500执行命令完毕后,将命令执行的状态和响应数据发回给MCU。
开始通信前,收发双方必须处于空闲状态。首先由MCU发出SS下降沿信号,然后等待ZLG500在SDATA线上的响应,若在50 ms内未检测到此信号,则退出本次传输。若正确响应,则MCU可将命令和数据发送出去。然后MCU等待ZLG500发回的状态和响应数据,即等待SS线上的下降沿信号,若在50 ms内未检测到此信号,则退出本次传输;若正确检测到SS信号,则可以接收状态和数据。
2 智能卡门禁系统设计
2.1 智能卡门禁系统的总体结构
系统采用Philips公司的非接触智能IC卡Mifare 1卡,以M1卡作为用户卡,以用户卡的序列号SN(全球唯一)为依据控制门的开启。由于它是一个高频卡(工作频率为13.5 MHz),有较强的抗干扰能力且读写距离远(2.5 cm~10 cm)。
整个智能卡门禁系统分为3部分:(1)读写器部分,包括MCU、复位电路、时钟电路、显示电路、键盘、数据存储等主控模块及非接触IC卡读写模块和电锁驱动部分;(2)中央控制电脑的软件管理系统模块;(3)中央控制电脑与读写器之间的数据传输模块。其总体系统框图如图3所示。
首先,在发卡系统(中央控制PC机)里把用户的卡号及个人信息输入系统数据库,并将该卡号作为合法卡号下载给所有门禁机。当有1张M1卡在门禁机的有效工作范围内时,系统会自动向卡发出命令,卡接收到命令后向门禁机反馈其SN,门禁机判断收到的卡号是否合法,合法则驱动电磁门锁开门,并实时上传其开门记录;如果是非法卡(未经授权或已挂失的卡)则拒绝开门并上传报警信息。只有最高授权者(掌握授权密码)才可以发管理员卡,管理员必须用管理员卡方可登录发卡系统进行发卡/下传合法卡号、挂失、解挂、下传黑名单等操作。
通过AT89C52对ZLG500的控制达到对卡的读写。系统外围配有RS232转RS485的接口并能与PC机互连成网络,可以完成读卡、显示卡号和出入时间、身份识别、开锁以及保存和上传出入记录、下载黑名单、设置开门权限等功能。
门禁机模块的主控软件主要完成门禁机模块的初始化、卡的识别、开启门锁及保存有关数据和数据的传输等5大功能。其总体工作流程如图4所示。
2.2 主控模块
如图3所示,智能卡门禁系统中主控模块主要由MCU(AT89C52)、ZLG500、复位电路、时钟电路、数据存储接口电路、键盘与显示接口电路及电锁等几个部分组成。MCU除了完成对ZLG500读写模块的控制外,还要承担其他功能的控制,主要包括4大部分:数据存储和数据传输、实时时钟和掉电保护、键盘和显示、驱动控制。
2.2.1 数据存储和数据传输模块
各门禁点的出入记录可采用实时上传或定时采集的方式从门禁机传输给中央数据库,前者对系统网络速度要求较高,当网络堵塞时有丢失数据的可能。本系统采用了出入记录暂时存储在门禁机中、每隔一段时间(例如每周1次)上传给中央数据库的方式,为此要求门禁机具备一定容量的存储器,用于暂存门禁数据以及由中央数据库下载的授权卡号。门禁机存储器的容量取决于一个门禁记录的长度、系统的卡容量以及定时上传周期内最大的刷卡次数等,通常应留有一定的余量以免由于超出存储容量而丢失数据。本系统采用了AT24C256作为门禁机的存储器,其存储容量达64 KB,划分成2个区,一个区用来存储所读取的记录,另一个区用来存储上位机下载的授权卡号。门禁机存储器模块的电路原理图如图5所示。
AT24C256是ATMEL公司具有I2C总线结构、可电擦写与编程的只读存储芯片(EEPROM),MCU对AT24C256的读写必须遵循I2C总线传输的时序要求,且向AT24C256写入和读出数据的时序和格式要求与AT24C01基本一致。
单一的读写器,自身的数据存储是有限的,读写器外带的数据存储器主要作为数据的临时存储,对于大量的、需要长期保存的数据,一般是通过有线或无线、甚至网络系统传输到主控计算机中进行保存。
2.2.2 主模块的软接口
以主模块中ZLG500与MCU(AT89C52)通信为例介绍智能卡门禁系统中主模块的软接口。ZLG500初始化的子程序如下:
SCLK BIT P1.0
SDATA BIT P1.1
SS BIT P1.2
RST BIT P3.3
Zlg500: SETB RST ; ZLG500内部复位
LCALL DELAY_50MS
CLR RST
LCALL DELAY_50MS
SETB SS ; 处于空闲状态
CLR SDATA
CLR SCLK
MOV 58H,#11H
MOV 59H,#11H
MOV 5AH,#11H
MOV 5BH,#11H
LCALL CONFIG ; 配置
LCALL REQUEST ; 发送请求
LCALL ANTICOLL ; 防碰撞
;*********** IF HAVE CARD ***********
MOV A,52H
CJNE A,#04H,SA123 ; A=04 IS NO CARD
LJMP SA234
SA123: RET
SA234: LCALL READ_BLOCK ; 从存储器中读取数据
LCALL DELAY_100MS
MOV R2,#20
MOV R0,#58H
MOV R1,#80H
LCALL COMPARE ;进行卡号的比较和验证
REL13: SETB FLAG
LCALL REL123
JB FLAG,REL13
RET
上述程序中CONFIG子程序为RC500的复位和配置子程序,是由MCU向ZLG500发出的不带数据的命令程序;REQUEST子程序是MCU向ZLG500发出的带一个字节数据的命令程序,主要是检查在有效范围内是否有卡存在;ANTICOLL子程序是防冲突操作,必须在执行了REQUEST命令后立即执行。
2.2.3 时钟控制
在门禁系统中,需要实时记录出入数据(开门的卡号及其出现的时间)。若采用单片机软件计时,一方面需要占用硬件计数器资源,另一方面需要设置中断、查询等,耗费单片机的CPU资源。而在系统中采用芯片DS1302则能很好地解决这个问题。DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,且具有闰年补偿功能,工作电压为2.5 ~5.5 V。图6所示是实时时钟芯片DS1302与MCU连接电路原理图。DS1302采用三线接口与MCU进行同步通信,并可采用突发方式1次传送多个字节的时钟信号或RAM数据。
MCU对DS1302的读写控制主要包括DS1302的初始化和读取DS1302的时间和日期,初始化过程就是给DS1302赋予初始的时间和日期。当实时时钟芯片被启动后,在没有接收到新的初始化指令情况下,使内部的时钟将一直不停地运行,从而保证时间的实时性和准确性;MCU在任何时候都可以通过读取DS1302内部时间和日期寄存器中的值而获得准确的时间和日期。关于实时时钟芯片的使用可参见参考文献[2]。
3 与上位机的通信软件接口设计
上位机数据库管理系统采用Visual FoxPro编写。本系统采用标准的通信控件communications进行通信程序的设计,实现挂失数据的发送、用户卡号的发送、发卡和门禁模块数据的接收。每次通信时,首先在上位机的init事件中初始化通信控件olecontrol1,初始化设置为:
thisform.olecontrol1.CommPort=1 //选择串行口com1
thisform.olecontrol1.PortOpen=1 //打开串行口com1
thisform.olecontrol1.InputMode=0 //接收的数据按文本方式
thisform.olecontrol1.RTSEnable=1 //允许使用rts线,用于RS-232/485转换器的发送控制和供电
thisform.olecontrol1.InputLen=1 //每次读取接收缓冲区的1个字符
thisform.olecontrol1.OutbufferCount=0 //清除发送缓冲区
thisform.olecontrol1.InbufferCount=0 //清除接收缓冲区
智能卡的应用并不是简单的读写卡操作,而是一个综合性的工程项目。它不仅包括卡和读写模块的选择,还涉及到读写模块的控制、数据的传输、数据的处理和存储;既需要有硬件应用的知识、还必须具有软件方面的能力。本系统经过实际应用的验证,系统运行稳定可靠,操作简单方便,因而具有较好的应用前景。
参考文献
[1] 广州周立功单片机发展有限公司.ZLG500C Mifare卡读写模块应用. http://www.zlgmcu.com.2008-09.
[2] 洪家平.DS1307及在太阳能电池控制装置中的应用[J].湖北师范学院学报,2007(3).
[3] 高美珍.AT88RF020型射频识别卡及其应用[J].国外电子元器件,2006(2).
[4] 林凌,李刚,丁茹,等.新型单片机接口器件与技术[M].西安:西安电子科技大学出版社,2005.