用TCP/IP通信的射频一卡通系统设计
射频IC卡使用及携带方便、安全性高、成本低,已得到越来越广泛的应用。本文介绍一种用TCP/IP通信的射频一卡通系统。
系统分为两个子系统,即嵌入式TCP/IP子系统和射频IC卡读卡子系统。嵌入式TCP/IP子系统使用一个简化的TCP/IP协议栈,易于在单片机中实现。射频IC卡读卡子系统是对射频卡进行读写的系统。两个子系统各使用一片AT89S52单片机,子系统间通过UART通信。
1 嵌入式TCP/IP子系统
本子系统主要负责与上位机的通信。下面介绍其结构设计和简化的TCP/IP协议栈。
1.1 嵌入式TCP/IP子系统的结构设计
本子系统的结构如图1所示。系统主控芯片为AT89S52单片机,选用IS61C256AH芯片外部扩展32KB SRAM。单片机与片外RAM的接口:P0[0..7]经74HC373锁存低8位地址,再接到SRAM的[A0..A7];P2[0..6]接SRAM 的[A8..A14];P2.7接SRAM的CE,当P2.7为低电平时,SRAM使能;P3.6和P3.7分别接SRAM的WE和OE,作为读写 SRAM的信号,同时P0复用到SRAM的[IO0..IO7]。局域网的以太网控制器使用RTL8019AS。单片机与8019AS的接口:P3.6和 P3.7分别接IORB和IOWB,作为网络芯片的I/O信号;P3.5接RSTDRV,用于网络Reset;P3.3接IOCHRDY,用于网络芯片忙时插入等待时间;P1[0..7]接[SD0..SD7]。由于使用轮询方式,所以IRQ可以不设定,因为I/O Base选择300H,所以IOS0~IOS3悬空。P2[0..4]接[SA0..SA4],SA5..SA7接低电平,P2.7接SA8和SA9, SA10..SA19接低电平,这样就使得P2.7为高电平时,选择网络芯片,同时P2[0..4]为片内寄存器地址。因为没有Memory Read和Write的动作,将SMEMRB和SMEMWB接高电平。因为在发出I/O命令时,地址都会先准备就绪,所以将AEN接低电平。为了使用 jumper进行初始化设定,将JP接高电平。P3.0和P3.1是单片机UART的RX和TX,连接到读卡器子系统。
嵌入式TCP/IP子系统的结构设计
1.2 嵌入式TCP/IP子系统的简化协议栈设计
由于单片机的资源有限,本子系统针对一卡通系统的要求简化了TCP/IP协议栈,只需实现系统必需的功能即可。TCP/IP协议栈有四个层次,分别为链路层、网络层、运输层和应用层,如图2所示。下面对简化协议栈逐层说明。
TCP/IP协议的四个层次
(1)链路层协议。10Mbps以太网的帧有以太网帧和IEEE 802帧两种封装格式。根据RFC 1122(即主机需求RFC)的要求,所有主机必须能够发送和接收以太网帧,应该能够接收IEEE 802帧,也许能够发送IEEE 802帧。根据这一要求,本系统设定为能够接收以太网帧和IEEE 802帧,只能发送以太网帧,不能发送IEEE 802帧。由于系统不会在同一主机的不同进程间交换IP分组,所以不支持环回接口(Loopback Interface)。显然SLIP和PPP链路协议也不必支持。在链路层中,每接收到一个帧,都检查其Type field的值,只交付0x0800和0x0806二种Type,丢弃其他的Type。RARP帧的Type为0x8035,因为系统不必支持RARP协议,所以这种帧也不交付。Type为0x0800表示帧中封装了IP分组,Type为0x0806表示帧中封装了ARP分组,这两种帧的分组会被取出,并交付给相应的子程序。
(2)网络层协议。本系统只交付Protocol=1和Protocol=17的分组,其他的Protocol都丢弃,即只支持ICMP和UDP协议;不支持IGMP协议(Protocol=2),相应地也不支持组播(multicast),但支持广播;不支持TCP协议 (Protocol=6)。对于ICMP协议,只支持回显请求和回显应答,即只处理Type=0,Code=0和Type=8,Code=0,其他的 Type和Code丢弃,所以Ping读卡器的IP地址会收到应答。对于Protocol=17的分组,先检查目的地址,如果为广播地址或是本机地址,则取出其中的UDP数据报,交付给运输层,丢弃其他分组。
(3)运输层协议。本系统只支持UDP协议,而且只接收一个指定端口的UDP数据报,丢弃其他端口的数据报。收到要交付的数据报后,取出其中的数据内容,交给应用层子程序。
(4)应用层。根据收到的不同上位机指令,分别进行处理。指令包括:扫描在线的读卡器、设定读卡器地址、同步读卡器时间、读取读卡器容量状态、上载刷卡记录等。
2 射频IC卡读卡子系统
本子系统完成读写射频卡、保存刷卡资料、发出控制开关量等功能。
2.1 读卡子系统结构设计
本子系统选用PHILIPS公司的MF1 IC S50芯片的非接触式IC卡。这种卡的RF接口为ISO/IEC 14443A,工作频率为13.56MHz,内含1KB EEPROM。EEPROM的组成包括16个扇区,每扇区有4个区,每区有16字节。读卡芯片选用PHILIPS公司的MF RC500,这种芯片与单片机接口简单,有自动检测与单片机接口方式的功能。单片机使用AT89S52,选用ATMEL的DataFlash AT45DB161B保存刷卡资料,系统设定资料保存在Serial EEPROM 24C02中,时间芯片选用DS1302。系统结构如图3所示。单片机是主控芯片。与读卡芯片RC500 的接口为:P0[0..7]接RC500的 D0..D7,P1.4接RSTPD,P1.5接NCS,P3.2接IRQ,P3.6和P3.7接NWR和NRD。与AT45DB161B的接口为: P1.0接SO,P1.1接SI,P1.2接SCK,P1.3接CS。与DS1302的接口为:P2.0接SCLK,P2.1接I/O,P2.2接CE。与24C02的接口为:P2.6接SCL,P2.7接SDA。单片机的P3.3、P3.4、P3.5接显示驱动。P2.3接开关量控制,P2.4接蜂鸣器。
读卡子系统结构设计
2.2 读卡子系统软件设计
本子系统软件设计包括:对MF1卡进行读写操作;读取和设定时间芯片的日期和时间;保存刷卡资料和设定资料;发送显示信息和发出开关信号等。以下主要介绍MF1卡的读写操作部分。
MF1卡的状态机如图4所示。当MF1卡进入读卡器天线的工作区时,经Reset后进入IDLE状态。此时可以接收从RC500发来的指令。
读卡子系统软件设计
询卡指令REQA,当MF1卡收到REQA后,会用ATQA回答,ATQA由两个字节组成,其中b7和b8表示UID的大小,b1~b5为防碰撞位,其他位为0。若RC500收到ATQA,则表示在天线的工作区有卡存在。此后进入防碰撞循环。
防碰撞循环开始时,并不知道UID,所以RC500发送cascade level 1 的select code,并指定NVB= 20。此时MF1卡要回复自己的UID。如果没有碰撞,则RC500会收到完整的4字节UID,否则,用碰撞发生位置更新NVB的值,重发指令,直到收到完整的4字节UID。然后RC500再用这个select code,并设NVB=70,加上4字节UID,发给MF1卡。MF1卡将收到的UID与自己的UID比较,如果相同,则回复SAK。此时RC500检查 SAK。如果b3为1,则表示UID不完整,RC500将cascade level加1,重新循环,直到收到的SAK b3为0,才表示Select完成。此后进入认证阶段。
进行认证之前,必须先用RC500的LoadKeyE2或LoadKey指令将密码装载到RC500的Key Buffer中,然后对指定的扇区发出Authent1指令和Authent2指令。如果认证通过,则可进入读写阶段。
在读写阶段,RC500可以通过写本扇区的Sector Trailer来修改此扇区的密码和存取条件,也可以根据存取条件对本扇区的Data Block进行读、写、增、减、恢复和转移。
本设计在局域网和广域网中使用方便。经过反复测试,系统性能稳定、可靠。
参考文献
1 W Richard Steven.TCP/IP Illustrated Vol 1、2、3.AddisonWesley,1996
2 Andrew S.Tanenbaum.计算机网络(第三版).北京:清华大学出版社,2000
3 Philips Semiconductors.MF1 IC S50 Functional Specification.http://www.semiconductors.philips.com,2001
4 Philips Semiconductors.MF RC500 Product Specification.http://www.semiconductors.philips.com,2004