物联传媒 旗下网站
登录 注册
RFID世界网 >  技术文章  >  其他  >  正文

一种安全可靠的IC卡读写器系统

作者:不详
来源:RFID世界网
日期:2005-05-19 10:18:28
摘要:采用XICOR公司的X76F100作串行E2PROM,设计以MCS-51单片机为核心的IC卡读写器系统。可以实现查询、安全存储、修改密码等功能。用户还可以根据需要进行功能扩充。
 摘 要 采用XICOR公司的X76F100作串行E2PROM,设计以MCS-51单片机为核心的IC卡读写器系统。可以实现查询、安全存储、修改密码等功能。用户还可以根据需要进行功能扩充。


1 IC卡读写器概述

  人们日常生活中经常接触到磁卡和IC卡,它们是根据卡片上的信息载体的不同而划分的。卡片及其读写器都属于人机接口的输入输出设备。磁卡是在卡片上贴一条窄窄的磁带来记录信息的,它主要用于车船票 、信用卡、电话磁卡、旅馆门钥匙等。IC卡则为近几年才出现的新型卡片,在卡片上嵌有IC(E2PROM,有的还有CPU)。由于它保存的信息比较可靠安全、可以高达几万次的读写,所以大量应用于公交车票 、饭票 、保健卡、收费系统等。下面介绍一种以XICOR公司的X76F100为卡片的、用于存取款的IC卡读写器方案。

2 硬件组成

  图1为IC卡及其读写器硬件电路图。其中读写器由单片机、键盘、显示、监控电路等部分组成。IC卡采用XICOR公司的X76F100Y。

图1 IC卡读写器系统电路图

2.1 IC卡及卡座

  X76F100为128×8位的保密串行FLASH E2PROM,其中读密码和写密码分别为64位。图2为其智能卡Smart Card封装的引脚图。把芯片封装在一个卡片上,将卡片插入IC卡读写器的卡座中,读写器就可以对它进行读写,实现加密、查询、存款、取款等功能。
  IC卡座有8个引脚,当X76F100Y插入时,正好同这几个引脚相连。另外还有两个固定端,其中一个固定端同卡座上一个弹簧片相连,两个触点和簧片就相当于一个常闭开关。当卡未插入时,簧片闭合,P3.2脚保持低电平;当卡插入时,簧片被顶开,P3.2脚变为高电平。当单片机检测到P3.2脚变高,通过P1.3 使X76F100的RST引脚变高,使其复位。

2.2 单片机

  单片机采用LG公司的GMS97C52。它有8K字节的ROM,256个字节的RAM以及32个I/O口,P1口与串行器件X25045和X76F100连接,P0、P2口用于键盘和显示,P3口中P3.2用于检测IC卡是否插入,其余7个口,可作其它功能扩充。
 

图2 X76F100Y引脚



2.3 监控电路

  监控电路采用X25045芯片,它包括看门狗定时器、电压监控电路和E2PROM存贮器。其功能是:上掉电时对GMS97C52产生RESET信号;看门狗对系统进行监控,防止死机。

2.4 键盘电路

  为了方便,键盘接口电路用I/O口实现,它为4×4结构,16个键。其中数字键11个,功能键4个,回车键1个。 


数字键:0、1、2、3、4、5、6、7、8、9、←(退格)。

功能键:查询?、存储+、取款-、改密码* 。

查询?:用户通过读密码可以查询卡中所存的款额。

存款+ :用户通过写密码可以将款存入卡中。

取款-:用户通过写密码可以从卡中取款。

改密码*:分为修改读密码和写密码。为方便起见,令读密码和写密码一

致,按此键将同时修改读密码和写密码。

回车键:8位密码或存取款数输入完确认,以及新密码输入完确认。

2.5 显示电路

  显示部份采用LED显示器,也用I/O口实现。用于显示系统状态、输入的密码或所要存取的款额以及出错信息等。
  由于GMS97C52的驱动电流有限,在P0、P2口加反向器SN74F04,增加驱动能力。它的吸入电流为64mA,输出电流为15mA,可以保证位选所需的吸入电流。

3 程序设计

3.1 主程序流程图

  主程序流程图如图3所示。
  开机后,系统处于待机状态,不断查询P3.2脚电平,当X76F100插入读写器卡座时,P3.2脚电平变高,单片机检测到P3.2高电平信号时,使P1.3脚电平变高,如果此时为低电平,X76F100复位,输出32位固定的“同步复位响应”数据。然后循环扫描键盘显示程序,进行存款、取款、查询或改密码。一次操作完成后返回,然后不断循环。

3.2 循环键盘显示程序

  循环扫描键盘显示程序如图4所示,它采用程控扫描方式。键盘实际操作的顺序是:先按功能键,然后依次输入8位(十进制)密码,按回车键确认。当存取款时,随后输入所存取的款额;当修改密码时,随后输入8位新密码,输完后按回车键确认。若输入密码正确,显示IC卡内存款的余额或改密码成功信息(SUCCESS)。若密码不正确,提示重新输入,允许输入密码4次。
  为了记录操作中正在进行的状态,在键盘程序中设置了多个指针。
  (1)KEY 有否按键按下标志。00H表示无键按下,01H表示有键按下。此标志用于判断按键是否已松开,防止误操作。
  (2)FUN为功能键指针,00H表示无功能键按下,01H表示存款(ADD),02H表示取款(SUB),03H表示查询(IQUIRE),04H表示改密码(CHANGE PASSWORD)。
(3)DIG为允许数字键输入标志,00H表示不允许,01H表示允许。此标志主要是防止输入多余的密码,或输入的款数超出限额。
 (4) NUM表示输入第几个数字,00H表示无数字输入,01H~08H表示输入密码,09H~10H表示输入款数或新密码,若NUM为11H,显示出错信息。

3.3 X76F100读程序举例

图4 循环键盘显示程序流程图

  X76F100为I2C总线E2PROM。SCL为时钟输入,SDA为双向数据输入输出线。通过片输入来控制对器件的访问。下面以页写为例,先结合时序说明X76F100的工作过程,然后给出程序。
  页写时序如图5所示。在该系统中,GMS97C52为主机,X76F100为从机。首先主机向从机发一个START命令,产生开始条件,然后发写命令字。当从机接到命令后,向主机发一个应答信号NACK。然后跟随8字节密码,随后进入一个写周期,写周期结束后进行密码应答轮询ACK Polling。X76F100要求主机用专用的应答命令55H进行应答轮询。如果输入的密码正确,将返回一个“ACK”。如果密码不正确,将返回“no-ACK”,重试计数器加1,返回到启始位置,提示重新送入写命令字和8字节密码。若密码正确,主机接着送入8个字节的数据,ACK响应成功后,主机发出STOP命令完成写操作。下面是用写密码进行页写的程序。


图5 页写时序图(需要密码)

WRITE_USING_WRITE_PASS: ;用写密码进行写操作
ACALL     START
;调开始命令
MOV      A,#SECTOR_WR
;调页写命令
ACALL     OUTBYTE
;调输出字节命令
ACALL     NACK
;X76F100发应答信号
ACALL     WR_WR_PASS 
;调写密码命令
ACALL     T10ms
;10ms延时开始写密码周期
ACALL     ACK_POLLING
;调密码应答轮询子程序
ACALL     WR_DATA
;调页写数据子程序
ACALL      STOP
;调停止命令
ACALL     T10ms
;延时10ms写密码周期
RET
 
WR_WR_PASS: ;将写密码写入X76F100
MOV      R0,#WR_PASS7
;将密码首址送入R0
MOV      R1,#08H
;写密码为8个字节
WP:MOV      A,@R0  ;将R0中的数据送入A中
ACALL    OUTBYTE
;输出字节子程序
ACALL    NACK
 
INC      R0
 
DJNZ     R1,WP
 
RET
 
WR_DATA: ;将数据写到X76F100中
MOV     R0,#DATA0
;将数据首地址送入R0
MOV     R1,#08H
;一页有8个数据
WB: MOV     A,@R0 ;将R0中数据送入A 
ACALL    OUTBYTE
;调输出字节子程序
ACALL    NACK
;从机发应答信号
INC      R0
;下一个字节
DJNZ     R1,WB 
;循环直到R1为0
RET
 
OUTBYTE: ;主机向X76F100发字节
MOV     R2,#08H
;一个字节有8位
LOOPO: 
CLR      SCL_76
 
RLC      A
;移位
MOV     SDA_76,C
;将进位送入数据线
SETB     CL_76
 
DJNZ     R2,LOOP
;循环直到R2为0
RET
 
START: 
SETB     SDA_76
 ;开始子程序
SETB     SCL_76
 
CLR      SDA_76
 
CLR      SCL_76
 
RET
 
STOP: 
CLR      SDA_76
 ;停止子程序
SETB     SCL_76
 
SETB     SDA_76 
 
RET
 
ACK_POLLING: ;密码应答轮询子程序
ACALL    START
 
MOV     A,#55H
;主机发固定应答命令
ACALL   OUTBYTE
 
ACALL   NACK
;调从机发应答信号
JC      PASS_ERROR
;若有进位则密码错误
RET
 
PASS_ERROR: ;密码错误
ACALL   STOP
 
RET 
 
ACK: 
CLR    SDA_76
;主机执行一个应答
ACALL  CLOCK 
 
RET
 
NACK: 
SETB   SDA_76
;从机执行一个应答 
ACALL  CLOCK
 
RET
 
CLOCK: 
SETB  SCL_76
;第9个脉冲
MOV  C,SDA-76
;读SDA状态以判断是否有应答
CLR   SCL_76
 
RET 
 
T10ms: 
MOV  R7,#064H
;10ms延时
T10A: 
MOV  R6,#032H
 
T10B: 
DJNZ  R6,T10B
 
DJNZ  R7,T10A
 
RET
 

  参 考 文 献

1 詹树仁主编. GMS90及GMS97系列单片机的工作原理及其应用. 武汉力源电子股
 份有限公司,1998年   

2 赵依军,胡戎. 单片机微机接口技术. 人民邮电出版社,1989

3 卢存伟,钱捷. 微机原理及应用系统设计. 河海大学出版社,1992年

4 X76F100 DATA SHEET. XICOR公司