公交非接触IC卡读写器的应用设计
作者:不详
来源:RFID世界网
日期:2005-05-19 10:18:28
摘要:采用PHILIPS公司的Mifare卡作IC卡,设计以射频技术为核心,以单片机为控制器的IC卡读写器在公交自动收费系统中的应用。制作的IC卡读写器可以实现制卡、售卡、自动收费等功能,具有安全、实用、方便、快捷、可靠性高的特点,解决了城市公共交通服务行业既频繁又琐碎的收费管理问题,有广泛的应用前景。
摘 要:采用PHILIPS公司的Mifare卡作IC卡,设计以射频技术为核心,以单片机为控制器的IC卡读写器在公交自动收费系统中的应用。制作的IC卡读写器可以实现制卡、售卡、自动收费等功能,具有安全、实用、方便、快捷、可靠性高的特点,解决了城市公共交通服务行业既频繁又琐碎的收费管理问题,有广泛的应用前景。
一、IC卡读写器概述
目前经常接触到的IC卡有两种:接触式的和非接触式的IC卡。接触式的IC卡通过机械触点从读写器获取能量和交换数据;非接触式IC卡通过线圈射频感应从读写器获取能量和交换数据,所以又称射频卡。目前在社会上常见的是接触式IC卡。它具有存储量大(以兆为单位),保密功能强(有多重密码设置和认证功能),可实现一卡多用。但是,这类卡的读写操作速度较慢,操作也不方便,每次读写时必须把卡正确地插入到读写器的口槽才能完成数据交换,这样,在公交、考勤等需要频繁读写卡的场合就很不方便,而且读写器的触点和卡片上IC卡的触脚暴露在外,容易损坏和搞脏而造成接触不良。
非接触式IC卡是根据射频电磁感应原理产生的。它的读写操作只需将卡片放在读写器附近一定的距离之内就能实现数据交换,无需任何接触,使用中非常方便、快捷,不易损坏。因此,在公交、门禁、校园、企事业等人事管理、娱乐场所等方面有广泛的应用前景。目前我国引进的射频 IC卡主要有PHILIPS公司的Mifare和ATMEL公司的Temic卡。下面以PHILIPS公司的Mifare卡为主、介绍城市公交自动售票IC卡读写器的实现方法。
二、工作原理
非接触式IC 卡读写器以射频识别技术为核心,读写器内主要使用了1片Mifare卡专用的读写处理芯片--MMM微模块。它是一个小型的最大操作距离达20~30mm的Mifare读/写设备的核心器件,其功能包括调制、解调、产生射频信号、安全管理和防碰撞机制。内部结构分为射频区和接口区:射频区内含调制解调器和电源供电电路,直接与天线连接;接口区有与单片机相连的端口,还具有与射频区相连的收/发器、16字节的数据缓冲器、存放64对传输密钥的ROM、存放3套密钥的只写存储器以及进行三次证实和数据加密的密码机、防碰撞处理的防碰撞模块和控制单元。这是与射频卡实现无线通信的核心模块,也是读写器读写Mifare卡的关键接口芯片。读写器工作时,不断地向外发出一组固定频率的电磁波(13.6MHz),当有卡靠近时,卡片内有一个LG串联谐振电路,其频率与读写器的发射频率相同,这样在电磁波的激励下,LG谐振电路产生共振,从而使电容充电有了电荷。在这个电容另一端,接有一个单向导电的电子泵,将电容内的电荷送到另一个电容内存储。当电容器充电达到2V时,此电容就作为电源为卡片上的其他电路提供工作电压,将卡内数据发射出去或接收读写器发出的数据与保存。
三、硬件组成
公交收费系统结构复杂,环节较多,因此,公交非接触IC 卡的读写器至少应包括公交售卡机、公交车载机和公交制卡机三个读写器。除了售卡机要求有键盘外,其余的硬件组成大体相同。图1为非接触IC卡及其读写器硬件电路原理图,主要由MMM微模块、单片机、键盘、显示、存储器、天线和监控电路以及与PC机通信的TC232串行通信接口电路等部分组成。
(1)单片机系统
单片机采用89C52。它片内有8KB的ROM,256字节的RAM以及有32个I/O口。P1口与串行器件24C64和显示、报警电路连接;P0口与MMM微模块相连,用作数据线;P2口用作4×4键盘;P3口用于读写控制和中断。
(2)键盘电路
键盘接口电路用P2口接成4×4结构,共16个键。其中数字键10个,功能键2个,退格键和回车键各1个,有2个键暂时未用。 功能键有查询和通信两键。
查询键:售卡员可以通过此键查询售卡金额和售卡记录数。 通信键:由于读写器的存储量有限,因此读写器每售卡一段时间,应将读写器中的数据通过RS-232串行接口与PC机通信,以便回放和清空读写器中的数据。数据回放到PC机中后,通过分析处理,形成各种报表,以便公交公司及时掌握售卡情况。
(3)显示电路
显示部分采用数码显示,利用串行输入BCD码--十进制译码驱动显示器件MC14499来完成与单片机系统的显示接口,以显示读写器工作状态、输入的数据或读出IC卡中所剩余以及出错信息等。此器件主要有1个20位移位寄存器、1个锁存器、1个多路输出器。多路输出器输出的BCD码经段译码器译码后,换成七段码(abcdefg)和小数点DP送到段驱动器输出。
(4)存储器
读写器中设计了存储器。存储器选用24CXX系列的串行E2PROM。在售卡机中主要存放卡号、售卡员号、售卡金额、售卡日期、售卡总金额和售卡总记录数;在车载机中主要存放乘客IC卡号、司机号和刷卡总数等信息。显示用MC14499驱动4位共阴数码管。正常工作后,每隔一段时间要把读写器拿到公交管理中心将读写器储存的信息回放到PC机中保存处理。读写器中存储器可采用24C64,其存储量为8KB,如有需要也可用容量更大的存储器如24C128或24C256等。
(5)监控电路 监控电路采用DS1232L芯片。它是个看门狗定时器,其功能是:上电和掉电时给89C52产生RESET信号;看门狗对系统进行监控,防止死机。
(6)非接触式IC卡
非接触式IC卡选用Mifare卡。其工作频率为 13.6MHz,存储量为1KB分16区,每区2套密码,每个区的存储区域相互独立,因此每区可用作一种用途(第0区一般不用)以实现一卡多用。由于Mifare卡密码验证机制严密,保存的信息比较可靠安全,可以擦写几万次。
Mifare卡的16个区,每区又分4块,每块16字节。在售卡机中用第1区作用户储值块,其中第0块存放身份号,第1~2块存放价值,第3块存放两套6字节密码和4字节读写访问条件。
四、程序设计
下面以售卡机为主介绍软件设计方法。
考虑到售卡金额的安全管理,公交公司事先必须制作好两种IC票卡:一种是用户IC票卡,另一种是售卡员的售票IC卡。这两种卡可使用相同区号,但密码和访问条件完全不同,不会混淆。售卡员要进行售卡时,必须先到公交公司办理一张售票IC卡,才有售卡的资格。售票IC卡内存放了售卡员身份号、允许售卡的最大金额、两套6字节密码和4字节读写访问条件。售卡员售卡时,每充值一张卡必须从自己的售票IC卡中减去售卡金额,加到用户IC卡中。当售票IC卡金额减到零后,要到公交公司结账,并再对售票IC卡充值记账。这样,可使公交公司的售卡网点分布得多而不乱,又可方便用户充值加卡,可有效地防止售票人员账目不清而造成的资金流失。程序主要包括IC卡读写操作程序、键盘扫描程序、显示程序、存储器读写程序和通信程序。
1.主程序
主程序主要完成系统变量的初始化,循环扫描键盘,检测操作IC卡,将操作结果存储和显示。在售卡机中使用了8KB的24C64作存储器,主要存储的内容有:售卡机机号(1字节)、售卡总金额(3字节)和总记录(2字节)。售出的每张卡的记录包含:用户卡身份号(4字节)、售卡日期(2字节)、加卡金额(1字节)和售卡人编号(1字节)。因此最大能存储1023张售卡记录。主程序流程如图2所示,读写器对IC卡的操作流程如图3所示。
2.键盘扫描程序
键盘扫描采用反转法读键:先从P2口的高4位输出零电平,从P2口的低4位读取键盘状态;再从P2口的低4位输出零电平,从P2口的高4位读取键盘状态,将两次读取的结果组合起来就可以得到当前按键的特征码(见程序中TABLE表)。有了这张表就可以编程,将它们转换成顺序码。用当前读得的特征码来顺序查表,用一单元记录查找次数。当在表中查到有该特征码时,它的位置(即查找次数)就是对应的顺序码。对应的键盘查键程序如下: KEY: MOV P2,#0FH ;用反转法查键
MOV A,P2
ANL A,#0FH
MOV B,A
MOV P2,#0F0H
MOV A,P2
ANL A,#0F0H
ORL A,B
CJNE A,#0FFH,KEY1
RET ;无键按下
KEY1: MOV B,A ;有键按下,存键码
MOV DPTR,#TABLE
MOV R3,#0FFH ;存顺序码单元初始化
KEY2: INC R3
MOV A,R3
MOVC A,@A+DPTR
CJNE A,B,KEY3 ;判键码,求顺序码
MOV A,R3 ;若找到键码,存顺序码
RET
KEY3: CJNE A,#0FFH,KEY2;判是否查完
RET ;已查完,键码未找到,以无按键处理
TABLE: DB 77H,7BH,0BBH ;按键特征码表
DB 0DBH,7DH,0BDH
DB 0DDH,7EH,0BEH
DB 0DEH,0B7H,0D7H
DB 0EEH,0EDH,0EBH
DB 0E7H,0C7H,0FFH
3.显示程序
根据图1,在显示电路中,用P1口的3根I/O口线(P1.0、P1.1、P1.2)分别提供时钟信号(CLK)、串行数据(DA)和使能信号(EN)。MC14499每一次可接收20位串行输入数据,前4位用于控制数码管的小数点显示,后16位是4个数码管的BCD码输入数据。在每帧数据传送之前,必须将EN置0;然后传送20位数据,数据传送完后,再将EN置1。显示程序如下:
DISP: CLR P1.0 ; 清CLK
CLR P1.2 ;清EN
MOV R2,#04 ;置传送位数
MOV A,#00
LCALL W14499 ;调送数显示
MOV A,@R1 ;读要显示的数
MOV R2,#08 ;置传送位数
LCALL W14499
INC R1
MOV A,@R1
MOV R2,#08 ; 置传送位数
LCALL W14499
SETB P1.2 ;置EN位
RET
W14499: SETB P1.0 ; 清CLK
RLC A ;准备逐位送数显示
MOV P1.1,C ; 将数移入DA
CLR P1.0 ; 清CLK
DJNZ R2,W14499
RET
4.串行E2PROM读写程序
24C64为I2C总线的E2PROM。SCL为400kHz时钟线,SDA为双向数据线,A2、A1、A0三位为片选地址,即I2C总线上最多可并联8个串行E2PROM芯片。对E2PROM的操作方式由读写控制命令字决定,如图4所示。其中1010为4位读写控制码,R/W为读写控制位:0为写操作,1为读操作。所以结合图1可知A2H为写控制命令字,A3H为读控制命令字。
对存储器写操作,首先,单片机向24C64发一个START命令,产生开始条件。然后,发写命令控制字(如A2H)。当24C64接到命令后,进入一个写周期,再由单片机发送存储地址,即确定数据写入到存储器的哪个地址,随后,单片机将要存储的数据送入到SDA数据线上。写周期结束时,单片机再发一停止位(STOP)。
对存储器读操作,首先,单片机向24C64发一个START命令,产生开始条件。然后发写命令控制字(如A2H)。当24C64接到命令后,进入一个写周期,再由单片机发送存储地址。存储地址发送成功后,单片机又向24C64发一个START命令,产生开始条件,然后发读命令控制字(A3H)。当24C64接到命令后,进入一个读周期,单片机从SDA数据线上读出指定存储地址中的数据。读周期结束时,单片机再发一停止位(STOP)。(程序略)
值得注意的是,对存储器操作时,每读写一个字节,单片机必须送一个应答位(ACK),释放一下SDA数据线,以便存储器能继续接收数据。
5.通信程序
在读写器中,单片机与PC机之间的通信主要由TC232来实现TTL电平(0~5V)与RS232电平(+10~-10V)的转换(电路见图1),以完成售卡机保存的售卡记录的传送。通信格式设置为:采用串行工作方式1,波特率为9600baud, 1个起始位,8位数据位,1个停止位,采取和校验方式。读写器中,单片机程序可采用C语言进行编程。C语言有功能丰富的库函数,运算速度快、编译效率高、可移植性好、软件的可读性强,便于改进和扩充(程序略)。
为提高在公交系统的适应能力,包括用户的各类特殊要求,抗干扰,抗恶劣环境,除硬件上采用监控电路外,在软件上还采取了指令冗余和软件陷阱。
一、IC卡读写器概述
目前经常接触到的IC卡有两种:接触式的和非接触式的IC卡。接触式的IC卡通过机械触点从读写器获取能量和交换数据;非接触式IC卡通过线圈射频感应从读写器获取能量和交换数据,所以又称射频卡。目前在社会上常见的是接触式IC卡。它具有存储量大(以兆为单位),保密功能强(有多重密码设置和认证功能),可实现一卡多用。但是,这类卡的读写操作速度较慢,操作也不方便,每次读写时必须把卡正确地插入到读写器的口槽才能完成数据交换,这样,在公交、考勤等需要频繁读写卡的场合就很不方便,而且读写器的触点和卡片上IC卡的触脚暴露在外,容易损坏和搞脏而造成接触不良。
非接触式IC卡是根据射频电磁感应原理产生的。它的读写操作只需将卡片放在读写器附近一定的距离之内就能实现数据交换,无需任何接触,使用中非常方便、快捷,不易损坏。因此,在公交、门禁、校园、企事业等人事管理、娱乐场所等方面有广泛的应用前景。目前我国引进的射频 IC卡主要有PHILIPS公司的Mifare和ATMEL公司的Temic卡。下面以PHILIPS公司的Mifare卡为主、介绍城市公交自动售票IC卡读写器的实现方法。
二、工作原理
非接触式IC 卡读写器以射频识别技术为核心,读写器内主要使用了1片Mifare卡专用的读写处理芯片--MMM微模块。它是一个小型的最大操作距离达20~30mm的Mifare读/写设备的核心器件,其功能包括调制、解调、产生射频信号、安全管理和防碰撞机制。内部结构分为射频区和接口区:射频区内含调制解调器和电源供电电路,直接与天线连接;接口区有与单片机相连的端口,还具有与射频区相连的收/发器、16字节的数据缓冲器、存放64对传输密钥的ROM、存放3套密钥的只写存储器以及进行三次证实和数据加密的密码机、防碰撞处理的防碰撞模块和控制单元。这是与射频卡实现无线通信的核心模块,也是读写器读写Mifare卡的关键接口芯片。读写器工作时,不断地向外发出一组固定频率的电磁波(13.6MHz),当有卡靠近时,卡片内有一个LG串联谐振电路,其频率与读写器的发射频率相同,这样在电磁波的激励下,LG谐振电路产生共振,从而使电容充电有了电荷。在这个电容另一端,接有一个单向导电的电子泵,将电容内的电荷送到另一个电容内存储。当电容器充电达到2V时,此电容就作为电源为卡片上的其他电路提供工作电压,将卡内数据发射出去或接收读写器发出的数据与保存。
三、硬件组成
公交收费系统结构复杂,环节较多,因此,公交非接触IC 卡的读写器至少应包括公交售卡机、公交车载机和公交制卡机三个读写器。除了售卡机要求有键盘外,其余的硬件组成大体相同。图1为非接触IC卡及其读写器硬件电路原理图,主要由MMM微模块、单片机、键盘、显示、存储器、天线和监控电路以及与PC机通信的TC232串行通信接口电路等部分组成。
(1)单片机系统
单片机采用89C52。它片内有8KB的ROM,256字节的RAM以及有32个I/O口。P1口与串行器件24C64和显示、报警电路连接;P0口与MMM微模块相连,用作数据线;P2口用作4×4键盘;P3口用于读写控制和中断。
(2)键盘电路
键盘接口电路用P2口接成4×4结构,共16个键。其中数字键10个,功能键2个,退格键和回车键各1个,有2个键暂时未用。 功能键有查询和通信两键。
查询键:售卡员可以通过此键查询售卡金额和售卡记录数。 通信键:由于读写器的存储量有限,因此读写器每售卡一段时间,应将读写器中的数据通过RS-232串行接口与PC机通信,以便回放和清空读写器中的数据。数据回放到PC机中后,通过分析处理,形成各种报表,以便公交公司及时掌握售卡情况。
(3)显示电路
显示部分采用数码显示,利用串行输入BCD码--十进制译码驱动显示器件MC14499来完成与单片机系统的显示接口,以显示读写器工作状态、输入的数据或读出IC卡中所剩余以及出错信息等。此器件主要有1个20位移位寄存器、1个锁存器、1个多路输出器。多路输出器输出的BCD码经段译码器译码后,换成七段码(abcdefg)和小数点DP送到段驱动器输出。
(4)存储器
读写器中设计了存储器。存储器选用24CXX系列的串行E2PROM。在售卡机中主要存放卡号、售卡员号、售卡金额、售卡日期、售卡总金额和售卡总记录数;在车载机中主要存放乘客IC卡号、司机号和刷卡总数等信息。显示用MC14499驱动4位共阴数码管。正常工作后,每隔一段时间要把读写器拿到公交管理中心将读写器储存的信息回放到PC机中保存处理。读写器中存储器可采用24C64,其存储量为8KB,如有需要也可用容量更大的存储器如24C128或24C256等。
(5)监控电路 监控电路采用DS1232L芯片。它是个看门狗定时器,其功能是:上电和掉电时给89C52产生RESET信号;看门狗对系统进行监控,防止死机。
(6)非接触式IC卡
非接触式IC卡选用Mifare卡。其工作频率为 13.6MHz,存储量为1KB分16区,每区2套密码,每个区的存储区域相互独立,因此每区可用作一种用途(第0区一般不用)以实现一卡多用。由于Mifare卡密码验证机制严密,保存的信息比较可靠安全,可以擦写几万次。
Mifare卡的16个区,每区又分4块,每块16字节。在售卡机中用第1区作用户储值块,其中第0块存放身份号,第1~2块存放价值,第3块存放两套6字节密码和4字节读写访问条件。
四、程序设计
下面以售卡机为主介绍软件设计方法。
考虑到售卡金额的安全管理,公交公司事先必须制作好两种IC票卡:一种是用户IC票卡,另一种是售卡员的售票IC卡。这两种卡可使用相同区号,但密码和访问条件完全不同,不会混淆。售卡员要进行售卡时,必须先到公交公司办理一张售票IC卡,才有售卡的资格。售票IC卡内存放了售卡员身份号、允许售卡的最大金额、两套6字节密码和4字节读写访问条件。售卡员售卡时,每充值一张卡必须从自己的售票IC卡中减去售卡金额,加到用户IC卡中。当售票IC卡金额减到零后,要到公交公司结账,并再对售票IC卡充值记账。这样,可使公交公司的售卡网点分布得多而不乱,又可方便用户充值加卡,可有效地防止售票人员账目不清而造成的资金流失。程序主要包括IC卡读写操作程序、键盘扫描程序、显示程序、存储器读写程序和通信程序。
1.主程序
主程序主要完成系统变量的初始化,循环扫描键盘,检测操作IC卡,将操作结果存储和显示。在售卡机中使用了8KB的24C64作存储器,主要存储的内容有:售卡机机号(1字节)、售卡总金额(3字节)和总记录(2字节)。售出的每张卡的记录包含:用户卡身份号(4字节)、售卡日期(2字节)、加卡金额(1字节)和售卡人编号(1字节)。因此最大能存储1023张售卡记录。主程序流程如图2所示,读写器对IC卡的操作流程如图3所示。
2.键盘扫描程序
键盘扫描采用反转法读键:先从P2口的高4位输出零电平,从P2口的低4位读取键盘状态;再从P2口的低4位输出零电平,从P2口的高4位读取键盘状态,将两次读取的结果组合起来就可以得到当前按键的特征码(见程序中TABLE表)。有了这张表就可以编程,将它们转换成顺序码。用当前读得的特征码来顺序查表,用一单元记录查找次数。当在表中查到有该特征码时,它的位置(即查找次数)就是对应的顺序码。对应的键盘查键程序如下: KEY: MOV P2,#0FH ;用反转法查键
MOV A,P2
ANL A,#0FH
MOV B,A
MOV P2,#0F0H
MOV A,P2
ANL A,#0F0H
ORL A,B
CJNE A,#0FFH,KEY1
RET ;无键按下
KEY1: MOV B,A ;有键按下,存键码
MOV DPTR,#TABLE
MOV R3,#0FFH ;存顺序码单元初始化
KEY2: INC R3
MOV A,R3
MOVC A,@A+DPTR
CJNE A,B,KEY3 ;判键码,求顺序码
MOV A,R3 ;若找到键码,存顺序码
RET
KEY3: CJNE A,#0FFH,KEY2;判是否查完
RET ;已查完,键码未找到,以无按键处理
TABLE: DB 77H,7BH,0BBH ;按键特征码表
DB 0DBH,7DH,0BDH
DB 0DDH,7EH,0BEH
DB 0DEH,0B7H,0D7H
DB 0EEH,0EDH,0EBH
DB 0E7H,0C7H,0FFH
3.显示程序
根据图1,在显示电路中,用P1口的3根I/O口线(P1.0、P1.1、P1.2)分别提供时钟信号(CLK)、串行数据(DA)和使能信号(EN)。MC14499每一次可接收20位串行输入数据,前4位用于控制数码管的小数点显示,后16位是4个数码管的BCD码输入数据。在每帧数据传送之前,必须将EN置0;然后传送20位数据,数据传送完后,再将EN置1。显示程序如下:
DISP: CLR P1.0 ; 清CLK
CLR P1.2 ;清EN
MOV R2,#04 ;置传送位数
MOV A,#00
LCALL W14499 ;调送数显示
MOV A,@R1 ;读要显示的数
MOV R2,#08 ;置传送位数
LCALL W14499
INC R1
MOV A,@R1
MOV R2,#08 ; 置传送位数
LCALL W14499
SETB P1.2 ;置EN位
RET
W14499: SETB P1.0 ; 清CLK
RLC A ;准备逐位送数显示
MOV P1.1,C ; 将数移入DA
CLR P1.0 ; 清CLK
DJNZ R2,W14499
RET
4.串行E2PROM读写程序
24C64为I2C总线的E2PROM。SCL为400kHz时钟线,SDA为双向数据线,A2、A1、A0三位为片选地址,即I2C总线上最多可并联8个串行E2PROM芯片。对E2PROM的操作方式由读写控制命令字决定,如图4所示。其中1010为4位读写控制码,R/W为读写控制位:0为写操作,1为读操作。所以结合图1可知A2H为写控制命令字,A3H为读控制命令字。
对存储器写操作,首先,单片机向24C64发一个START命令,产生开始条件。然后,发写命令控制字(如A2H)。当24C64接到命令后,进入一个写周期,再由单片机发送存储地址,即确定数据写入到存储器的哪个地址,随后,单片机将要存储的数据送入到SDA数据线上。写周期结束时,单片机再发一停止位(STOP)。
对存储器读操作,首先,单片机向24C64发一个START命令,产生开始条件。然后发写命令控制字(如A2H)。当24C64接到命令后,进入一个写周期,再由单片机发送存储地址。存储地址发送成功后,单片机又向24C64发一个START命令,产生开始条件,然后发读命令控制字(A3H)。当24C64接到命令后,进入一个读周期,单片机从SDA数据线上读出指定存储地址中的数据。读周期结束时,单片机再发一停止位(STOP)。(程序略)
值得注意的是,对存储器操作时,每读写一个字节,单片机必须送一个应答位(ACK),释放一下SDA数据线,以便存储器能继续接收数据。
5.通信程序
在读写器中,单片机与PC机之间的通信主要由TC232来实现TTL电平(0~5V)与RS232电平(+10~-10V)的转换(电路见图1),以完成售卡机保存的售卡记录的传送。通信格式设置为:采用串行工作方式1,波特率为9600baud, 1个起始位,8位数据位,1个停止位,采取和校验方式。读写器中,单片机程序可采用C语言进行编程。C语言有功能丰富的库函数,运算速度快、编译效率高、可移植性好、软件的可读性强,便于改进和扩充(程序略)。
为提高在公交系统的适应能力,包括用户的各类特殊要求,抗干扰,抗恶劣环境,除硬件上采用监控电路外,在软件上还采取了指令冗余和软件陷阱。