1、非接触 IC 卡读卡器的开发研究非接触 IC 卡读卡器的开发研究李扬弘李秉智(重庆邮电学院计算机学院,重庆 400065)(重庆邮电学院移通学院,重庆 400065)E-mail:摘要随着高校招生规模的不断扩大,各学校原有的消费和管理模式已不能适应新的发展要求,先进的校园一卡通系统的出现带来了管理工作的革命.论文介绍了校园一卡通的组成和应用,对非接触IC 卡,串口通信,多线程等技术进行了研究,提出了使用多线程,串口等技术开发基于 PC 控制的非接触 IC 卡读卡器系统作为校园一卡通系统的一个重要子系统,建立非接触 IC 卡子系统模型,并给出了程序的测试结果.关键词一卡通串口非接触 IC 卡多线
2、程文章编号 10028331 一(2005)32010603 文献标识码 A 中图分类号 TP3l1TheResearchinReaderofContactlssICCardLiYanghongLiBingzhi(SchoolofComputer,ChongqingUniversityofPostsandTelecommunication,Chongqing400065)(SchoolofMobileTelecommunication,ChongqingUniversityofPostsandTelecommunication,Chongqing400065)Abstract:Withthed
3、evelopmentofuniversities,theoldmodelofconsumerandmanagementcantsatisfythepresentdemand,SOtheschoolsystemofonewaycardappears.Firstlythepaperintroducsthestructureandtheapplyofone-waycard,andanalyzesthecontactlessICcard,serialinterface,muhithread.ThenthesystemofcontactlessICcardcontrolledbyPCisprovided
4、astheimportantsubsystemoftheschoolsystemonewaycard.FinallythepaperestablishesthesubsystemmodelofcontactlessICcardandliststhetestresult.Keywords:serialinterface,contactlessICcard,multithread随着高校招生规模不断扩大,学生人数逐渐增多,用传统的方法进行管理工作已经不能快速高效地解决学生提出的学习,生活,消费的需求问题.校园一卡通系统就是使用先进的非接触 IC 卡技术以及网络通讯技术,针对学校的综合管理而开发设计
5、的.一卡通系统以非接触 IC 卡作为载体,结合电子技术,非接触 IC 卡技术,计算机网络技术以及数据库技术等.使其具有身份识别和电子钱包的功能,可替代校园日常生活所需各种证件和现金交易,达到证件,考勤,消费娱乐,餐饮等收费的全电子化和智能化.结束了传统校园生活中证件,卡片和票据满天飞的情况,将多种管理系统集成为一体,以一卡通的形式进行诸如签到考勤,身份证明,借阅图书,校园消费等多种活动,使用方便快捷,安全可靠,做到“一卡在手,走遍校园“.l 校园一卡通系统简介构建校园一卡通系统是为了利用已有的校园网络和普及的 PC 机建成一个用于综合管理的系统 ,它主要由数据库服务器,PC 机,非接触 IC
6、卡,读卡器和通讯网络及其所需软件组成.系统的设计原则为安全,快捷,一卡通用性和可扩展性.网络结构采用业界流行的 Client/Server 体系结构,数据库服务器采用目前流行的 SQLServer 构建数据库,其基本表包括学生信息表,教师信息表,课程安排信息表,电子钱包剩余金额信息表等,随系统扩展可加入更多的基本表.数据库进行字段加密.作者简介:李扬弘(1980 一),男,硕士研究生,主要研究方向:三网融合.1062005.32 计算机工程与应用只能通过服务器端程序手动或者自动访问,避免直接对数据库进行不安全的访问.作为客户端的 PC 机上运行客户端程序 .控制读卡器运作并与服务器端程序进行数
7、据通信.用户持非接触 IC 卡,可在各种读卡器上进行相应的操作,或在客户端 PC机上做许可范围内的查询.读卡器程序与非接触 IC 卡进行相互通信和系统数据库进行操作管理.是整个一卡通系统的控制程序.读卡器程序的开发,是实现一卡通系统的关键.一卡通系统结构框图如图 1 所示图 1 一卡通系统结构图2 非接触 IC 卡子系统非接触 IC 卡子系统由读卡器,非接触 IC 卡,PC 机以及运行在 PC 上的控制程序组成 .读卡器和非接触 IC 卡之间使用射频技术进行通信.2.1 射频技术及 MIFARE 非接触 IC 卡介绍射频识别技术是利用射频方式进行非接触双向通信.以达圆蜀/,暑到识别目的并交换数
8、据.它与同期或早期的接触式识别技术不同.RFID 系统的射频卡和读写器之间不用接触就可完成识别.因此它可在更广泛的场合中应用.其工作原理如图 2 所示.与计算机通信图 2 射频技术原理图MIFARE 非接触式 IC 卡由 IC 芯片,感应天线组成.并完全密封在一个标准 PVC 卡片中,无外露部分.读写过程通常由非接触型 IC 卡与读写器之间通过无线电波来完成读写操作.卡本身是无源体,当读写器对卡进行读写操作时.读写器发出的信号由两部分叠加组成:一部分是电源信号,该信号由卡接收后,与其本身的 UC 产生谐振,产生一个瞬间能量来供给芯片工作.另一部分则是结合数据信号,指挥芯片完成数据的读取,修改,
9、存储等,并返回给读写器.由非接触式 IC 卡所形成的读写系统,无论是硬件结构,还是操作过程都得到了很大的简化,同时借助于先进的管理软件,可脱机的操作方式.都使数据读写过程更为简单.2.2ZLG500B 读卡模块数据传输协议ZLG500B 是一个简单的串行读写模块.包括一个 PCB 天线,提供一个 UART 接口(CMOS 电平).UART 接口一帧的数据格式为 1 个起始位,8 个数据位,无奇偶校验位,1 个停止位.自动波特率探测.ZLG500B 上电后.将 RC500 内的 EERPOM中地址为 07F 单元的内容读出.取其低 2 位来初始化自己的波特率.在接收主机发出的 STX 的同时.测
10、量波特率 ,若一致,则继续通信;若不一致,则修改自己的波特率与主机一致 .存人07F 单元,准备接收下一个 STX.STX 为开始符,值为 0x20;ETX 为终止符 ,值为 Ox03;应答 ACK 和无应答 NAK 的值分别为 0x06,0-15.开始通信前,主机和 ZLG500B 斗处于就绪状态.主机首先发出 STX.然后等待 ZLG500B 的响应 ACK 若在 10ms 内未检测到此响应.或收到 NAK.则再次发送 STX,若三次均未收到正确应答,则退出本次传输,将错误代码返回主程序.由主程序进行错误处理.若收到正确响应 ACK,则发送数据块.最后发送终止符 ETX 结束本次发送 .2
11、_3 基于串口通信的读卡器开发2.3.1 程序界面开发系统采用对话框形式作为界面,包括主界面,设置界面,读写操作界面和网络操作界面共四个界面.主界面用按钮连接到其他三个界面.主界面使用一个按钮来提供自动签到和手动操作,由单击按钮在签到和操作之间切换.签到系统为自动控制.屏蔽除退出以外的其他按钮,读卡器每读到一张属于本系统的卡,就自动将所读到的学号,读卡器号和当前时间记录到本地数据库,以便于统计查询.选取操作则可使用从服务器数据库调用详细资料,修改卡中数据等需要手动操作的其他服务,例如电子钱包消费或初始化向卡写人数据.设置界面由主界面“设置“ 按钮打开,提供串口和波特率设置.读写操作界面由“读写
12、卡“ 按钮打开,能读写卡中特定允许地址的数据.网络操作界面由“网络操作“ 按钮打开,提供对远程数据库的读写和更新 .2.3.2 基于多线程的串口通信串行端口的本质功能是作为 CPU 和串行设备间的编码转换器.当数据从 CPU 经过串行端口发送出去时.字节数据转换为串行的位.在接收数据时,串行的位被转换为字节数据.在Windows 环境(WindowsNT,Win98,Windows2000) 下,串口是系统资源的一部分.应用程序要使用串口进行通信.必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口).在 MFC 下 32 位串口通信程序可以用以下三种方法实现
13、:利用 VC+的标准通信函数一 inp 和一 outp 可实现串 El 通信,利用 ActiveX 控件和使用 API 通信函数.VC+6.0 的标准通信函数用类似 i=inp(PORT+5)0xfe.outp(PORT+5,i)的形式操作串口 .VC+6.0 提供的 MSComm 控件通过串行端口发送和接收数据.为应用程序提供串行通信功能,编程时只需将控件对话中的 MSComm 控件拖至你的应用对话框中,在主对话框的.h 文件中为新创建的通信控件定义成员对象(CMSCommm_Comm),通过该对象便可以设置操作MSComm 控件的 27 个属性 .格式为“mComm. 属性“.控件虽然简单
14、易用,但由于必须拿到对话框中使用.在一些需要在线程中实现通信的应用场合下,控件的使用显得捉襟见肘.API 是附带在 Windows 内部的一个极其重要的组成部分,Windows 的32 位 API 主要是一系列很复杂的函数和消息集合.它可以看作是 Windows 系统为在其下运行的各种开发系统提供的开放式通用功能增强接口.ZLG500B 开发板使用 VC+标准通信函数封装了一些底层和高层库函数.使用这些库函数可以简化开发工作.首先将库函数文件放人工作目录中.在.CPP 中包含 zlg5OOB.h 头文件,然后将 zlg5OOB.1ib 加入到工程文件中.这样在程序中 .就可以象调用 VC 库函
15、数一样调用这些函数了.程序采用多线程技术.解决串口输入的瓶颈问题,当读卡工作线程运行的时候.程序可以做一些其他的事情.比如操作服务器数据库等.而用户界面始终可以继续操作,一个永远有反应的 UI 是很重要的.除由进程产生的主线程外,程序产生三个工作线程.分别用于卡的检测,卡的操作和 socket 通信.由主程序创建检测卡的工作线程:pCheckThread=AfxBeginThread(ThreadFunc,this,0,THREADPR10RI,IYN0RMAL,CREATESUSPENDED)其中最后一个参数表示创建线程的同时挂起线程,在程序中由设置按钮的响应函数在设置端口和波特率后恢复线程
16、运行.主线程由按钮事件驱动控制整个程序流程,产生需要的工作线程.程序人口之前声明一些全局变量,包括读卡所需的数据,缓冲区,序列号等的全局结构 datas 和全局标志量等,用于各线程之间数据通信.程序流程结构图如图 3 所示.无接触 IC 卡本身是无源体.由读卡器发出的信号提供工作能量,所以读卡器工作线程采用主动轮循检测卡.在关闭软件之前,它将一直运行.读卡线程设置一静态变量用于每次结束后储存卡的序列号,初始化读卡模块,然后开始检测有效范围是否有卡.发现卡后获得序列号存人局部变量,装载密码防冲撞选择,选择卡进行认证,成功后驱动蜂鸣器并比较获得的序列号的局部变量和存上次的序列号的静态变量,不同则更
17、新静态变量的序列号并检测运行状态:为签到状态就读人特定地址需要的数据,写入到本地数据库,为操作状态就设置标志量,完成所有步骤或者某一步不能通过都返回循环开始处继续查计算机工程与应用 2005.32107圃将数据写入到本地数据库读人特定地址的数据检测到卡一Yn载密码,防冲撞_I菇 l卡,以征n功(y/n)/_0y一,较卡序号新卡(,/lY签到操作程序人口初始化.读卡器线程声明端口设置“Lyl/打开串口,读写操y),/,作按钮,l 读写操作网络操 I作按钮】f 网络线程1 客户端 s0eket设置标志量退程序结束图 3 程序流程结构框图找.程序提供一个全局二维链表.首节点保存当天日期,其他节点保存
18、已签到卡号.每次读卡后在链表中查找卡号,为新卡则增加节点将卡号写入.再将所需数据写入数据库.以此来保证不重复签到.操作状态下由读写操作按钮事件建立读写操作线程.扇区和块选择由读写操作界面上用户输入然后传递给线程函数.每一次读写,增加或减少数据之前必须首先请求应答与卡建立第一步联系,防冲撞在多张卡片中选定一张,select 卡片选择明确可对卡进行下一步操作.上述的三个步骤确认已经选择了一张卡片.还必须对卡片上已经设置的密码进行认证,如果匹配,则允许进一步的读写等操作.对卡的密码验证的三遍认证过程:由 Mifare 卡片向读写器发送一个随机数据 RB;由读写器收到 RB 后向 Mifare 卡片发
19、送一个令牌数据 TOKENAB.其中包含了读写器发出的一个随机数据 RA;Mifare 卡片收到 TOKENAB 后.对 TOKENAB 的加密的部分进行解密,并校验第一次由 Mifare 卡片发出去的随机数 RB 是否与环中接收到的 TOKENAB 中的 RA 相一致;如果校验是正确的,则Mifare 卡片向读写器发送令牌 TOKENBA 给读写器: 读写器收到令牌 TOKENBA 后,读写器将对令牌 TOKENBA 中的RB 进行解密 :并校验第一次由读写器发出去的随机数 RA 是否与接收到的 TOKENBA 中的 RB 相一致:如果上述的每一步都为“真“, 都能正确通过验证,则整个的认证
20、过程将成功 .读写器将能对刚刚认证通过的卡片上的这个扇区可以进入下一步的操作(READ,WRITE 等操作).卡片中的其他扇区由于有其各自的密码.因此不能对其进行进一步的操作.如想对其他扇区进行操作.必须完成上述的认证过程.认证过程中的任何一环出现差错.整个认证将告失败,必须从新开始.MIFARE 卡片上有 16 个扇区.每个扇区都可分别设置各自的密码.互不干涉.因此每个扇区可独立地应用于一个应用场合,满足一卡多用的需要.程序里放置了一个身份验证模块来维护系统安全.确保用户不能越权使用.用户在对卡数据或数据库进行操作的时候会要求输入密码.不同的用户输入不同的个人密码将拥有不同的权限,密码是与卡
21、相对应的,刷卡相当于输入用户名.不输入任何密码只能基本的签到功能.输入用户密码可以查询个人资料,通过键盘输入密码,允许持卡人输入三次密码,如果三次输的都不对,卡就会被锁住.只有 PIN 码对了.用户才能对卡进行1082005.32 计算机工程与应用.一一I 数据操作线程 l【,._标志量检测事厂 lI!|TlIJr_!_l1 结束线程 1_ji 兰广 1 竺兰 1操作.高级系统管理员才有权限修改用户卡和数据库资料和让锁住的卡重新投入使用.保证整个系统安全使用.程序在运行过程中检测到串口上下行数据为:【Write 数据:】20 主机首先发送【Read 数据:】06 收到 ZLG500B 的正确响
22、应【Write 数据:】005200AD03 主机发送打开串口的命令 03 作为终止符【Write 数据:】20【Read 数据:】06【Write 数据:】o0410100BF03 主机发送 request 命令【Read 数据:】20【Write 数据:】06【Read 数据:】0000020400F903request 命令成功返回【Write 数据:】202020 主机收不到响应的情况,将连发三次后返回通过长达 lOOh 的单机测试,程序运行良好,完全能达到设计的要求.3 结束语基于 PC 开发读卡器程序 .是实现校园一卡通系统的关键.利用现有普及的 PC 机 ,能缩减构建系统的成本. 提高资源利用率,简化校园管理,方便学生的校园生活.随着不断深入研究完善校园一卡通系统,系统将能应用到更多领域.有着广阔