现在智能卡的应用越来越广泛,如校园一卡通系统、城市公交系统、大型会议签到系统、考勤系统、门禁系统等都使用了智能卡。本文以ZLG500读写模块作为卡与门禁机交换数据的接口模块,介绍了ZLG500在智能卡门禁系统中的应用。
1 读写模块ZLG500简介
1.1 ZLG500与MCU的接口原理
ZLG500模块采用Philips公司最新的高集成ISO14443读卡芯片MF RC500,它能读写RC500内EEPROM,提供三线制SPI接口,并具有控制线输出端口,能与任何MCU连接。ZLG500与MCS51单片机的接口原理图如图1所示。此外该模块的EMC性能优良,并且自带无源蜂鸣器信号输出,能用软件控制其输出频率及输出持续时间。
图1 ZLG500与MCS51单片机的接口
图中SCLK、SDATA、SS为ZLG500与MCU相连接的控制线,分别为时钟线、数据线和片选。主控制器的MCU和读卡模块内的MCU通过此三线相连。接口空闲时,主机的SS=1,SCLK=0,SDATA=0,而从机的SS=1,SCLK=1,SDATA=0。其中SS和DATA都是双向的,而时钟线SCLK是单向的,即时钟只能由主控制器产生,该信号必须严格遵守时序规范,否则将出现通信错误,此时读卡模块必须释放该线。
SS还作为数据发送使能端。若一方有数据要发送给
另一方,则该方控制SS线为低电平,并在发送结束后将该线置高电平。接收数据方不得控制该线,双方必须遵守通信协议,不得同时控制该线。
SDATA为数据线,由数据发送端控制数据,接收端必须释放该线。该线在一次传输开始时还同时作为数据接收端的响应信号。
1.2 ZLG500与MCU接口的时序及通信协议
ZLG500与MCU无论数据传输的方向如何,SPI线上信号的波形总是如图2所示。由图中可以看出,在SS为低时,时钟和数据线上的信号才有效;在SCLK为低时SDATA变化,在SCLK为高时SDATA应保持稳定。
图2 ZLG500三线制通信的时序
以上传输中,从数据发送器请求开始至数据接收器响应的时间是不确定的,取决于接收器内的MCU是否忙,因此有必要设置看门狗定时器对数据接收器的响应进行监视。一旦接收器响应,则MCU必须根据数据传输方向,严格控制以下几个时间,以确保数据传输无误。
t1: 数据接收器响应至MCU产生第一个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)卡。以M1卡作为用户卡,以其全球唯一的序列号SN为依据控制门的开启。由于它是一个高频卡,工作频率为13.5 MHz,因而具有较强的抗干扰能力且读写距离远(2.5~10 cm)。
整个智能卡门禁系统分为三大部分:其一是读写器部分,包括MCU、复位电路、时钟电路、显示电路、键盘、数据存储等主控模块及非接触IC卡读写模块和电锁驱动部分;其二是中央控制电脑的软件管理系统模块;其三是中央控制电脑与读写器之间的数据传输模块。总体系统框图如图3所示。
图3 非接触式IC卡门禁系统框图
首先,在发卡系统(中央控制PC机)里把用户的卡号及个人信息输入系统数据库,并将该卡号作为合法卡号下载给所有门禁机。当有1张M1卡在门禁机的有效工作范围内时,系统会自动向卡发出命令,卡接收到命令后向门禁机反馈其SN。门禁机判断收到的卡号是否合法,合法则驱动电磁门锁开门,并实时上传其开门记录;如果是非法卡(未经授权或已挂失的卡)则拒绝开门并上传报警信息。只有最高授权者(掌握授权密码)才可以发管理员卡,管理员必须用管理员卡方可登录发卡系统进行发卡及下传合法卡号、挂失、解挂、下传黑名单等操作。
通过AT89C52对ZLG500的控制完成对卡的读写。系统外围配有RS232转RS485接口能与PC机互连成网络,可以完成读卡、显示卡号和出入时间、身份识别、开锁以及保存和上传出入记录、下载黑名单、设置开门权限等功能。
门禁机模块的主控软件主要完成门禁机模块的初始化、卡的识别、开启门锁及保存有关数据和数据传输等五大功能。其总体工作流程如图4所示。
图4 非接触式IC卡门禁系统程序流程
2.2 主控模块
由图3可以看出,智能卡门禁系统中主控模块主要由MCU(AT89C52)、ZLG500、复位电路、时钟电路、数据存储接口电路、键盘与显示接口电路及电锁等几部分组成。可以看出MCU除了完成对ZLG500读写模块的控制外,还要承担其他功能的控制,主要包括4部分:数据存储和数据传输部分、实时时钟和掉电保护部分、键盘和显示部分、驱动控制部分。
2.2.1 数据存储和数据传输模块
各门禁点的出入记录可采用实时上传或定时采集的方式从门禁机传输给中央数据库,前者对系统网络速度要求较高,当网络堵塞时有丢失数据的可能。本系统采用出入记录暂时存储在门禁机中,每隔一段时间(例如每周一次)上传给中央数据库的方式。为此要求门禁机具备一定容量的存储器,用于暂存门禁数据以及由中央数据库下载的授权卡号。门禁机存储器的容量取决于一个门禁记录的长度、系统的卡容量以及定时上传周期内最大的刷卡次数等,通常应留有一定的余量以免由于超出存储容量而丢失数据。本系统采用AT24C256作为门禁机的存储器,其存储容量达64 KB,划分成2个区: 一个区用来存储所读取的记录,另一个区用来存储上位机下载的授权卡号。门禁机存储器模块的电路原理如图5所示。
图5门禁系统存储器模块电路原理图
AT24C256是Atmel公司的具有I2C总线结构,可电擦写与编程的只读存储芯片(EEPROM)。MCU对AT24C256的读写必须遵循I2C总线传输的时序要求,与AT24C01基本一致,在此不再赘述。
对于1个单一的读写器来讲,自身的数据存储是有限的。读写器外带的数据存储器主要作为数据的临时存储,对于大量的、需要长期保存的数据,一般是通过有线或无线,甚至是网络系统传输到主控计算机中进行保存。
2.2.2 主模块的软接口
下面以主模块中ZLG500与MCU(AT89C52)的通信为例来介绍智能卡门禁系统中主模块的软接口。ZLG500初始化的子程序如下:
SCLK BITP1.0
SDATA BITP1.1
SS BITP1.2
RST BITP3.3
Zlg500: SETBRST; ZLG500内部复位
LCALLDELAY_50MS
CLRRST
LCALLDELAY_50MS
SETBSS ; 处于空闲状态
CLR SDATA
CLR SCLK
MOV58H,#11H
MOV59H,#11H
MOV5AH,#11H
MOV5BH,#11H
LCALLCONFIG;配置
LCALLREQUEST;发送请求
LCALLANTICOLL;防碰撞
;*****若有卡*****
MOV A,52H
CJNEA,#04H,SA123; A=04 为无卡
LJMPSA234
SA123: RET
SA234:LCALLREAD_BLOCK;从存储器中读取数据
LCALLDELAY_100MS
MOVR2,#20
MOVR0,#58H
MOVR1,#80H
LCALLCOMPARE;进行卡号的比较和验证
REL13:SETBFLAG
LCALLREL123
JBFLAG,REL13
RET
上述程序中CONFIG子程序为RC500的复位和配置子程序,是由MCU向ZLG500发出的不带数据的命令程序;REQUEST子程序是MCU向ZLG500发出的带1个字节数据的命令程序,主要是检查有效范围内是否有卡存在;ANTICOLL子程序是防冲突操作,必须在执行REQUEST命令后立即执行。
2.2.3 时钟控制
在门禁系统中,需要实时记录出入数据(开门的卡号及其出现的时间)。若采用单片机软件计时,一方面要占用硬件计数器资源,另一方面需要设置中断、查询等,耗费单片机的CPU资源。而在系统中采用芯片DS1302则能很好地解决这个问题。DS1302是美国Dallas公司推出的高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周末、时、分、秒进行计时,且具有闰年补偿功能,工作电压2.5~5.5 V。图6所示是实时时钟芯片DS1302与MCU连接电路原理图,DS1302采用三线接口与MCU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
图6 实时时钟芯片连接电路原理图
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线,
//用于RS232/485转换器的发送控制和供电
thisform.olecontrol1.InputLen=1
//每次读取接收缓冲区的一个字符
thisform.olecontrol1.OutbufferCount=0
//清除发送缓冲区
thisform.olecontrol1.InbufferCount=0
//清除接收缓冲区
结语
智能卡的应用并不是简单的读写卡操作,而是一个综合性的工程项目。它不仅包括卡和读写模块的选择,还涉及读写模块的控制、数据的传输、数据的处理和存储;既需要有硬件应用的知识,还必须具有软件方面的能力。本系统经过实际应用的验证,系统运行稳定可靠,操作简单方便,因而具有较好的应用前景。