1 引言
如今,在一些就餐比较集中的大、中专及中学里,就餐基本上采用微机管理。学生凭一张非接触式RFID卡就可以方便地在学校食堂消费。有些学校采用了校园一卡通,只要持有合法的RFID卡,就可在全校范围内的公共消费场所进行消费。
RFID是Radio Frequency Identification的缩写,即射频识别卡或感应式电子电路等。RFID射频识别是非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据,识别工作无需人工干预,可工作于各种恶劣环境。RFID技术可识别高速运动物体并可同时识别多个标签,操作快捷方便。AT88RF020型电路就是Atmel公司生产的非接触式RFID卡。
2 AT88RF020的特点
AT88RF020型射频识别卡的主要特点如下:
●13.56MHz射频卡,遵循ISO/ECl4443 Type B协议;
●容量为2048字节;
●每张卡有惟一序列号;
●带有加密和锁定功能;
●有1个1次性计数器;
●所有传输信息中包括1个字节的循环校验码;
●写时间为3ms;
●写次数为100 000次;
●工作环境温度范围为0℃一70℃。
3 射频识别系统的组成及工作原理
3.1 RFID系统的基本组成
(1)标签(Tag,即射频卡)
由耦合元件及电路组成,标签含有内置天线,用于和射频天线进行通信,每个标签具有唯一的电子编码,附着在物体上标识目标对象。图1示出AT88RF020型RFID的内部结构。
(2)阅读器(Reader或读卡器)
读取(除读卡外还可以写入)标签信息的设备,可设计为手持式或固定式。
(3)天线(Antenna)
在标签(射频卡)和读卡器之间传递射频信号。有些系统还通过读卡器的RS232或RS485接口与外部计算机(上位机主系统)连接,进行数据交换。
3.2 RFID系统的基本工作原理
RFID系统的基本工作原理是读卡器通过发射天线发送一定频率(如13.56MHz)的射频信号,当射频卡进入发射天线工作区域时产生感应电流,射频卡获得能量并被激活;射频卡将自身的编码等信息通过射频卡的内置发射天线发送出去;系统接收天线接收从射频卡发送来的载波信号,经天线调节器传送到读卡器,读卡器对接收的信号进行解调和解码后送到后台主系统进行相关处理;主系统根据逻辑运算判断该卡的合法性,针对不同的设定做出相应的处理和控制,发出指令信号,控制执行机构动作。
3.3 RFID系统读卡器的结构及工作原理
对读卡器而言,在耦合方式(如电感一电磁)、通信流程(如FDX、HDX、SEQ)、射频卡到读卡器的数据传输方式(如负载调制、反向散射、高次谐波)及频率范围等方面,不同的非接触传输方法虽有根本的区别,但所有的读卡器在功能原理上及由此决定的设计构造上都很相似,所有阅读器均可简化为高频接口和控制单元2个基本模块。高频接口包含发送器和接收器,其功能包括产生高频发射功率以启动射频卡并提供能量;对发射信号进行调制,用于将数据传送给射频卡;接收并解调来自射频卡的高频信号。不同射频识别系统的高频接口设计具有一些差异,电感耦合系统的高频接口原理如图2所示。
读卡器控制单元的功能包括与应用系统软件进行通信并执行应用系统软件发来的命令;控制与射频卡的通信过程(主一从原则);信号的编解码。对一些特殊的系统还有执行反碰撞算法,对射频卡与阅读器间要传送的数据进行加密和解密,以及进行射频卡和读卡器间的身份验证等附加功能。
4 AT88RF020的存储结构
AT88RF020有2048字节的存储容量,分成32页,每页8个字节,存储结构如表1所示。
上表中标有“一”的字节由用户定义,出厂时初始值为O。
Pseudo Unique PICC ID是卡的惟一序列号;卡序列号由生产厂家写入,不能修改。
Application Data是应用数据,该数据作为ATQB回复信息的一部分由卡传输到读写器中。
Counter是计数器,每执行1次COtJNT指令,计数器的值就加l,初始值由厂家设定为0。
Signature是签名(用于加密),该数据位于第2页的前6个字节,可以通过COUNT指令修改,Countex和Signature可以提供进一步的安全保护。
Password是密码,放在第3页中,不能读出。
Lock Bits是锁定位,位于第0页,验证密码后,能用LOCK命令修改,锁定位中的每一位与内存各页对应,如果某位被设为“1”,则对应的页就被锁死,不能再进行写操作,也没有机制解锁,所以某页一旦被锁,其内容再也不能修改,出厂初始值为0。
5 AT88RF020的常用命令与函数
5.1 AT88RF020的常用命令
(1)REQB/WUPB
该命令用于寻卡或者唤醒处于HALT状态的卡,这种卡只响应应用代码(API)为00或01的情况,如果接收到带有无效API代码的WUPB命令,那么卡仍然处于HALT状态。
(2)ATTRIB
该命令用于从所有响应REQB/WUPB的卡中选择一张卡,此后,卡进入ACTVE状态。
(3)Slot MARKER
该命令为读写器提供用于查询随机数大于1的卡。
(4)HALTB
此命令设置卡处于HALT状态,此后只能执行WUPB命令。
(5)READ
READ用于读取卡中的数据。读取页0,1,2可以不必验证密码,而第3页的数据不能读出,只能通过PASSWORD命令修改。其他的页验证密码后可以读出。
(6)WRITE
此命令用于对卡写入数据。
(7)LOCK
此命令只有在验证密码之后才能执行,用于锁定某一地址区域,被锁定的地址区域在验证密码后才可以进行读操作。
(8)CHECK PASSWORD
密码校验命令,在设备进入就绪状态后执行。
(9)DESELECT
如果对处于ACTIVE状态的卡执行该命令且通过,则卡发送正确的回答信息,并进入HALT状态。
(10)COUNT
该命令用于写第2页。COUNT命令中所带的数据写入第2页的前6个字节中,后2个字节由计数器使用,每执行1次COUNT命令,计数器的值就加1,计数器的值达到215时,不能再执行COUNT操作,且第2页被锁定,不能再修改。执行该命令之前要验证密码。AT88RF020的上电或重启动工作流程如图3所示。
5.2 AT88RF020的函数
下面以rf_attrib()函数为例说明AT88RF020的函数的用法。
(1)函数rf_attrib()的格式
Int rf_attrib (HANDLE icdev,unsigned long pupi,unsigned char param,unsigned clam eid,unsigned char brTx,unsigned char brRx);
(2)函数的功能
从已响应REQB/WUPB命令的卡中选取1张卡,同时给每张卡分配1个ID号。
(3)函数的参数描述
icdev:rf_init()返回的设备描述符
pupi:Pseudo-Unique PICC Identifier
param:设为O
cid:卡片ID号(O-15),这个值存储在卡片中供后面操作使用
brTx:由PCD(近耦合设备)到PICC(近耦合集成电路卡)的波特率。对于AT88RF020,0x00代表106Kbit/s
brRx:从PICC到PCD的波特率。对于AT88RF020,Ox00代表106Kbit/s
(4)返回值:=0:成功
<>0:失败
(5)例程:int st;
unsigned char Mode=0;
unsigned char_Data[15];
unsigned long pupi=0;
st=rf_requestb(icdev,Mode,0,0,_Data);
if(st==0)
{
memcpy(&pupi,&_Data[1],4);
st=rf_attrib(icdev,pupi,0,0,0);
}
经过选卡后,如果有多张卡进入激活状态,则可以根据CID(射频卡ID号)在同一时间内对多张卡操作。以2张卡为例: 说
6 在学校就餐管理系统中的应用
6.1 系统总体方案
采用美国ATMEL公司生产的AT88RF020型射频识别卡、IDIC(Identificatlon Integrated Circuit)、U2270B型读写基站集成电路和ATMEL公司的8位单片机研制开发学校食堂就餐管理系统,该系统具有预付收费、目标识别、身份验证、数据采集、数据加密和数据库管理的功能。系统由AT88RF020卡、就餐管理终端、数据库管理系统、就餐管理终端与数据库管理微机的通信系统4部分组成。主机与就餐管理终端之间的通信采用RS-485标准,工作方式为半双工,每次通信都是主机首先呼叫从机。系统结构原理如图4所示。
6.2 通信硬件接口设计
本系统中就餐管理终端与上位机的通信选用RS-485总线标准,并采用MAX465来实现,它具有RS-485通信接口需要的全部功能,数据通信的方向由RE,DE脚来控制,设计中二者连在一起,由单片机的P1.5控制,当它为高电平时,数据由就餐管理终端经MAX485到外部串行总线,即处于发送状态;当它为低电平时,数据由外部串行总线到就餐管理终端。一般微机的串行口采用RS-232接口,故在上位机一端需要一个RS-232/RS-485转换器。本设计中采用台湾ATEN公司生产的485SN型转换器,它是双向RS-232/RS-485或RS-422转换器,可提供点对点、点对多点(最多可达254个点)的全双工和半双工以及多点的单工串行通信。
6.3 通信软件接口设计
上位机数据库管理系统采用Visual FoxPro(即VF)编写,这里介绍的串行通信程序主要是在VF中实现与就餐管理终端的通信程序设计。本系统采用标准的通信控件communications进行通信程序的设计,实现挂失数据的发送、用户卡号的发送、发卡和就餐数据的接收。每次通信时,首先在上位机的init事件中初始化通信控件olecontroll,初始化设置为: