某大学本科毕业生毕业论文
IC卡在售饭窗口机中的应用
(某大学计算机科学学院,中国 长沙 410081)
摘 要:介绍IC卡起源与国外的使用状况,以及作为信息存储卡的优越性。详细介绍德国西门子公司设计制造的逻辑加密卡SLE4442的功能、特点和使用。详细阐述IC卡售饭机中IC卡读写部分的原理、硬件设计和软件设计等内容,并给出详细程序流程图和全部代码。
关键词:单片机;IC卡;SLE4442;售饭窗口机;读写IC卡程序
The application of IC card at the selling rice window machine
(The college of Computer science, Some Univercity, Changsha 410081, China)
Abstract:Introduce the IC card origins and the usage condition of the abroad,and the superior of a information saving card. Special introduce the features and functions of logic encipherment card SLE4442 designed and manufactured by Siemens. Special explain the principle, hardware designs and software designs of Selling the rice machine. And last Give a detailed procedure flow chart with all codes.
Key words:Microcontroller unit; IC card; SLE4442; Sell the rice window machine; Read and write the IC card procedure
一、 IC概述
(一) IC卡简介
IC卡,又称“集成电路卡”、“智能卡”,英文名称“Integrated Circuit Card”或“Smart Card”, 于1974年诞生于法国,当时有位叫罗兰.莫雷诺(R.Moreno)的工程师为了将一些个人信息存放在一个便于携带、保存的存储媒体上,提出了将一个集成电路芯片嵌装于一块塑料基片上构成一张存储卡的想法,并按此方法做出了一张卡片,这就是世界上第一张IC卡。但由于当时集成电路技术水平有限,市场也没有形成迫切的需求,这种想法并没有立即付诸实际,后来随着集成电路技术的飞速发展,芯片的集成度、容量、可靠性、安全性都得到了的提高,尤其是EEPROM技术的成熟,使得IC卡的生产成为现实,应用领域也更加宽广。十几年间,世界上先后有德国的SIEMENS,美国的Motorola、Atmel,法国的Thomson、荷兰的Philips以及日本的Hitachi等半导体厂家相继投入了IC卡芯片的开发生产,同时出现了一些著名的IC卡制造商,如德国的G&D、法国的Schlumberger和Gemplus等。国际标准化组织从1987年开始,相继制定和颁布了IC卡的国际标准--ISO7816-1,7816-2,7816-3,7816-4,为IC卡的进一步发展普及创造了条件。目前IC卡的使用遍及世界上大多数的国家,且被广泛应用于银行保险、医疗、电信、交通、资料管理、身份验证以及其他预付费行业,并且收到很好的效果。随着半导体技术的发展以及社会对信息的安全性和存储容量要求的日益提高,IC卡的应用将越来越广泛。
(二) IC卡的分类
对IC卡分类的方法,多种多样,它主要有以下几类:
1.按IC芯片的生产厂家分类
目前世界上的IC卡制造商主要有德国的SIEMENS,美国的Motorola、Atmel,法国Gemplus、Solatic、Schlumberger、荷兰的Philips等著名公司。本文中所使用的SLE4442 IC卡就是SIEMENS的产品,它的特点和功能将在后面着重介绍。
2.按安全级别分类
IC卡最大的特点是它的安全性较高,因此当用户选用IC卡时,首先考虑的总是就是选用何种安全级别的IC卡比较合适,因此从安全级别上对IC卡进行分类是最实用,也是最科学的。IC卡从安全级别上分为以下三大类:非加密存储卡;逻辑加密存储卡;CPU卡。
3.按与终端设备连接方式分类
可以将IC卡分为接触式和非接触式卡与读写设备通过符合ISO标准的8个触点相连,而非接触卡则通过光或无线电波完成与读写设备之间的通讯,目前的技术已可达到100mm的距离。非接触卡可用于高速公路收费、公交车票、地铁车票和门禁等处。
(三) IC卡的特点
IC卡具有防磁、防静电、抗破坏性和耐用性强,防伪性好,存储数据安全性高(可加密),数据存储量大,应用设备及系统网络环境成本低,品种型号齐全,技术规范成熟等特点。其极高的安全性现已越来越受到人们的普遍重视,已在越来越多的领域取代磁卡及其它数据卡片,得到了越来越广泛的应用。
1.抗破坏性和耐用性
磁卡是靠其上的磁条来存储信息的,磁条在遇到强磁场、静电、扭弯、刮伤等情况下,存储在里面的信息很容易被丢失。尽管制造商采用了许多手段来提高其寿命,但先天的缺陷总是难以排除的,而且磁条上信息的保存时间和使用次数均较少,修改不方便。
IC卡是用硅片来存储信息的先进的,硅片工艺完全可以保证卡的抗磁、抗静电及各种射线的能力。而且,由于硅片体积很小,里面有环氧树脂的保护,外面有PCB板和基片的保护,因此,抗机械、化学能力很强。这些在ISO7816-1中都有详细规定。现在IC卡已做得十分精致、耐用,信息保存时间都在10年甚至100年以上。并且读写次数可达一万次甚至十万次以上。即使受到各种因素的影响,一张IC卡的使用寿命也可达20年以上。
2.存储容量和灵活性
磁卡最多只能存储几百个字符或数字,而且磁条只能作为一种被动的存储中介。IC卡的容量可做到几千个字节,且IC卡上存储区可分割成不同区域、具有不同的访问级别,为信息处理和使用提供了方便。
在实际应用中,因为磁卡存储量小,因此只能存储一条代码之类的信息,其它数据只能存在电脑之中,使用中必须频频访问电脑,在网络环境之下,会造成网络繁忙,通讯费用增加。而IC卡由于存储容量大,所以可将更多资料存于卡中,且卡中资料可随时读出,电脑网络的实时性要求很低,可节省很多的网络费用和通讯费用。
3.安全性和加密性
由于磁卡仅是靠磁条来记录数据,因此加密性较差,很容易被复制。就是金融业用的磁卡系统,防伪性也很有限,仅美国每年由于信用卡被伪造和非法使用造成的损失就达数亿美金。
IC卡采用数字电路存储数据,容量大,读写区域可任意选择,因此灵活性很大,即使是一般的存储卡,采用特定的技术,也可具备很高的保密性,对于加密卡,存储区的访问受逻辑电路的控制,只有密码核对正确才能进行读写操作,而且密码对次数有限,超过规定的次数,卡中的资料将被销毁并不可恢复。
4.相关设备的成本
磁条读写设备含有精密的机械及信号转换装置,因此成本高,且可靠性低,维护量大,对于必须脱机单独使用的场合,如公用电话卡、地铁卡,只能用特制磁卡和相应的特制读写设备来解决,这样会导致更高的设备投资并且维护会更复杂;IC卡本身就是一种数字电路,只需一个供插卡用的卡座和简单的读写电路即可完成读写,成本很低,且使用寿命长,可靠性高,基本上不用维护。因此尽管IC卡成本要比磁卡高,但综合考虑IC卡的读写设备便宜、使用寿命长的特点,整体来看性能价格比要优于磁卡。
5.系统网络环境
在实际系统应用中,由于磁卡本身几乎无保密性可言,因此保密工作便由电脑系统来承担。在应用系统中对电脑网络的实时性、安全性、可靠性要求较高;而IC卡本身可以承担大部分的保密功能,能确保数据的安全性,因此可脱机单独使用,对电脑网络系统的实时性要求较低,可大大地减少用户对网络的投资。
二、 售饭窗口机硬件简述
窗口机主要由主控系统,显示系统,键盘输入系统,IC卡系统四个部分组成(见窗口机硬件简图 图1)。主控系统采用8051单片机,通过I/ O端口P0.0、P0.1分别与SLE4442 IC卡的C3和C7脚连接,通过P2口的八个脚与矩阵式键盘连接,P1.1、P1.2、P1.7与显示器连接;显示系统采用共阴极LED显示器和一个74LS164移位寄存器组成,采用动态显示的方法显示输出。下面将着重介绍IC卡子系统。
SLE4442 IC卡分析:
主要指标:
l 256字节的EEPROM
l 32位保护存储器组成方式
l 32字节写保护区
l 3字节用户密码,密码错误计数:3次
l 支持全双工数据传输模式
l 温度范围:0℃~70℃
l 至少10000次擦写
l 至少10年数据保存期
引脚配置:
C1(VCC):电源引脚,输入电压范围3.5~6V,一般为5V
C2(RST):复位引脚,在本例中接地
C3(CLK):时钟信号输入,时钟频率范围7~50kHz
C5(GND):地线,接地
C7(I/ O):输入输出引脚
C4、C6、C8:没有定义,均接地
图1 窗口机硬件简图
存储器配置:
图2 存储器结构及读写过程
SLE4442 包含256×8位的EEPROM主存储器和一个带写保护功能的32位数据保护区(PROM)。主存储器可以按字节进行擦写操作。当进行擦除操作时,一个字节的所有八位都将被置1;当进行写操作时,通过对新老数据进行逻辑与操作,将相应位置0。正常情况下修改数据的操作由擦除和写操作组成,但是如果被修改数据中没有一位是0到1转换,则擦除操作可以省略,反之则写操作可以省略。擦除和写一个字节至少需要2.5ms。在SLE4442的存储体系中,32位PROM 中的每一位分别对应256×8位EEPROM中的前32个字节,其地址分配方式完全相同,均为00H~1FH。PROM一旦写入,将不能进行擦写操作。
操作模式:
SLE4442共有三种操作模式:命令模式、数据输出模式和处理模式。
当SLE4442通电一段较短的时间后,将处于命令模式下,这时主控系统可以通过I/O引脚向SLE4442发送命令来执行读写操作。发送命令时首先发送起始信号(CLK处于高状态H期间,I/ O的下降沿),接着发送命令,最后发送终止信号(CLK处于高状态H期间,I/O的上升沿)。在SLE4442接受命令后将处于数据输出模式或处理模式下,主要取决于SLE4442所接受的命令。当处于数据输出模式时,主控系统可以通过I/O引脚读出EEPROM或PROM中的数据;处于处理模式时,则可以对其中数据进行写入或修改。IC处于数据输出模式或处理模式时,任何的起始信号和终止信号都将被忽略。另外在上述两种模式结束时IC将I/O设置为高阻状态。
图3 操作模式时序图
命令格式及指令系统:
每条命令均由三个字节组成,首字节为命令码,次字节为操作地址码,末字节为操作数。数据发送时总是先发送字节的最低位。
SLE4442共有七条命令,分别是:
00110000B READ MAIN MEMORY 读主存储区
00111000B UPDATE MAIN MEMORY 更新主存储区
00110100B READ PROTECTION MEMORY 读保护存储区
00111100B WRITE PROTECTION MEMORY 写保护存储区
00110001B READ SECURITY MEMORY 读密码区
00111001B UPDATE RECURITY MEMORY 更新密码区
00110011B COMPARE VERIFICATION DATA 比较认证信息
表1 SLE4442指令系统
限于篇幅,这里着重介绍前两条命令,即对主存储区的读写操作命令。
读主存储区命令能够输出从给定地址起到存储区末尾的所有存储单元中的数据。因此在发送了命令终止信号后应该继续发送足够多的时钟脉冲信号,使数据能够正常输出。必要的时钟脉冲信号数可以由公式“m=(256-N)×8+1”计算得到。该命令的执行不受任何限制。
例:读取主存中246~255的十个单元中的数据,则命令为30F600H,主控系统I/O端口输出的二进制数据流为00001100 01101111 00000000。另外由上述公式可得时钟脉冲数为81个。
更新主存储区命令能够把给定的操作数写入给定地址的内存单元中。前面讲过每擦除或写入一个字节数据将至少需要2.5ms的时间,完成一个完整的更新操作则需要5ms时间,所以在发送命令终止信号后也应该继续发送足够多的时钟脉冲信号,使IC能够完成更新操作。如果输入的时钟脉冲频率为50kHz,则应该继续发送至少250个时钟脉冲,这里我们定为255个。例:将主存中第127字节的数据改为100,则命令为387F64H,输出二进制流为00011100 11111110 00100110。另外附加255个时钟脉冲。
三、 窗口机软件总体构想
窗口机硬件由四部分组成,所以窗口机的软件也应该有相应的四个部分:主控程序、键盘读写程序、IC卡读写程序以及动态显示程序,另外还要有实现售饭功能相关的功能模块程序。
图4 主程序框图
图4中的每个分支(branch)都应该为显示程序准备待显示的信息;虚线框中为读键盘子程序以及实现售饭功能的程序模块;“Read IC Card”和“Save Key Brach”分别调用了读和写IC卡子程序。
由图可知,读IC卡模块在被调用后,将返回系统一个值,系统通过它来判断读取的数据的正确性,如果数据有错还应该进一步判断错误是因为没有插卡还是没有插到位。IC卡在出厂时EEPROM中的初始内容一般为全1,所以如果读入的数据为全0,则可以认为没有插卡,并显示“No Card”提示;解决插卡不到位的方法一般是指定读出卡片的某一特征区的内容(比如出厂标志区),如果不吻合则认为IC卡没有插到位。
另外,在读写IC卡,尤其是进行写操作期间,是不允许突然拔卡的。为了防止用户在写卡过程中突然拔卡,造成数据丢失或错误,一般采用设置标志位的方法,比如取卡中某一字节,用不同的值代表对卡的不同操作状态,状态表如下:
0F(00001111):擦除状态;
07(00000111):擦除完毕;
03(00000011):写卡状态;
01(00000001):写卡完毕;
如果中途拔卡,则可以根据卡中标志的内容,按需要修正卡中内容。但是增加状态字将增加系统软件的复杂性,在本系统中不使用状态字。
读写键盘程序与动态显示程序的设计可以参考《单片机原理及接口技术》,鉴于本文主题,这里只做简单介绍。所谓矩阵式键盘实际就是采用多种锁存器和可编程并行I/O接口芯片组成,通过8051的I/O引脚分别控制行和列,按键设置在行和列线的交点上,当有键按下时,则对应的行线和列线短路,8051通过对引脚进行扫描操作,再通过查表操作确定被按键的键值,然后转到相应的功能模块处理程序。显示程序采用动态显示控制,主要是出于成本的考虑。由于采用动态显示时各个数码管共用同一各段码输出口,分时轮流通电可能会导致显示时亮度不足的问题,以及为得到稳定显示效果,需要不断重复执行显示程序的问题,是动态显示程序中的关键问题。具体解决方法可参考相关资料。
各模块之间的数据关系如图5所示。
图5 窗口机软件数据流图
关于数据流图的几点解释:
1、IC卡上,从246到255的十个地址中:一个字节的卡特征(全0),四个字节的密码,三个字节的卡号,两个字节的金额。全部为压缩的8421BCD码。在买卡时已被赋值。
2、“Individual data”即卡中读来的数据,它来自IC卡。共十个字节(见第一点解释)全部为压缩8421BCD码,占内部RAM地址20H到29H。
3、“data in display buffer”即待显示数据,8421BCD码,十个字节对应十位LED显示器, 占内部RAM地址16H到1FH。
4、“accumulative total data”即本日就餐总人数和交易总金额(2+3=5字节),压缩的8421BCD码,占内部RAM地址76H到7BH。
5、“data about date”即本日的月份和日期。两个字节,占内部RAM地址7CH到7DH。
6、“tempoeary data” 由键入的数字键和“.”键产生。临时数据设为4位整数+2位小数,压缩的8421BCD码,占三个字节,占内部RAM地址28H到2AH
7、“tempoeary sum” 由键入“+”键产生。临时和也设为4位整数+2位小数,压缩的8421BCD码,占三个字节,占内部RAM地址2BH到2DH。
四、 窗口机软件代码编写
显然,窗口机软件代码的编写应该围绕五个主要的软件模块展开。即主控程序、读键盘程序、显示控制程序、功能模块程序以及IC卡读写程序。由于前四个软件模块不是本文重点,就不多作介绍,有兴趣的读者可以查阅相关资料。这里只给出IC卡读写程序的开发思路,程序流程图以及完整代码和详细注释。
根据SLE4442 IC卡的特点,将整个IC卡读写程序模块分为六个子程序:读IC卡子程序、保存数据子程序、写IC卡子程序、命令发送子程序、数据采集子程序、处理子程序。其中,命令发送子程序为读写程序所共有,需要特别说明的是:SlE4442 IC卡可以正常工作的时钟频率范围为7~50KHz,如果取50KHz为工作频率,则时钟信号的方波宽度为1/50KHz/2=10us,为使IC卡能够正常工作,主控机(8051单片机)输出的时钟信号必须尽可能精确,因此在本课题中采用自动重装定时器,以提高精度(定时时间为10us,控制程序采用查询方式处理定时器中断)。具体代码如下:
命令发送子程序:
功能:向IC芯片发送指定的指令
SEND: CLR P0.0
SETB P0.1
CLR TR0 ;关闭定时器
CLR C ;进位标志清0
MOV TMOD, #02H ;设置定时器,自动重装模式
MOV TH0, #246 ;10us
MOV TL0, #246
MOV R1, 30H ;指令指针
MOV R4, #3 ;3字节指令
MOV R5, #8 ;每字节分8位发送
START: MOV A, @R1 ;指令放入寄存器
SETB TR0 ;10us定时器启动
SETB P0.0 ;脉冲启动
CLR P0.1 ;命令起始信号
LOOP1: JNB TF0, $
CLR TF0
CPL P0.0 ;脉冲关闭
RRC A
MOV P0.1, C ;发送一位
DJNZ R5, LOOP2 ;字节计数
MOV R5, #8 ;准备下一字节的计数
INC R1 ;指令指针指向指令的下一字节
MOV A, @R1 ;指令下一字节入发送寄存器
DJNZ R4, LOOP2 ;指令字节数计数
JNB TF0, $
CLR TF0
CPL P0.0
JNB TF0, $
CLR TF0
CPL P0.0 ;脉冲关闭
CLR P0.1
SJMP STOP
LOOP2: JNB TF0, $
CLR TF0
CPL P0.0 ;脉冲启动
SJMP LOOP1
STOP: JNB TF0, $
CLR TF0
CPL P0.0 ;脉冲启动
NOP
SETB P0.1
NOP
CLR P0.1
JNB TF0
CLR TF0
CLR P0.0 ;命令终止信号
RET
主控程序只能调用读IC卡程序和保持数据程序;读IC卡程序先调用命令发送程序,然后调用数据采集程序完成读数据操作;流程图如下:
读IC卡子程序流程图
代码如下:
读IC卡子程序:
功能:将IC卡中指定地址单元(目标地址)中的数据读入RAM中指定的地址单元(目的地址)
入口:R6ß目标地址;R7ß目的地址
READIC: MOV 30H, #00110000B ;读指令准备
CLR C ;清除进位标志,为减法作准备
MOV A, #255 ;计算需要读多少字节
SUBB A, R6
INC A
MOV 31H, R6 ;操作地址准备
MOV 33H, A ;计算结果放入RAM 33H中
MOV 34H, R7 ;读出数据的存放地址
LCALL SEND ;调命令发送子程序
LCALL DATAOUT ;调数据采集子程序
RET ;返回主程序
数据采集子程序:
功能:采集由IC芯片发出的数据
DATAOUT: MOV R5, 33H ;读数字节计数器
MOV R1, 34H ;读出数据的存放地址
LOOP4: MOV R4, #8 ;每字节8位
CLR C
CLR A
LOOP3: JNB TF0
CLR TF0
CPL P0.0 ;数据采集起始信号
MOV C, P0.1 ;采集一位放入进位标志位
RRC A ;将数据移入A的最低位
JNB TF0
CLR TF0
CPL P0.0 ;一位采集完毕,采集终止信号
DJNZ R4, LOOP3 ;继续采集下一位数据
MOV @R1, A ;数据存入指定地址单元
INC R1 ;存放地址加一
DJNZ R5, LOOP4 ;继续采集下一字节数据
JNB TF0
CLR TF0
RET
保存数据程序首先调用写IC卡程序,写IC卡程序再调用命令发送程序,等待处理程序完成后完成一字节的写操作。保存数据子程序的流程图如下:
保存数据子程序流程图
代码如下:
保存数据子程序:
功能:将RAM中指定地址单元(目标地址)中的数据保存到IC卡上的指定地址单元(目的地址)
入口:R0ß目标地址;R1ß目的地址;R2ß要保存数据的字节数
出口:R6ß操作数地址;R7ß操作数
SAVEDATA: MOV A, @R0 ;目标地址中数据入寄存器A
MOV R7, A ;数据入R7
MOV A, R1 ;目的地址入寄存器A
MOV R6, A
LCALL WRITEIC ;调用写IC卡子程序
INC R0 ;读下一数据
INC R1 ;目的地址加一,准备存放下一数据
DJNZ R2, SAVEDATA ;保存下一数据
RET
写IC卡子程序:
功能:将数据写入IC上的指定地址的存储单元
入口:R6ß目的地址;R7ß待写数据
WRITEIC: MOV 30H, #00111000B ;写指令准备
MOV 31H, R6 ;操作地址
MOV 32H, R7 ;待写数据
LCALL SEND ;调用命令发送子程序
LCALL PROCES ;调用处理子程序
RET
处理子程序:
功能:向IC芯片发送足够的时钟信号,直至IC卡处理完写数据操作
PROCES: MOV R5, #255 ;发送255个时钟信号
CLR P0.1
LOOP5: JNB TF0
CLR TF0
CPL P0.0
JNB TF0
CLR TF0
CPL P0.0
DJNZ R5, LOOP5
JNB TF0
CLR TF0
RET
五、 结束语
该IC卡售饭窗口机具有结构简单、功耗低、体积小、成本低等特点,完全达到了用户的要求。如果将现有的产品稍作改动和扩展,就能实现其他的功能。例如,给它扩展上一个语音芯片,即可进行语音提示或报警;另外,如果将本窗口机应用于其他需要收费的地方,将水、电、通信等费用的缴纳功能集成到一张IC卡上,从而实现一卡通,具有广阔的市场前景。
参考文献:
[1].曹琳琳 曹巧媛编著《单片机原理及接口技术》 国防科技大学出版社
[2].李叶紫 王喜斌 胡辉 孙东辉编著《MCS-51单片机应用教程》清华大学出版社
[3]. SIEMENS Semiconductor Group《ICs For Chip Cards》Intelligent 256-Byte EEPROM SLE 4432/SLE 4442 Data Sheet 07.95
欢迎转载本站文章,但请保留版权信息! http://www.Bacysoft.cn
如果您觉得本站资源对您有帮助,也请您支持本站发展,谢谢!本站的发展,需要您的支持!