基于ARM的非接触IC卡网络系统
随着计算机信息技术和超大规模集成电路技术的发展,以及芯片微型化封装技术的日趋成熟,非接触IC卡逐渐成为人们关注和研究的重点[1].非接触IC卡作为一种全新的应用领域,具有无机械磨损、容易维护、方便使用、信息存储量大[2][3]等特点。本文设计的非接触IC卡网络系统采用ARM处理器,在ARM上移植μC/OS-II实时操作系统,嵌入TCP/IP[4];建立SQL Server 2000大型关系数据库[5],同时,结合Delphi与SQL Server 2000数据库编程技术和Delphi网络编程技术[6][7][8]编写管理软件,实现TCP/IP网络通信;利用ASP+SQL Server动态网站开发技术建立IIS5.1服务器网站,实现大规模的非接触IC卡网络管理系统[9][10],能满足对信息载体的便携性、高安全性、易用性、超大规模管理等要求。本系统可用于服务领域,如货物销售与后勤、商业、生产企业和材料流通等。
1 系统结构和原理
系统设计分为C/S和B/S结构。C/S结构中主要包括专用读卡芯片FM1702N、ARM组成的读卡终端、SQL Server数据库和Delphi编写的管理软件,系统管理员可以在管理界面对用户进行注册、修改、删除、查询等操作,在运行界面实时显示各个读卡终端的状态并记录在数据库上。B/S主要有SQL Server数据库和IIS5.1建立服务器网站,用户能够通过远端的Web网页查询和管理IC卡信息。系统框图如图1所示。
2 系统硬件设计
硬件主要由三星S3C2410、FM1702N、RTL8019AS、LCD、JTAG、语音芯片、键盘等组成。S3C2410采用1.8V ARM920T内核,带有3.3V 16KB指令和16KB数据缓存及MMU单元,非线性(NAND)Flash引导单元,系统管理器(包括片选逻辑和SDRAM控制器),3通道的异步串行口(UART),4通道的DMA,实时时钟单元(RTC),I2C总线接口,IIS总线接口,16/32位RISC微处理器。移植μC/OS-II操作系统,嵌入TCP/IP协议,通过RTL8019AS以太网芯片实现TCP/IP网络通信;FM1702N是读卡专用芯片,主要实现对非接触IC卡的读写操作; LCD实现显示功能;JTAG 用于软件调试使用;音频实现语音功能;键盘实现对系统的输入设置。硬件框图如图2所示。
2.1 FM1702N与S3C2410的接口电路
FM1702N与S3C2410的接口电路如图3所示。FM1702N是上海复旦微电子股份有限公司设计的基于ISO14443标准、Mifare标准的三重认证算法的射频IC卡读卡专用芯片,采用0.6μm CMOS EPPROM工艺,支持多种加密算法,兼容飞利浦的MFRC530.内部的发射器不需要增加有源电路就可以驱动近距离的天线(可达10cm)。接收电路中的FM1702N采用了正交解调电路解调RX脚上ISO14443标准的负载波信号。
FM1702N与S3C2410通过并行接口连接,FM1702N的IRQ与S3C2410的EINT1相连,采用外部中断模式;FM1702N的数据D0~D7与S3C2410数据线的DATA0~DATA7相连;FM1702N的片选信号NCS接在S3C2410的nGCS1,对应的内存地址为0X08000000~0X10000000;FM1702N的A0和A1接高电平,A2接低电平,工作在读/写选通模式下;WR、RD分别与S3C2410的nWE、nOE连接。稳定的工作频率对FM1702N非常重要,本设计外部时钟源,时钟信号加到OSCIN和OSCOUT端口,晶振频率为13.56MHz,同时注意时钟的占空比和防抖动,以保证时钟信号的品质。
2.2 读写器天线的设计
读写器天线的设计是与M1卡进行通信的关键,根据互感原理,半径越大、匝数越多读写器上的天线和M1卡上天线的互感系数就越大。根据国际标准的要求,M1卡和读写器的通信距离为10cm.天线可等效成R、L、C并联回路,等效电路图如图4所示, L为天线的自感,R为天线的等效电阻,C为天线的分布电容。
天线的品质因数是设计天线时要注意的部分。根据国际无线通信标准ISO1444规定:无论TYPEA或TYPEB射频IC卡,读写器和射频IC卡之间的数据传输速度为106kb/s,载波频率为13.56MHz,所以每一位数据维持时间是9.44μs.Type A型射频IC卡读写器到射频IC卡的信号编码是修正米勒编码,传送每一位数具有3?滋s的载波中断,因此,该信号的带宽近似为B=333.333kHz,故读写器天线的品质因数Q=13.56MHz/333.333kHz=35,天线的传输带宽与品质因数成反比关系。因此,过高的品质因数会导致带宽缩小,从而减弱读写器的调制边带,导致读写器无法与卡通信。耦合天线电感值L1(nH)采用下面公式进行估算:
式(1)中:l1为一圈导体的长度,D1为导线的直径或PCB板的线宽(cm),K为线的形状系数(环形K=1.07,矩形K=1.47),N1为环数[3].
2.3 RTL8019AS与S3C2410的接口电路
TRL8019AS与S3C2410的接口电路如图5所示。RTL8019AS是高度集成以太网控制器,带宽10MB/s~20MB/s,支持JUMPER和JUMPERLESS选项,集成10BASET收发器,BNC和AUI接口之间具有自动检测功能,有8条IRQ总线和16条基本地址总线,支持16KB、32KB和64KB BROM和闪存接口。
通过双向三态缓冲器74LS245实现TRL8019AS和S3C2410数据电平的转换,采用外部中断EINT1,TRL8019AS的地址与S3C2410的A0~A4连接,TRL8019AS的AEN与S3C2410的nCS3连接,对应的内存地址ox18000000~ox20000000.
{$page$}
3 系统软件设计
本系统程序设计分为下位机和上位机,μC/OS-II程序结构如图6所示。通过对OS_CFG.H文件的设置来裁剪操作系统,在μC/OS-II中嵌入TCP/IP协议,编写FM1702驱动、TRTL8019驱动、LCD显示和语音驱动;建立SQL2000数据库,Delphi前端数据库管理软件设计,ASP动态网站的制作。
读卡时,非接触IC卡的信息由FM1702N驱动,通过μC/OS-II操作系统向应用程序传送,然后应用程序调用TCP/IP协议,TRL8019AS驱动以太网向PC上位机传输数据,通过Delphi管理软件对数据库进行各种操作。写卡时,PC机通过以太网TRL8019AS驱动TCP/IP协议,μC/OS-II的应用程序通过FM1702N驱动将信息写入非接触IC卡。
3.1 FM1702N驱动程序设计
FM1702N驱动程序的设计主要是对非接触IC卡(简称M1卡)的读写操作,由S3C2410通过对读卡专用芯片FM1702N的寄存器进行设置。FM1702N对M1卡操作流程图如图7所示。
寻卡(Request):当系统初始化后,FM1702N循环向天线发出寻卡信号。只要M1卡处在M1卡读写器天线的工作范围之内,S3C2410控制读写器便向M1卡发出REQUEST all(或REQUEST std)命令。得到能量后,M1卡的ATR启动,将M1卡Block0中的M1卡类型号共2个字节传送给读写器,建立M1卡与读写器的第一步通信联络。如果不进行复位请求操作,读写器对M1卡的其它操作将不会进行。
防冲突机制(Anti collision loop):当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的则处于空闲模式等待下一次选卡。该过程会返回被选卡的序列号。
选卡(Select Card):选择被选中的M1卡的序列号,并同时返回卡的容量代码。
三次相互认证(3 Pass Authentication):选定要处理的M1卡后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验,在三次相互认证之后就可以通过加密流进行通讯(在选择另一扇区时则必须进行另一扇区密码校验)。三次认证的令牌原理框图如图8所示。
三次相互认证过程:
(A)环:由M1卡向读写器发送一个随机数据RB;
(B)环:由读写器收到RB后向M1卡发送一个令牌数据TOKEN AB,其中包含读写器发出的一个随机数据RA;
(C)环:M1卡接收到TOKEN AB后,对其加密部分进行解密,并校验第一次由(A)环中M1卡发出的随机数RB是否与(B)环中接收到的TOKEN AB 中的RB相一致;
(D)环:如果(C)环校验正确,则M1卡向读写器发送令牌TOKENBA;
(E)环:读写器收到令牌TOKEN BA后,将对令牌TOKEN BA中的RB(随机数)进行解密,并校验第一次由(B)环中读写器发出的随机数RA是否与(D)环中接收到的TOKEN BA中的RA一致。如果上述的每一个环都为“真”,都能正确通过验证,则整个认证过程成功;相反,认证过程中的任何一环出现差错,整个认证失败,必须重新开始。如果事先不知卡片上的密码,由于密码的变化极其复杂,因此靠猜测密码而想打开卡上的一个扇区的可能性几乎为零。
对数据块的操作:读(Read),读一个块;写(Write),写一个块;加(Increment),对数值块进行加值;减(Decrement),对数值块进行减值;存储(Restore),将块中的内容存到数据寄存器中;传输(Transfer),将数据寄存器中的内容写入块中;中止(Halt),将卡置于暂停工作状态。
3.2 RTL8019AS驱动程序的设计
RTL8019AS驱动设计的主要任务是完成芯片初始化及实现数据的收发功能。芯片初始化的主要任务是完成DCR(配置寄存器远端DMA位数)、PSTART(接收缓冲区起始页的地址)、PSTOP(接收缓冲区的结束页的地址)、TPSR(发送缓冲区的起始地址)、BNRY(指向最后一个已经读取的页(读指针))、CURR(当前的接收结束页地址(写指针))的初始化。设置发送缓冲区为0X40~0X4b,可存储2个最大以太网数据包;将0X4c~0X7f设置为接收缓冲区。
发送数据时,先将待发送的数据通过远程DMA写入芯片RAM,给出发送缓冲区首地址和数据包长度,启动发送命令(CR=0x3E),即可实现RTL8019AS的数据发送。
接收数据时,接收缓冲区构成一个循环FIFO队列,PSTART和PSTOP两个寄存器限定了循环队列的开始和结束页,CURR为受芯片控制的写入指针,BNRY为由主机程序控制的读出指针。根据CURR是否等于BNRY+1,可以判断是否收到新的数据包,新收到的数据包存于以CURR指定的地址为首地址的RAM中,即可实现数据的接收。
3.3 Delphi管理软件
Delphi管理软件的关键是对SQL Server数据库的读写并用Winsocket编写程序实现TCP/IP网络通信。首先在系统上安装SQL Server 2000数据库(本系统安装的是SQL Server 2000个人版),然后打开“企业管理器”,在“控制台根目录”下打开“Microsoft SQL Servers”中的“SQL Server组”,点击本地服务器使SQL Server启动,在“数据库”项上点击右键选择“新建数据库”就可以建立数据库,如果是已建好的数据库也可以选择“所有任务”中的附加数据库。在系统上安装Delphi7数据库前端开发软件之后,新建一个工程,在工程中建一个数据模块,使用Delphi提供的ADO组件TADOConnection,通过设置ConnectionString属性为“Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=IcNet”连接数据库(IcNet是本系统的数据库名),利用TADOQuery执行SQL语句,使用前设置TADOQuery的Connection属性为ADOConnection,SQL语句如下:
- With ADOQuery do
- Begin
- Close;//关闭数据集
- SQL.Clear;//清空SQL语句
- SQL.Add(‘Select?鄢From tablename’);//添加SQL语句
- Open;//执行SQL语句
- End;
通过SQL语句访问SQL Server数据库,实现对系统用户的注册、修改、删除和查询等操作。
Socket通信程序采用Delphi7中的ServerSocket和ClientSocket两个组件实现TCP/IP网络通信。ClientSocket组件为客户端组件,是通信的请求方主动与服务器端建立连接。ServerSocket组件为服务器端组件,是通信的响应方,它的动作是监听以及被动接受客户端的连接请求,并对请求进行回复。ServerSocket组件可以同时接受一个或多个ClientSocket组件的连接请求,并与每个ClientSocket组件建立单独连接,进行单独通信。在设计中,服务器端程序声明了一个记录类型:
- type
- client_record=record
- CHandle:integer; //客户端套接字句柄
- CSocket:TCustomWinSocket; //客户端套接字
- CName:string; //客户端计算机名称
- CAddress:string; //客户端计算机IP地址
- CUsed:boolean; //客户端联机标志
- end;
- 定义一个公共数组:
- Session:array[0……CMax] of client_record;//客户端连接数
- //组,CMax为最大连接数
- Sessions:integer; //客户端连接数
记录类型数据保存客户端的信息,同时保存当前客户端的连接状态。其中CHandle保存客户端套接字句柄,以便准确定位每个与服务器端保持连接的客户端;Csocket保存客户端套接字,通过它可以对客户端进行回复;Cused记录当前客户端是否与服务器端保持连接。对组件ServerSocket的属性进行设置,。Port是通信端口(端口号的有效范围0~65535,大于49151的端口号一般为动态的),必须设置,本系统设为2222;。ServerTypt是服务器端读写信息类型,设置为stNonBlocking表示异步读写信息;。ThreadCacheSize是客户端的最大连接数,即服务器端最多允许多少客户端同时连接通信,它可以根据系统的要求设置,其他属性采用默认设置即可。组件ClientSocket的属性设置,。Port是通信的端口,必须与服务器端的设置相同;。ClientType是客户端读写信息类型,应该与服务器端的设置相同,为stNonBlocking表示异步读写信息;。Host是客户端要连接的服务器的IP地址,必须设置,当然也可以在代码中动态设置,其他属性采用默认设置即可。
3.4 ASP动态网站
ASP动态网站采用ASP+SQL Server动态网站开发技术。首先在服务器上安装IIS5.1软件,打开管理工具的“internet服务管理器”,在“默认网站”上单击鼠标右键,选择“新建虚拟目录”创建一个“非接触IC卡网络站点”,并对各项属性进行设置。系统采用Macromedia Dreamweaver MX 2004开发平台来编写和调试ASP网页代码,首先在开发平台上建立一个“非接触IC卡网络站点”,对站点的参数进行设置使其与IIS5.1服务器连接,在ASP动态网站中关键是对服务器SQL Server数据库的访问,因此建立了一个连接(conn.asp),以实现对SQL Server数据库读写操作,语句如下:
- Set conn=Server.CreateObject(″ADODB.Connection″)
- conn.connectionstring=″Driver={SqlServer};Server=(local);UID=sa;database=IcNet″
- conn.open
- 当要访问SQL Server数据库时,除了要调用conn.asp连接数据库(),还要创建一个记录对象,语句如下:
- set rs=server.CreateObject(″adodb.recordset″)
- sql=″select?鄢from tablename where condition″
- rs.open sql,conn,3,3
这样就可以实现对SQL Server数据库的访问操作。在设计时主要采用了VBScript和JAVAScript编程技术,ASP中的Form标签用来创建一个提交的表单数据,利用Session对象记录客户端信息和Request对象从客户端获得信息等ASP+SQL Server动态网站开发技术。
{$page$}
4 系统测试
ARM读卡终端与服务器建立网络连接时,测读写器得到的数据如表1所示。当M1卡向不同的方向运动及M1卡处于静止时,系统能正常工作;当M1卡被纸张、木材和塑料等非金属或非透明的材质包覆时,也可以进行穿透性通讯,但若是铁质金属,则无法进行通讯。
从表1可以看出,读写器与M1卡之间读写的最大无冲突通讯时间都小于11ms,处理每个冲突时间只要1ms.一般情况下,50张M1卡在1s之内可以处理完,所以该系统能应用于大规模的非接触IC卡网络管理,用于身份识别、计费、智能管理等实际应用中。
参考文献
- [1] 陈欣,郎为民,王建秋,等。射频识别技术安全问题[J].电子技术,2004,(04):37-38.
- [2] 章晓卿,刘中元。非接触式RFID读写器系统的研究[J].国外电子元器件,2006,(2):15-16.
- [3] Klaus Finkenzeller[德]著,陈大才编译,王桌人审校。射频识别技术[M].北京:电子工业出版社,2001.
- [4] LABROSSE J J著,邵贝贝译。μC/OS-II-源代码公开的实时嵌入式操作系统[M].北京:中国电力出版社,2001.
- [5] 赛奎春,宋坤。SQL Server数据库开发实例解析[M].北京:机械工业出版社,2006.
- [6] 清宏计算机工作室。Delphi编程技术(网络与数据库篇)[M].北京:机械工业出版社,2001.
- [7] 马海莲。Delphi7组件应用实例[M].北京:电子工业出版社,2003.
- [8] 彭勇,王建芬。Delphi5.0网络与通信开发应用[M].北京:中国水力出版社,2000.
- [9] 杨世袭,赵辉编。ASP+SQL Server动态网站开发从基础到实践[M].北京:电子工业出版社,2006.
- [10] 袁启昌,景鹏森。ASP动态网页设计教程[M].北京:科学出版社,2005.