1引言
射频识别技术(RFID)是利用射频方式进行远距离通信以达到物品识别目的,可用来追踪和管理几乎所有物理对象。在工业自动化、商业自动化、交通运输控制管理、防伪等众多领域,甚至军事用途都具有广泛的应用前景,并且引起了广泛的关注。RFID 系统一般包括读写器和电子标签(或称应答器)2 个部分。RFID 电子标签(Tag)由芯片与天线(Antenna)组成,每个标签具有惟一的电子编码。标签附在物体上以标识目标对象。RFID 读写器(Reader)的主要任务是控制射频模块向标签发射读写信号,并接收标签的应答。对标签信息进行解码,并将信息传输到主机以供处理。根据应用的不同,阅读器可以是手持式或固定式。本文重点介绍的就是读写器的开发。
EPC 规范已经颁布第一代规范。规范把标签细分为 Class0,Class1,Class2 三种。其中 Class0 和 Class1 标签都是一次写入多次读取标签,Class0 标签只能由厂商写入信息,用户无法修改,因而又称为只读标签,主要用于供应链管理)Class1 则提供了更多的灵活性,信息可由用户写入一次。Class0 和 Class1 标签采用不同的空中接口标准进行通信,因此两类标签不能互操作。Class2 标签具备多次写入能力,并增加了部分存储空间用于存储用户的附加数据。Class2 标签允许加入安全与访问控制、感知网络和 AdHoc 网络等功能支持。目前 EPCglobal 正在制定第二代标签标准,即 UHFClasslGeneraTIon2(C1G2)。C1G2 具有随时更新标签内容的能力,保证标签始终保存最新信息。EPC 规范 l_0 版本包括 EPCTag 数据规范、Class0(900MHz)标签规范、C1ass1(13.56MHz)标签接口规范、Classl(860~930MHz)标签射频与逻辑通讯接口规范、物理标识语言(PhysicalMarkupLanguage,PML)。
本文重点介绍 EPCClass1 读写器系统设计、数字部分设计及 FPGA 在数字实现上的应用。由于 U 频段 RFID 技术的应用还处在早期的发展阶段,符合 EPCClass1 协议的读写器在国内还没有相关产品面世。本文对相关开发有一定的参考价值。
2EPCClasslb 系统设计
一个完整的 RFID 系统包括:读写器、天线、标签和 PC 机。读写器完成对标签(Tag)的读写操作。通过 RS232 或 RS485 总线完成 PC 机的命令接收和 EPC 卡号的上传。图 l 是读写器的系统组成框图。读写器组成包括与 PC 机的串口通信部分、单片机和 FPGA 组成的数字部分、射频部分。RF 单元实现和标签的通信,数字部分完成对射频部分的控制、回波命令解析 PC 机接收卡号实现上位机的控制。下面对各模块做简单介绍。
2.1PC 端
RFID 系统一般要将标签信息读取到计算机上,然后等待处理用户通过 PC 机可以实现读写器控制,完成对标签的读写操作。读写器与 PC 机通信是基于 RS232 总线,纠错算法是 CRC—CCITT 算法。
2.2 射频模块
读写器对标签的读写是通过发送射频能量和对回波实现的。射频模一方面将数字模块送来的信息完成调制并发送。标签应答,射频模块接收回波信号将他解调成基带信号,送到数字模块。
2.3 数字模块
数字模块由单片机(cygnalC8O51F126)、存储器(24Cz56),FPGA(xlSlOO)组成单片机的功能有:
(1)实现与 PC 机通信,接收 PC 机命令,完成解析下传到 FPGA
(2)将 FPGA 送来的 EPC 卡号加算 CRC—CCITT 校验上传 PC 机。择 Xilinx 公司 ISE6.2,仿真软件为 Modelsim5.7。设计实现采取原理图和 VHDL 语言相结合的原则。顶层模块采用原理图设计,功能模块采用 VHDL 语言实现。
(3)解决多卡碰撞,实现多卡读取。由于 FPGA 实现多卡读取算法非常消耗 FPGA 资源,而且需要 FPGA 有大量的存储器资源存放读到的卡号,成本较高。而如果由 PC 机实现多卡读取算法,则读取速度很难提高。
(4)实现对射频模块的锁相环频率控制以及功率控制读写器发射功率常需要调整,而且读写器有时需要在不同射频频率,甚至跳频下工作。单片机通过对射频模块的锁相环控制实现对射频频率和功率的控制。
单片机采用 CYGNAL 公司的 C8051F126。内部有 128k 的 FLASH 存储器和 8k 的 RAM,可以在 5OMHz 主频下工作。
FPGA 实现 EPCClassl 通信协议,接收单片机控制命令,将命令按照协议标准编码送到射频模块调制并发送,然后解调并接收射频模块送来的回波基带信号,将得到的标签信息发送给单片机。FPGA 实现的 EPCClassl 命令的基本命令包括 scrollid,scrollallid,pinged,quiet,talk,kill;编程命令 programid,verifyid,lockid,eraseid 这些命令包括命令的发送和回波的解析。根据发送命令不同,对应的发送命令格式也不相同,分为 2 类。回波信号格式也根据命令的不同分为 2 类。下面介绍 FPGA 实现的 EPCClass1 协议。
3FPGA 实现的信号调制解调
3.1FPGA 器件及开发平台
FPGA 选择 Xilinx 公司的 SP
ARTIIXC2S100 规模为 1O 万门,系统时钟选择 40MHz,满足要求。开发软件选择 Xilinx 公司 ISE6.2,仿真软件为 Modelsim5.7。设计实现采取原理图和 VHDL 语言相结合的原则。顶层模块采用原理图设计,功能模块采用 VHDL 语言实现
3.2 结构框图
从系统的结构图可以看出 FPGA 实现的调制解调部分包括:单片机接口(单片机的命令接收模块、向单片机发送数据模块)、复位信号产生模块、命令调制模块、命令接收模块。
单片机向 FPGA 发送数据采用对地址操作方式,单片机对 FPGA 读取数据采用查询方式。FPGA 整个工作过程:FPGA 接收单片机控制命令,接收单片机命令模块将所收到的命令赋值给相应寄存器,同时复位信号产生模块根据单片机发送的命令产生复位信号(单片机写 FPGA 过程即为复位)。命令调制模块根据单片机送来的命令以及相应控制字,输出相应的调制信号(bit—sent)输出到射频模块。接收模块始终在检测回波数据,当检测到回波数据的帧头有效时通知读命令数据接收模块接收数据。同时将接收到的数据送 CRC 校验模块校验,数据接收完成,CRC 校验也即完成,CRC 校验模块校验成功即产生 CRCOK=l 表示读卡号成功,单片机查询到此位为高时通过 MCU 接口模块读卡号和 CRC。在 Ping 命令时,Ping 命令接收模块判断命令发送模块此时发送的命令类型。如果为 Ping 命令时,则接收数据,将接收的各槽数据及状态信息放在 BINDATA 寄存器中。
3.3 关键功能模块
(1)命令调制模块
命令调制模块发送的命令必须符合 EPC 规范对信息编码要求以及命令格式要求。信息编码占空比为 1/8 时钟表示“0”,占空比为 3/8 时钟表示“l”。命令格式要求如图 3 所示,根据 EPC 规范,可以将命令格式分为 3 种,分别为 ping 命令格式、写卡(program)命令格式、读卡(scrolled)命令格式,具体命令格式参照文献。命令调制模块实现 3 种命令格式的调制。命令调制模块设计采
(2)Ping 命令接收模块
回波编码和发送编码方式不同,Ping 命令和 scrollid 命令回波编码用“1010”表示 l,用“l100”表示 0。接收数据模块必须将回波调制信号解调成~0,1 信号。Ping 命令是基本多卡操作命令。如图 3 所示,Ping 命令的标签应答是在 8 个槽(bin)中应答,对应着不同的 8 组标签。这样一次 Ping 命令可以判断 8 组标签。提高了多卡效率.每一个槽(bin)信息用 2 个寄存器表示,BIN0(1:O)表示卡的状态信息:有卡、无卡、多卡。BIN(7:O)表示槽的数据。单片机根据槽状态信息决定是否读取槽数据.
(3)scollid 命令数据接收模块
scrollid 以及 scrollallid,verifyid 命令的回波格式相同,接收方式相同.回波格式如图 4 所示
一帧完整回波包括帧头(F7H),16 位 CRC,96 位或 64 位 EPCDATA。接收模块采用检测帧头的方式,通过一个 32 位移位寄存器(1b 数据由 4 个状态信息表示)检测帧头,帧头有效则读数据模块解调回波数据,解调数据存储在 EPCDATA 寄存器中。同时将检测到的 bits 送到 CRC 校验。
(4)CRC 校验模块
CRC 模块对数据接收模块检测到的数据按照 CRC—CCITT 算法校验,校验通过则产生 CRCOK=”1”。单片机根据此状态读取 EPCDATA。CRC—CCITT 算法实现采用串行方式。程序非常简单,而且节省 FPGA 资源。
节选代码如下:
xOr_flag_en:process(elk)begin
ifelk==‘0’andelkeventthen
ifen==’l’then
ifcrc_bur(15)==‘1’then
crcbur《=(crcbur(14downtoO)&data_in)
xor”OOO1OOOOOO1OOOO1”:
xor_flag《=‘l’
elseerc_buf《=crc_buf(14downtoO)&data_in:
xor_flag《=‘0’;
endif;
elsecrc_buf《=”111ll111111llll1”;
endif;
endif;
endprOcess
4 结语
FPGA 实现了对 EPCClassl96 位和 64 位卡的读写操作命令,读写成功率非常高,能实现 8m 距离的正常读,多卡读取速度快。读写器和标签的读写速率为上行 70kb/s,下行 140kb/s。此读写器也已经在批量生产,投放市场。
在读写器设计过程中仍有几方面问题需要进一步改善。一是 Ping 命令回波没有 CRC 校验,所以 Ping 命令的回波检测成功率不够高,影响多卡速度;另一方面,当回波信号信噪比不高时,接收成功率下降速度很快。同时,在读写器设计过程中发现 EPC 标签的一些问题。其中突出的是,调试发现 96 位标签在应答时存在累积周期差,不能和读写器的时钟同步。标签锁相环不够准确,给读写器的设计带来不小难度.