引 言
随着现代生活的发展,IC卡的应用越来越广泛,对IC卡读卡器的需求也趋于多样化。本文以SIEMENS SLE4442卡为例介绍了一种基于单片机(89C51)直接读写接触式IC卡的简易读卡器,它可以嵌入到电业管理或燃气收费等系统中,也可以作为一个独立读卡器对IC卡进行操作,配合不同的软件可以应用的不同的行业。
读卡器硬件电路设计
SLE4442卡简介
SLE4442卡内部有一个256 8bit EEPROM,不可逆的4个写保护字节,具备密码保护功能,可以随时读取主存储器内容;在校验成功后,可读保护存储器、读写安全存储器和写主存储器。
SLE4442有一个密码逻辑,用以控制对存储器的读写。为此,SLE4442包含一个4字节加密存储区,该存储区有一个错误计数器EC(0-2位)和三个字节的参考数据,这三个字节作为一个整体,称为可编程密码(PSV)。整个数据区除了参考数据,其它的数据都能被读取,在校验数据与内部参考数据比较正确后才能进行读写操作,连续三次比较错误后,错位计数器将阻止任何比较尝试,从而也消除了任何擦写操作。
系统总体框图及设计思路
利用AT89C51的P1端口直接对IC卡的时钟、复位、数据端口进行操作,AT89C51的串口和主控机通信。系统采用智能式工作方式,通过主控机交互的人机界面命令单片机对IC卡进行不同的读写操作。由于接触式IC卡采用的是两线连接协议,硬件连接简单。如果要设计一个可同时读写不同IC卡的读卡器,可通过单片机的P1口串接两路4053,经过译码,配合不同的单片机软件就可适用于各种各样的接触式IC卡。
读卡器单片机软件设计
为使汇编语言程序易读易维护,采用模块化设计、多次调用子程序方式。
1.复位和复位应答模块
根据SLE4442卡复位时序,利用单片机编写一个高电平不小于50 s的脉冲信号,在P1.0引脚输出高电平之后,给时钟引脚32个时钟脉冲,可根据需要保存、提取或舍弃复位应答的数据。复位应答的四个字节数据携带通信协议类型的编码,由注册管理机构分配或使用。
2.读IC卡存储器模块
由于IC卡内部存储器和单片机内部寄存器均为8位,而IC卡使用的是二线传输协议,一个时钟只能传输一个二进制位,无论读写卡的数据还是设置卡的操作命令都是一个字节数据,所以编写一个读(写)一个字节的子程序供多次调用。在此基础上,加一个字节计数器,可实现任意的字节的读操作。
READ_DATA:
CLR CLK
LCALL DELAY40
R_DATA:
MOV R5,#8 ;一个字节位数计数器
MOV A,#0
R_BYTE:
CLR CY
JNB DATAIO,RD0 ;判断该位是1或0
SETB CY
RD0:
SETB CLK
RRC A
LCALL DELAY40
CLR CLK
LCALL DELAY40
DJNZ R5,R_BYTE ;如果R5为零,表示已经读完 一个字节
MOV @R1,A
INC R1 ;保存数据到R1指向的地址
DJNZ R4,R_DATA ;R4为零,表示已经读完指定 的字节数
RET
设置命令模块
SLE4442卡的控制命令字均为三个字节,所以命令的设置操作单独写成一个可更改控制字的模块,减少编程量。把要设置的命令字(来自主控机)依次存放到单片机的内存中,该模块把这些命令字按字节顺序写到IC卡。具体的编写方式类似于读数据模块。
擦写存储器模块
SLE4442卡按字节的方式写,一次只能写一个字节,并且需要一个等待状态,单独成一个子模块。如果是擦写状态,需255个时钟脉冲;如果只擦不写或者只写,则只需要124个时钟脉冲。
PSC校验模块
SLE4442卡有一个安全存储器,如果想更改SLE4442卡中的任何内容都必须先正确校验可编程安全代码PSC。
单片机和主控机通信编程
单片机和主控机采用串口通信方式,主控机首先查询单片机的工作状态然后发出相关的指令,单片机根据指令工作。
总结
不同的接触式IC卡虽引脚不同,但操作方式基本相同,程序稍作修改可用于读写其他的接触式IC卡。本文读卡器的设计已经成功用于网吧管理,成本低廉、性能稳定。