目次
1 绪论 1.1 课题研究的背景和意义 1.2 目前国内外研究现状 1.3 本课题设计的主要工作和任务 2 读卡器系统方案设计与实现 2.1 IC卡介绍 2.2 读卡器基本原理 2.3 总体方案论证 3 系统硬件设计与实现 3.1 电源模块 3.2 人机接口模块 3.3 系统时钟模块 3.4 存储模块 3.5 MF-RC500读写模块 3.6 通信模块 4 系统软件设计与实现 4.1 软件设计环境 4.2 主程序的设计 4.3 读/写卡程序设计 4.4 读卡器外围基本电路程序的设计 4.5 通信部分程序设计 5系统调试 结 论 致 谢 参 考 文 献 附录A 总电路图 附录B 读/写卡源程序
1 绪论 1.1 课题研究的背景和意义 IC卡是集成电路卡(Integrated Circuit Card)的英文简称,在有些国家也称之为智能卡、微芯片卡等,IC卡是在较为原始的磁卡的基础上发展起来的,它的最初设想是由日本人提出来的。1969年12月,日本的有村国孝提出一种制造安全可靠的信用卡方法,并于1970年获得专利,那时叫ID卡(Identification Card)。1974年,法国的罗兰·莫雷诺(Roland Moreno)发明了带集成电路芯片的塑料卡片,并取得了专利权,这就是早期的IC卡。1976年法国布尔(Bull)公司研制出世界第一枚IC卡[1]。 早期的IC卡系统是接触式的,它有其本身不可克服的缺点,如接触磨损、交易速率慢、难以维护、基础设施投入大等。随着信息业和服务业的全球化,在一些场合,对信息载体的便携性、安全性及易用性等方面提出更高的要求,于是非接触式IC卡以其无机械磨损、容易维护、方便使用等优点,成为IC卡中潜力最大的新军而备受国内外业界的瞩目。 非接触式IC卡系统是当今世界先进的射频技术和IC卡技术相结合的产物,是世界上最近几年发展起来的一项新技术,它成功地将射频识别技术和IC技术结合起来,解决了无源和免接触这一难题,是电子器件领域的一大突破,使卡片在靠近读写器表面时即可完成卡中数据的读写操作。非接触式IC卡一经问世,便立即引起广泛的关注。非接触式IC卡操作方便、抗干扰性高、可靠性高、安全性高的特点,使得它在一些接触式IC卡不适用或者无法使用的场所,具有无可比拟的优势,被广泛应用于公交、收费、门禁系统、考勤系统等领域[2]。 目前非接触式IC卡有很多不同的标准,如IS014443A和IS014443B等,符合不同标准的卡片在不同的领域内相互渗透和竞争。卡片类型的多样性决定了读卡器的多样性,而市场的多样性则决定了即使是同类型的应用,也可能使用不同类型的卡片,若读卡器只能读取某一种类型的卡片,那么在处理这个应用时,必将需要多台读卡器,造成资源的重复浪费,这样的读卡器必将不能适应市场的需求,这就对读卡器的读卡能力提出了更高的要求。设计出一种能读取多种类型卡片的读卡器,既是市场应用的需求,也是未来的发展趋势。目前,读卡器已经开始大量应用于各种“一卡通”系统中,这些应用对读卡器的功能要求越来越高,除了传统的对卡号的读取之外,需要能够对卡片进行更高层的数据操作,与PC设备之间能进行信息交流。为了适应这种发展趋势,非接触式IC卡的读卡器的开发与设计也迅速发展起来[3]。 1.2 目前国内外研究现状 智能卡的发展历史并不久远,而且全球各地发展不均衡,其中欧洲发展得最早、最好。智能IC卡源于七十年代的欧洲和日本,后来由法国人提出的将处理器置入IC卡卡片中的思想得到了广泛接受,由于其具有完善的密码功能从而有效的解决了智能卡的舞弊行为。随后智能卡在1977-1998年间得到了迅速发展。九十年代初期,智能卡开始应用于GSM数字移动通讯、有线电视的收费等领域。在美国,智能卡发展相对迟缓,但随着智能卡在欧洲的成功使用,其在美国产生巨大影响,尽管如此,美国在智能卡技术等领域仍处于世界领先地位。 据Innovation国际发明组织统计,2005年10月到2006年9月全世界IC卡硬件产业中,IC卡及其读写设备数量分别为42000万张和877000台,其中法国分别占98%和71%,处于世界领先地位。目前,法国生产制造的IC卡不仅在数量上领先各国,其应用领域也灵活多样,如在金融、电信、医疗和交通运输等各个领域都有IC卡的应用 我国对IC卡行业的发展始于1994年,
1.3 本课题设计的主要工作和任务 非接触式IC卡代表了IC卡发展的方向,同接触式IC卡相比其独有的优点使其能够在绝大多数场合代替接触式IC卡的使用,而在非接触式IC卡应用系统中非接触式IC卡读卡器是关键设备。根据课题设计要求,本课题将开发一种基于飞利浦公司MF-RC500读卡芯片的非接触式IC卡读卡器,其具有以下特点:能识别TYPEA型卡片,读取卡号,并有防冲突功能;能对TYPEA 的卡片进行高层操作;可以使用RS232通信接口输出来与上位机之间通信;可根据实际需求将其作为门禁系统中的读卡器,或者一卡通系统中的读卡器。本设计完成后所要达到的主要指标有: (1) 显示系统:液晶屏显示,能显示系统时钟和卡片信息等; (2) 按键操作:能实现对系统的设置和卡上数据的操作; (3) 机器读卡速度:0.5秒可完成一次打卡过程,读卡距离为5至10厘米; (4) 保密性和防伪性:能辨认卡的密码,非授权范围内的卡作报警处理; (5) 存储容量:每台读写器最多可存储2000条记录。 本设计中需要解决的若干关键技术有: (1) 射频识别技术; (2) 软件的安全机制; (3) 由于射频的特殊性给系统调试带来的困难。 该读写器完成以后,既可独立使用,完成基本功能,外扩简单接口后,就能构成IC卡考勤、门禁、售饭一卡通等系统,在公交、校园、娱乐场所等方面有广泛的应用前景。
2.1IC卡介绍 目前经常接触到的IC卡有两种:接触式和非接触式的IC卡。接触式的IC卡通过机械触点从读写器获取能量和交换数据;非接触式IC卡通过线圈射频感应从读写器获取能量和交换数据,所以又称射频卡。日前在社会上常见的是接触式IC卡,它具有存储量大,可实现一卡多用等功能。但是,这类卡的读写操作速度较慢,操作也不方便,每次读写时必须把卡插入到读写器中才能完成数据交换,这样在读写卡片频繁的场合就很不方便,而且读写器的触点和卡片上IC卡的触脚暴露在外,容易损坏和搞脏而造成接触不良。 非接触式智能卡又称射频卡,是近几年发展起来的新技术。它是根据射频电磁感应原理产生的,它的操作只需将卡放在读写器一定距离内就能实现数据交换。它成功地将射频识别技术和IC卡技术结合起来,将具有微处理器的集成电路芯片和天线封装于塑料基片之中。读写器采用兆频段及磁感应技术,通过无线方式对卡片中的信息进行读写并采用高速率的半双工通信协议。其优点是应用范围广、操作方便。因此,在公交、门禁、娱乐场所等方面有广泛的应用前景。目前我国引进的射频卡主要以PHILIPS公司的MIFARE卡为主[6]。 本系统在调试过程中使用的是PHILIPS公司的MFI IC S50,其属于TYPEA型卡,下面对其做一些简述:Mifare1 IC 卡的核心是PHILIPS公司MF1 IC S50系列微模块,它确定了卡片的特性以及卡片读写器的诸多性能。Mifare1 IC智能卡内建有高速的MCU,卡片上除了IC微晶片及一副高效率天线外,无任何其他元件;卡片上无源,工作时的电源能量由读写器天线发送无线电载波信号耦合到卡片上天线而产生电能;它与读写器通信使用握手式半双工通信协议。 2.2 读卡器基本原理 非接触式IC卡读写器以射频识别技术为核心,读写器内主要使用专用的读写处理芯片,它是读/写操作的核心器件,其功能包括调制、解调、产生射频信号、安全管理和防碰撞机制。其内部结构分为射频区和接口区:射频区内含调制解调器和电源供电电路,直接与天线连接;接口区有与单片机相连的端口,还具有与射频区相连的收/发器、数据缓冲器、防碰撞模块和控制单元。这是与智能IC卡实现无线通信的核心模块,也是读写器读写智能IC卡的关键接口芯片。读写器工作时,不断地向外发出一组固定频率的电磁波,当有卡靠近时,卡片内有一个LG串联谐振电路,其频率与读写器的发射频率相同,这样在电磁波的激励下,LG谐振电路产生共振,从而使电容充电有了电荷。在这个电容另一端,接有一个单向导电的电子泵,将电容内的电荷送到另一个电容内存储。当电容器充电达到一定电压值时,此电容就作为电源为卡片上的其他电路提供工作电压,将卡内数据发射出去或接收读写器发出的数据与保存[7]。读卡器的工作过程如下: (1) 读卡器将载波信号经天线向外发送; (2) 卡进入读卡器的工作区域后,卡内天线和电容组成的谐振回路接收读卡器发射的载波信号,射频接口模块将其转换成电源电压、复位信号,使卡片激活; (3) 存取控制模块将存储器中信息调制到载波上,经卡上天线送给读卡器; (4) 读卡器对接收到的信号进行解调、解码后送至后台计算机; (5) 后台计算机根据卡号的合法性,针对不同应用做出相应的处理和控制。 2.3 总体方案论证 2.3.1 各模块方案选择与论证 (1)控制器的选择 方案一:采用ATMEL公司的AT89S52作为系统的控制器。AT89S52单片机算术运算功能强、软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等特点,使其在各个领域应用广泛。AT89S52是我们熟悉的控制器,编程比较熟悉,易于掌握。 方案二:采用FPGA(现场可编程门阵列)作为系统的控制器。由于本设计对数据处理的速度要求不高,FPGA的高速处理优势得不到充分的体现,并且由于集成度高,使其成本偏高,同时由于芯片的引脚较多,实物硬件电路板布线复杂,加重了电路设计和实际焊接的工作。由于AT89S52控制器能够很好的实现该系统的各项功能,成本低,技术成熟,故采用方案一。 (2)RFID读卡芯片的选择 随着RFID市场的迅猛增长,各大传统IC芯片制造商都加入到RFID读卡芯片的开发当中,可供选择的芯片很多,下面介绍几款主流的RFID读写芯片: 1) TI公司的TRF7960芯片。TRF7960是一个整合的13.56MHz RFID读卡器系统的模拟前端和数据帧系统,可以用于较宽范围的近耦合RFID系统。它的特点是完全整合协议处理,内部独立的模拟与数字电源,AM和PM双信号输入接收解调,读卡器与读卡器之间反冲突算法,输出功率可调,内建带通滤波器并且用户可选择边界频率,低功耗设计,掉电模式下电流小于lμA,激活状态10mA;与微处理器接口为8位并行接口或者4线SPI接口[8]。 2) NXP公司(原飞利浦半导体公司)是较早进入RFID芯片行业的国际半导体公司,在射频读写芯片上产品较全。MF-RC500芯片就是NXP公司生产的。MF-RC500是高整合的13.56MHz非接触IC卡读写芯片,整合了所有主动非接触通信方式和协议,MF-RC500支持ISO 14443A&B的所有层的通信方案;内部收发器部分能够驱动近耦合设计的天线而不需要另外的电路;数字部分能处理完整的ISO14443帧数据还有错误检测;具有合适的并行接口,可以直接与8位的微处理器相连,并且支持SPI兼容接口。 由于MF-RC500能够满足设计需求,而且应用范围比其他的芯片更广,资料齐备,于是选择MF-RC500作为本设计的射频接口芯片。 (3)显示模块的选择 方案一:使用LED显示。数码管显示,对外界环境要求低,操作简单,但需要采用动态扫描,占用资源比较多,而且其不能很好的显示字符,由于本系统要显示的信息量较多,所以虽然该方案在程序上容易实现,但并不能满足要求。 方案二:使用液晶显示屏显示各种信息。液晶显示屏具有轻薄短小、低耗电量、平面直角显示以及影像稳定不闪烁等优势,并且符合本系统显示信息量多的需求,利用LCD自带的字符库,进行编程就可以实现所需信息的显示,其不必利用控制芯片创建字符库,既节省了资源,又省去了该部分的大量编程任务。为了使人机界面更加友好,操作更加方便,采用LCD液晶显示。 (4)键盘模块的选择 方案一:采用独立式按键。独立式按键接口设计优点是电路的配置灵活,软件实现简单。但缺点也很明显,每个按键需要占用一跟口线,若按键较多,资源浪费将比较严重。因此本方法主要用于按键较少或对操作速度要求较高的场合。 方案二:采用矩阵式按键。矩阵式按键接口适用于按键数量较多,又不想使用专用键盘芯片的场合。这种方式的按键接口由行线和列线组成,按键位于行、列的交叉点上。这种方的优点是可以节省很多I/O资源,相对于专用键盘可以节省成本,且更为灵活。缺点是需要用软件处理消抖、重键等。由于该系统要求具有对卡片进行读/写操作,系统时钟的设置等,用到的按键较多,故采用方案二。 (5)系统时钟和存储芯片的选择 刷卡时要记录刷卡的时间,用外接硬件时钟芯片的办法,为系统提供一个准确可靠的时钟,用3V备用电池保证在系统掉电时也能正常走时。在此选用体积小、接口简单的实时时钟芯片DS1302。它是美国Dallas公司推出的低功耗串行通信接口专用芯片,采用3线串行方式与单片机进行数据通信[9]。 采用AT24C64作数据存储器。AT24C64是串行E2PROM存储器,支持I2C总线数据传输协议,8K存储器容量,用两根线与CPU构成串行接口。由于本设计采用的AT89S52单片机不具备I2C总线接口,因此采用软件法加以解决。 2.3.2 总体方案确定 根据上述分析,系统设计方案如下:本IC卡读写器拟以ATMEL公司的AT89S52单片机作为微控制器,采用MF-RC500芯片作为射频卡读/写模块,采用DS1302作为系统时钟,以AT24C64作为不掉电存储器,采用LCD显示,并以RS232接口和计算机通信,组成一套功能齐全的非接触IC卡读写系统。当IC卡在天线区域经过时,单片机自动需求对IC卡进行读写,再把读/写卡的时间一起存到存储器中,计算机可以通过串口把相关读/写卡信息读到计算机上,再进行统计、报表和打印输出等。系统框图如图2.1所示。 图2.1 IC卡读写器系统结构框图 3.1 电源模块 该电源按常规设计,为系统工作提供所需电源,其输入为220V、50Hz交流电,输出电压等级为±5V,电路原理图如图3.1所示。该部分主要采用78系列稳压器,结构简单,调整方便,输出电压纹波小。当所需电流超过稳压器标定值时,可采用外接功率管的方法来扩大输出电流。市电交流220V经变压器降压为交流6V,经过全桥整流输出直流电流,再经过1000μF的电解电容滤波,除去整流后的交流成分,送至各三端稳压器,输出需要的电压。经过各三端稳压器稳压后,在LM7805输出端输出+5V直流电压,LM7905输出的端输出-5V直流电压[10]。 图3.1 ±5V直流稳压电源 3.2 人机接口模块 本系统的人机接口部分采用LCD显示、3×2矩阵式键盘,用来实现对IC 卡的操作和系统设置等功能。LCD型号为ACM1602A,该字符型液晶显示模块由字符型液晶显示屏,具有字符发生器ROM可显示192种字符,有64个字节的自定义字符RAM,可自定义8个5?8点阵字符或四个5?11点阵字符。 在此系统中采用LCD分屏显示,每一屏第一行的首地址是80H,第二行的首地址是0C0H;每行写入16个字节,每屏写入二行(第一行为系统的时间,第二行为卡片的信息)。ACM1602A集成度高,其内部已经带有驱动电路,所以不用再为其设计驱动电路,由于1602是一个并口器件所以占用单片机的接口资源较多,为节省单片机接口资源使用了一个74HC595进行串口转并口,使1602与单片机进行间接连接,LCD与单片机的连结图如图3.2所示。 图3.2 LCD显示电路 3.3 系统时钟模块 刷卡时要记录刷卡的时间,用外接硬件实时时钟芯片的办法,为系统提供一个准确可靠的时钟,用3V备用电池保证在系统掉电时也能正常走时,在此选用体积小、接口简单的实时时钟芯片DS1302。 (1)时钟芯片介绍 DS1302是美国DALLAS公司开发的具备功耗低、接口容易串行实时时钟芯片。在本设计中使用的DS1302为8脚DIP封装形式,其中1脚和8脚为电源电压引脚,单电源供电时接8脚,双电源供电时,主工作电源接1脚,备份电源接8脚。2脚和3脚为32.768KHz晶振引脚;5脚RST为复位端,若其被置为低电平,则中止所有数据传送,I/O脚变为高阻态,系统复位;6脚I/O为数据输人/输出端;7脚SCLK为串行时钟输入端,所有地址/命令字节和数据字节都是在时钟的同步控制下从I/O脚串行输入输出的。DS1302通过SCLK、I/O、RST三根线与外部进行同步串行通信。 (2)DS1302与单片机的连接 在本设计中采用单片机的P1.0-P1.2与DS1302进行数据通信,以提供系统所需的时钟,其连接方法如图3.3所示。 图3.3 DS1302与单片机接口电路 3.4 存储模块 在本设计中采用串行E2PROM芯片AT24C64作数据存储器。AT24C64 是ATMEL公司生产的采用I2C 总线标准常用的串行E2PROM 存储芯片,其支持I2C总线数据传输协议,64K(bit)存储器容量,用两根线与CPU构成串行接口。AT24C64一般具有两种写入方式,一种是字节写入方式,还有一种是页写入方式。AT24C64的读操作有当前地址读、随机读、多字节读三种方式。AT24C64其主要管脚功能描述如下:SCL,串行时钟。这是一个输入管脚,用于产生器件所有数据发送或接收的时钟;SDA,串行数据/地址。这是一个双向传输端,用于传送地址和所有数据的发送或接收;A0、A1、A2,器件地址输入端,这些输入端用于多个器件并联时设置器件地址[11]。 在系统中采用单片机的P3.3、P3.4口与AT24C64进行连接,其与单片机的接口接法电路如图3.4所示,由于本系统中采用到的AT89S52单片机不具备I2C总线接口,因此采用软件法加以解决。
图3.4 AT24C64与单片机接口电路 3.5 MF-RC500读写模块 3.5.1 MF-RC500介绍 PHILIPS公司的MF-RC500是应用于13.56MHz非接触式通信中高集成读卡IC系列中的一员。该读卡IC系列利用先进的调制和解调概念,完全集成了在13.56MHz下所有类型的被动非接触式通信方式和协议。MF-RC500支持IS014443A所有的层,其功能框图如下: 图3.5 MF-RC500的功能框图 MF-RC500内部包括并行微控制器接口、双向FIFO缓冲区、中断、数据处理单元、状态控制单元、安全和密码控制单元、模拟电路接口及天线接口。MF-RC500外部接口包括数据总线、地址总线、控制总线、电源等。MF-RC500的并行微控制器接口自动检测连接的8位并行接口的类型。它包含了一个双向FIFO缓冲区和一个可配置的中断输出,这样就为连接各种MCU提供了很大的灵活性,即使使用非常低成本的器件也能满足高速非接触式通信的要求。数据处理部分执行数据的并行-串行转换[12]。状态和控制部分允许对器件进行配置以使性能调节到最佳状态。模拟电路包含一个具有非常低阻抗桥驱动器输出的发送部分,这使得最大操作距离可达100mm,接收器可以检测到非常弱的应答信号。MF-RC500管脚如图3.6所示。 图3.6 MF-RC500管脚图 该器件为32脚SO封装,器件使用了3个独立的电源以实现在EMC特性和信号解耦方面达到最佳性能。MF-RC500具有出色的RF性能并且模拟和数字部分可适应不同的操作电压,其驱动、模拟、数字部分分别使用单独电源供电。 表3.1 天线连接管脚
为了驱动天线,MF-RC500通过TXl和TX2提供13.56MHz的能量载波。根据寄存器的设定对发送数据进行调制得到发送的信号。智能卡采用RF场的负载调制进行响应。天线拾取的信号经过天线匹配电路送到RX脚,RC500内部接收器对信号进行检测、处理,然后将数据发送到并行接口由微控制器进行读取。 表3.2 MF-RC500并行口控制管脚
3.5.2 天线模块的设计 为了同非接触式智能卡通信,读卡器内必须有能发射和接收射频信号的天线。天线用于产生磁通量?,而磁通量用于向应答器提供电源并在阅读器和应答器之间传送信息。因此,对读卡器天线的构造有了三个基本的要求: ? 使天线线圈的电流i1最大,用于产生最大的磁通量?; ? 功率匹配,以最大程度地利用产生磁通量的可用能量; ? 足够的带宽,以无失真地传送数据调制的载波信号[13]。 (1)天线尺寸和读写距离 由于MF-RC500是低功耗设计,因此卡和天线之间的耦合系数必须符合一定的值,卡和天线之间的耦合系数不能低于0.3。天线一般设计为三圈,可以设计为圆形或者方形天线。天线的直径必须介于0.5-1.5mm之间。表3.3 给出了卡和天线的耦合系数为0.3 时的天线大小和读写距离关系表。 表3.3 天线大小和读写距离关系表
根据技术指标以及尺寸等方面的要求,要本设计中读写器天线参数如下: 天线形状:方形天线 天线圈数:三圈 几何尺寸:65mm×54mm 天线导体直径:1mm (2)天线电感的计算 天线的电感必须介于800nH和4.2μH之间。天线的电感通过下列公式计算: (3.1) 其中: L—读卡器天线电感,μH; I—天线导体长度,cm; D—天线导体宽度,cm; N—天线导体圈数; P—由天线线圈的技术而定的N的指数因子。 上述天线线圈的电感公式只能作为首次估测之用,实际的天线线圈的电感必须通过仪器测量而定,但偏差不会很大。根据以上公式以及本设计中的参数,P值取1.6,计算出的天线的电感L得1895μH。 (3)EMC电路及接收电路 EMC电路:射频识别系统的工作频率为13.56MHz,是由一个石英晶振产生的,同时它还产生更高频率的谐波,为了确保能够有效抑制三次,五次和更高次的谐波对信号的干扰作用,需要有一个低通滤波器来滤除这些高次谐波。 接收电路:MF-RC500内部的信号接收部分使用由子载波的双边带调制出的信号,为了减少干扰,在地和VMID间接了一个电容,接收部分需要在Rx和VMID脚之间接一个电阻分压结构。另外,在天线线圈和分压器之间串一个电容会获得质量更高的信号[14]。滤波器与接收电路的电路原理图如图3.6所示。 图3.7 EMC及接收电路 (4)天线电路图 天线电路图如图3.8所示。 图3.8 天线电路 图中电容C2A_a、C2A_b、C2A_a、C2A_b、(通称C2)的值是由天线的电感值决定的,且需要根据天线的形状进行调整。C2电容的大小严格影响读卡器的性能,这就需要在确定了卡的类型之后在实际的使用环境中进行试验,确定不同的C2值,使读卡器具有最好的性能表现。 RC500有一个内部信号驱动管脚AUX,当读卡器发出某一指令时,可以使用示波器观察该引脚的输出信号,不断改变卡与读卡器之间的距离和C2值,示波器输出不同的波形,根据不同的波形即可确定读卡器最好性能的C2值[15]。在本课题设计中,根据天线的参数进行试验,得到的最终C2值如表3.4所示。 表3.4 C2电容值表
(5)天线的品质因数和匹配电阻 用于电感耦合式射频识别系统的天线,其特征值是谐振频率f0和品质因数Q。较高的品质因数Q值会使天线线圈中的电流强度大,由此改善对应答器的功率改善情况。与之相反,天线的传输带宽刚好与品质因数成反比例变化,选择的品质因数过高会导致带宽缩小从而明显地减弱应答器接收到的调制边带。 电感读卡器天线的品质因数可以通过线圈电阻与线圈电阻的欧姆损耗和/或串联电阻的比值计算出来,公式如下: (3.2) 其中fR=13.56MHz,由前面的分析可以知道天线的感抗LANT和阻抗RANT,也可以用仪器测出来。一般情况下Q值在10到50之间,作为数据传输过程这个值还会减小,数据从读卡器到射频卡使用米勒编码,脉冲宽度为T=3μs,带宽B定义如下: (3.3) 所以Q值: (3.4) 考虑到温度漂移等其他因素的影响,实际上可以把Q值定在35是一个比较合理的值。考虑到在估算中减小了Q值,所以这里需要外加一个电阻来调节天线的品质因素,可以用下面的公式来计算REXT: (3.5) 3.5.3 MF-RC500与AT89S52连接图 MF-RC500与AT89S52连接图如图3.9所示,图中单片机AT89S52作为控制核心,主要完成数据采集、处理、存储及控制电路工作;MF-RC500 支持不同的微控制器接口,一个智能的自动检测逻辑可以自动适应系统总线的并行接口。图中使用信号NCS选择芯片。对于MF-RC500,若要使用独立的地址和数据总线与微控制器相连,必须将ALE脚连接到DVDD,若使用复用的地址和数据总线与控制器接口,必须将ALE脚连到微控制器的ALE信号。在本设计中,该读写器采用地址数据总线复用方式与微控制器相连。在对MF-RC500进行读写操作时,若要使用NWR和NRD与微控制器相连,则这两个引脚应该连接到微控制器的读写管脚上。图中使AT89S52的WR和RD管脚分别与MF-RC500的NWR管脚和NRD管脚相连来控制读写使能;MF-RC500工作频率由石英晶体而产生,同时与OSCIN管脚相连可作为外部时钟;P3.2管脚与MF-RC500的IRQ管脚相连用以接收中断请求;由图可以看出,本系统采用中断(INT0)工作模式,即MCU利用MF-RC500提供中断信息对其进行控制。另外,根据系统的需要,可以采用查询方式对MF-RC500进行操作。 图3.9 MF-RC500与AT89S52连接图 3.6 通信模块 本智能卡读写器采用RS232标准来实现读卡器和上位机之间的通信,能实现RS232通信协议的芯片很多,其中MAXIM公司生产的MAX232是一款比较优良的RS232通信芯片。选取它的主要依据在于:单5V电源供电,与读卡器里其它芯片的工作电压相同;符合所有EIA/232E标准;多路输入输出。MAX232其引脚功能说明如表3.5所示。
表3.5 MAX232引脚说明
在硬件电路连接上采用三线制(RXD、TXD、GND)软握手的零MODEM方式,即将PC机和单片机的发送数据线(TXD)与接收数据(RXD)交叉连接,二者的地线(GND)直接相连,而其它信号线、如握手信号均不用,而采用软件握手,这样既可以实现预定的任务又可以简化电路设计、节约成本。MAX232与AT89S52的电路连接如图3.10所示。 图3.10 MAX232与AT89S52的连接图
非接触智能卡系统的软件设计可分为四部分,分别为主程序设计、RC500的读/写程序的设计、读卡器外围基本电路的应用程序设计和通信部分程序的设计。主程序主要包括:IC卡读/写/密码验证/擦除操作程序,RC500通信中断处理程序,键盘中断处理程序,PC机通信中断处理程序,显示程序及存储器读写程序等,对MF-RC500的应用程序的设计也即是对MF-RC500操作指令的程序设计,对读卡器外围基本电路程序的设计包括LCD显示程序设计、键盘扫描程序设计、数据存储程序设计和RS232通信程序设计。 4.1 软件设计环境 一个好的程序设计思想,加上适当的编译软件、仿真器和编程器,是单片机软件开发的基本要求。本系统程序的设计以模块化和结构化的设计思想为指导。单片机开发所使用的语言一般为汇编语言。汇编语言的优点是代码生成效率高,程序运行速度快,其缺点是程序的可读性和可移植性都较差,而且用汇编语言编写单片机应用系统程序的周期长,调试和排错比较困难。C语言是一种通用的计算机程序设计语言,在国际上十分流行,它既可用来编写计算机的系统程序,也可用来编写一般的应用程序。用它编写的程序,具有较好的可读性和可移植性。有经验表明,用C语言编写的程序生成代码的效率仅比用汇编语言编写的程序10~20%。德国Keil软件公司的C51编译器可以直接对8051单片机的内部特殊功能寄存器和I/O口进行操作,直接访问片内或片外存储器,还可以进行各种位操作,能产生简洁、高效率的程序代码,在代码质量上可以与汇编语言相媲美。因此系统在设计中多数的程序使用了C语言进行设计,少数的一些程序用汇编语言编写,用C语言进行调用。 4.2 主程序的设计 读卡器工作的过程是一个复杂的程序执行过程,要执行一系列的操作指令,调用多个函数。其主要包括键盘扫描、LCD显示、读写E2PROM、读/写卡及与上位机通信等。这一系列的操作必须按固定的顺序进行。在没MF1卡进入射频天线有效范围内时,在LCD液晶上显示当前时钟,当有MF1卡进入到射频天线的有效范围内时,读卡程序验证卡及密码成功后,将卡号和读卡时间作为一条记录存入E2PROM存储器中,并在LCD显示器上显示该卡的卡号等信息。 读卡器的主程序主要由下位机来完成,单片机中的程序主要包括:IC卡读/写/密码验证/擦除操作程序,与RC500通信中断处理程序,键盘中断处理程序,与PC机通信中断处理程序,显示程序及存储器读写程序等等[16]。读卡器的主程序流程图如图4.1所示。 图4.1 读卡器主程序流程图 4.3 读/写卡程序设计 4.3.1 MF-RC500指令说明 MCU对MIFARE非接触式智能卡的控制是通过MF-RC500来实现的,MF-RC500是MCU和MIFARE非接触式智能卡之间的通信载体。MCU对MF-RC500的控制是以MCU发出MF-RC500的指令来达到的,MF-RC500收到指令之后执行这些指令。MF-RC500的指令主要有:Request std,Request all,Anticollision,Select,Authentication,Read,Write,它们可以完成MCU对MIFARE非接触式智能卡的很多应用场合的控制。 MCU对MF-RC500的某一指令操作不是简单的一条指令所能完成的,必须有一个程序的序列来完成,其中有对MF-RC500硬件内核寄存器的读/写以及根据读出的硬件内核寄存器的内容进行语言软件上的判断和设置。不同的指令将设置不同的MF-RC500内部寄存器以及应有不同的编程语言程序序列。MF-RC500具体指令说明及程序设计如下: (1)“Answer to Request”(应答或复位应答) 表4.1 复位应答指令
Request指令将通知MF-RC500在天线有效的工作范围内寻找WARE卡片。如果有MIFARE卡片存在,这一指令将分别与MIFARE卡片进行通信,读取WARE卡片上的卡片类型号TAGTYPE,由MF-RC500传递给MCU,进行识别处理。Request指令分为Request std和Request all两个指令。 Request all指令是非连续性的读卡指令,只读一次,它可以防止MF-RC500选择同一卡片好几次。当某一张卡片在MF-RC500天线的有效工作范围内,Request all指令在成功地读取这一张卡片之后,将一直等待卡片的使用者拿走这张卡片,直到有新一张的卡片进入M- RC500天线的有效工作范围内。 Request std指令的使用和Request all指令相反,Request std指令是连续性的读卡指令。当卡片在MF-RC500天线的有效工作范围内,Request std指令在成功地读取这一张卡片之后,对卡进行其他操作。如果其他操作完成之后,程序员又将MF-RC500进入Request std指令操作,则Request std指令将连续性地再次进行读卡操作,而不管这张卡片是否被拿走。只要有一张卡片进入MF-RC500之天线的有效的工作范围内,Request std指令将始终连续性地再次进行读卡操作。 (2)“Select Tag”(选择卡片操作) 表4.2 选择卡片指令
在一个成功的AntiCollision指令之后,或在任何时候当程序员想与已知序列号的卡片进行通信时,必须使用Select指令,以建立与所选卡的通信。Select指令成功地完成后,MCU将得到MF-RC500的DATA寄存器传送来的一个字节长的卡片容量信息—Size。 (3)“Authentication”(认证操作) 表4.3 认证指令
在MCU希望读取MIFARE卡上的数据之前,此操作必须是被允许的。这可以通过选择存储在MF-RC500之RAM中的密码集中的一组密码来进行认证而实现。如果这一组密码与MIFARE卡片上的密码匹配,这一次操作被允许进行。卡片上的存储器的每一个块都分别地指定了该块的存取条件。这些存取条件是根据密码而定。用户必须在KEYSTACON寄存器中指定一套密码,即设置KSO,KS1。KEYADDR寄存器中的AB位用于选择KEYA和KEYB。KEYADDR寄存器中的AB设置必须匹配“Authentication”命令。 (4)“Read”(读指令) 表4.4 读指令
Read(读)指令允许MCU通过MF RC500来读取MIFARE卡片上完整的16个Bytes的数据块(Data blocks)。 (5)“Write”(写指令) 表4.5 写指令
“Write” 写指令允许用户写数据到MIFARE卡片上(完整的16个Byte的数据块)。 4.3.2 读/写卡程序流程图 读/写卡过程主要由以下几步组成: (1) 复位应答:当一张MIFARE卡片处在读写器的天线的工作范围之内时,程序员控制读写器向卡片发出REQUEST all 命令。卡片的ATR将启动,将卡片Block0中的卡片类型共2个字节传送给读写器, 建立卡片与读写器的第一步通信联络。如果不进行位选择操作,读卡器对卡片的其他操作将不会进行; (2) 防重叠操作:有多张卡处在天线的工作范围之内时,RC500将取得每一张卡片的系列号,由于每一张MIFARE卡片都具有其唯一的序列号,决不会相同,因此MF-RC500根据卡片的序列号来保证一次只对一张卡操作。该操作MF-RC500得到MIFARE卡片的返回值和卡片的系列号; (3) 选择卡片操作:选择被选中卡的系列号,并同时返回卡的容量代码; (4) 认证操作:经过上述3个步骤, 在确认已经选择了一张卡片时,MF-RC500 在对卡进行读写操作之前,必须对卡片上已经设置的密码进行认证,如果匹配,才允许进一步的读写操作; (5) 读写操作:在经过上述几个步骤之后就可以具体地对卡片进行相应的读、写、增值、减值、存储和传送等操作。读/写卡程序流程图如下图4.2所示。 图4.2 读/写卡程序流程图 4.4 读卡器外围基本电路程序的设计 4.4.1 显示程序设计 本设计中的显示模块主要由系统时钟和LCD显示组成,系统时钟用来提供时间、日期等信息;LCD用来向用户显示卡片、存储数据等信息;LCD的读写操作、屏幕和光标的操作都是通过指令编程来实现的,通过寄存器的设置和指令编程就可完成,这部分的程序设计比较简单,其流程图如图4.3所示。 图4.3 显示部分程序流程图 显示模块的部分程序如下: MAIN: MOV SP,#60H MAIN1: LCALL START ;调用初始化 MOV A, #80H ;第一行显示第一个字符的位置 ACALL ENABLE ;调用写指令 MOV DPTR, #TABLE1 ;第一行表头位置 CALL WRITE1 ;调用第一行写子程序 MOV A, #0C0H ;第二行位置 CALL ENABLE ;调用写指令 MOV DPTR, #TABLE2 ;第二行表头位置 CALL WRITE LCALL DELAY1 JMP MAIN1 ENABLE: ;写命令时序 MOV SS, A CLR RS CLR RW CLR E ACALL DELAY SETB E RET WRITE1: ;写字符串 MOV R1, #00H A1: MOV A, R1 MOVC A, @A+DRTR ;取将显示的数据 CALL WRITE2 ;调用写程序写入单个字节 INC R1 CJNE R1,#10H,AL RET WRITE2: ;写单个字符 MOV SS A SETB RS CLR RW CLR E CALL DELAY SETB E RET 4.4.2 键盘程序设计 键盘程序包括按键识别及识别按键后系统的相应动作。按键识别分两步进行:第一步,识别键盘有无键被按下;第二步如果有键被按下,识别出具体的按键。分述如下:第一步,识别键盘有无键被按下的方法是:让所有列均置为0电平,检查各行线电平是否有变化,如果有变化,则说明有键被按下。第二步,识别具体的按键的方法有扫描法和线反转法,这里采用扫描法:逐列置0电平,其余各列置为高电平,检查各行线电平的变化,如果某行电平由高电平变为0电平,则可确定此行此列交叉点处的按键被按下。本方案中用延时l0ms进行软件消抖,通过设置处理标志位来区分闭合键是否己处理过,用计算方法得到键码。键盘扫描子程序中完成如下几个功能: (1) 断键盘上有无键按下。其方法为P1口低3位输出全0,读P1口状态,若P1.3、P1.4为全1,则说明键盘无键按下;若不全为1,则说明键盘有键按下; (2) 除按键抖动的影响。其方法为,在判断有键按下后,用软件延时的方法延时10ms,再判断键盘状态,如果仍为有键按下状态,则认为有一个确定的键按下,否则当作按键抖动处理; (3) 按键位置。根据前面的扫描法,进行逐位置0扫描,最后定位按键位置; (4) 闭合一次仅进行一次按键的处理。方法是等待按键释放之后,再进行按键功能的处理操作。编程扫描程序流程图如图4.4所示。 图4.4 扫描程序流程图 4.4.3 E2PROM程序的编写 AT24C64存储器可以解决单片机片内E2PROM不足的问题,用以保存诸如用户设置参数、卡片信息等资料。由于本系统中采用到的AT89S52单片机不具备I2C总线接口,因此采用软件法加以解决。在软件编写时遵循I2C总线规则:初始状态时,SCL、SDA两线都为高,当SCL为高电平时,如果SDA线跌落,认为是“起始位”;当SCL为高电平时,如果SDA线上升,认为是“停止位”;除此之外,在发送数据的过程中当SCL为高电平时,SDA应保持稳定。ACK应答位指在此时钟周期内由从器件(E2PROM)把SDA拉低,表示回应。这时主器件(AT89S52)的SDA口属性应该变为输入以便检测。E2PROM主要读写程序如下: void 12c_Send_Byte (unsigned char Send_Data) /*写一个字节到E2PROM中*/ { unsigned char i; for(i=8;i!=0;i--) { SCL_DIR=0; if(Send_Data&0x80){SDA_DIR=1;} //接收到数据 else{SDA_DIR=0;} delay_μs(2); SCL_DIR=1; Send_Data = (Send_Data<<1); // 数据左移一位 } do //接收应答信号,防止死循环 { SCL_DIR=0; SDA_DIR=1; delay_μs(2); SCL_DIR=1; } while(SDA!=0); //停止位 SCL_DIR=0; SDA_DIR=0; } 4.5 通信部分程序设计 (1)通信协议概述 RS232串口通信协议是我们熟悉和常用的通信协议,其通信协议的设计思想是基于帧传输方式,即在向串口发送命令信号、应答信号及数据信号时是按照帧的格式发送的。为了使数据快速可靠地传输,将每一帧数据对应一个命令帧,传输数据即执行命令,具体如下: 1) 在读数据时,遵循“读命令--等数据--文档”,即PC下达一个命令,等待接收数据,再据所接收数据正误向应用程序文档此命令的执行情况; 2) 在PC写数据时,遵循“写命令--等回应--文档”,即PC下达一写命令(此时所要写的数据含于此命令中),等待MCU发来的己经正确接收的回应信号,并 向应用程序文档此命令执行完毕; 3) 如果在传输过程中PC或MCU所接收的任何一帧信号出现错误时,均会向对方发送重发此帧信号的请求,如果连续只次传输失败,则退出通信,并向应用程序文档。 (2)MCU串口通信程序流程图 MCU串口通信程序流程图如图4.5所示。 图4.5 MCU串口通信程序流程图 (1)调试过程 系统调试是在实验室进行的,它是从设计向应用转化的关键一步,需要大量调试,才可能使系统运行正常,系统调试是在这样的环境下进行的:仿真器采用的是伟福公司的G6W,软件采用与其配套的e2000w编译软件;部分程序的编译也使用了KeilC51;编程器使用的是Top系列编程器Top2000-a型。 主要测试的内容有: 1) 读卡器的基本功能如:系统时钟显示、E2PROM的读写、非法卡报警等; 2) 系统软件的功能模块测试; 3) RC500读/写卡功能模块测试。 (2)调试中发现的问题与解决方法 在测试上述三项内容过程中,曾经出现过一些问题: 1) 系统显示模块不能正常工作。显示模块由LCD和时钟芯片1302组成,时钟芯片与单片机的连接比较简单,并且程序部分也都通过了调试,但系统却不能正常工作,所以应该是LCD的硬件出了问题,经过查找,是由于调节LCD亮度的那个电位器值过大,造成虽然DS1302正常工作了,但信息并没有得到正常的显示,通过对电位器值的适当调整,LCD正常工作了,问题得到了解决。 2) 数据写不到AT24C64中去。AT24C64通过二根线与单片机相连,理论上只要时序正确,对其进行数据的读写就应该能够成功,但是实际中每次调用该子程序都不成功,可能是时序上的问题,但经过调试发现程序的编写是正确的,所以应该是硬件连接上的问题。根据I2C协议传输数据的规定,SDA和SCL都是要求加上拉电阻的,但参阅的资料上说由于P2口内部已带有上拉电阻,不用再加AT24C64就能正常工作,但经过调试发现事实并非如此,经过对电路的修正,在SDA和SCL引脚上加了两个10K的电阻,最终解决了这个问题了。 3) 读卡器与卡片不能进行正常的通信。在调试过程中,当有卡进入天线范围内时,读写器却不能正常的与之进行数据交换,读不到卡片的信息。这个问题产生的原因有很多,可能是RC500软件设计上的问题,也可能是天线设计的问题,最后在指导老师的帮助下,经过自己的努力找到了问题的所在,原来是天线匹配电路不合适,通过对匹配电路上电阻、电容的适当调整,使问题得到了解决。 结论 本文档从整体的角度,对非接触式智能卡系统进行分析和研究,同时做到重点的突出。文档从智能卡整体系统入手,着重介绍了基于Philips公司MIFARE技术的非接触式智能卡读卡器的设计开发。该读卡器能够读写距离在0-100mm范围内的符合IEC/IS014443 Type A标准的非接触式智能卡。读卡器采用外接电源供电,具有蜂鸣器报警、系统时钟、LCD显示、3×2小键盘输入和采用RS232接口同上位机通信的功能,能够很好地满足实际应用的需要。 作为一个系统在设计时可能要考虑到诸多因素,每一个细节上,都可能出现意想不到的事情,有时一个小小的问题,要花好多的时间和精力,需要耐心和恒心,经过努力,该系统设计已经完成,实际测试证明系统已能达到设计要求。 然而本文档论述的非接触式智能卡系统还有很多方面需要进一步提高,针对文档中所述,主要有以下几个方面: (1) 本文档没有介绍上位机的软件设计问题。在应用系统中,这也是非常重要的一部分,主要涉及数据库的操作、与下位机的通信以及友好的用户操作界面等问题。 (2) 读写装置与上位机之间的通信接口宜采用USB接口。采用USB接口的外设与计算机之间的传输速率远比RS232和标准并行接口高,而且支持热插拔。 (3) 本文档中给出的程序,还需进一步的优化,减少其大小,提高程序执行效率。 通过对系统的软硬件设计和调试过程,积累了不少实际经验,开拓了了思维,为今后在这方面的工作打下了较为坚实的基础。本文还有很多不足之处,恳请各位专家和老师批评指正。
致谢 本文从课题的选定开始,系统方案的确定,以及对设计电路的调试指导,到最后文档的编写和完成较稿,XXXXXX老师都给予了悉心的指导。对其中设计思路的引导,电路的可靠性,文档的严谨性等方面更倾注了她的精力和心血。在具体的设计问题中,能够一针见血的指出问题所在,使我学到了新的知识,受益匪浅。她广博的知识面,丰富的实践经验以及严谨的治学作风,将激励我在今后的工作和学习中丰富自己、努力进取,在此,特别向郭广灵老师表示由衷的感谢和诚挚的敬意。 其次,要感谢学校给我们提供这么好的设计环境,在设计完成的过程中得到了许多老师和学院领导的帮助,老师们严谨治学的教学使我受益匪浅。 在本文档的写作和相关研究工作中,我同一实验室和同班同学都给予了我很多热心的帮助和热情的鼓励,使我顺利走过近三个月的课题研究生活。我要向他们中的每一个人表示由衷的感谢,我会永远记住这段美好时光。 再次向所有帮助过我的人表示衷心的感谢!谢谢你们!
以上图文的Word格式文档下载(内容和本网页上的一模一样,方便保存):
以上文档.doc
(946.5 KB, 下载次数: 54)
|