基于FPGA的RFID读写器设计
0 引言
射频识别技术(RFID)是一种非接触的自动识别技术,通过无线射频的方式进行非接触双向数据通信,对目标加以识别并获取相关数据,可用来追踪和管理几乎所有物理对象。与条形码识别技术、光学符号识别技术、生物识别技术、IC卡识别技术等自动识别技术相比,RFID以它特有的无接触、抗干扰能力强、可同时识别多个物体等优点而逐渐成为自动识别中最优秀和应用最广泛的技术之一。在工业自动化、商业自动化、交通运输控制管理、防伪等众多领域,甚至军事用途都具有广泛的应用前景。RFID系统一般包括应用系统(PC主机)、读写器和电子标签三个部分。RFID电子标签(Tag)由微芯片与天线组成,每个标签具有唯一的电子编码。标签附在物体上以标识目标对象。读写器(Reader)控制射频模块向标签发射读写信号,接收标签的应答,并将信息传输到主机以供处理。用户可以通过相关控制主机或者本地终端发布命令以改变或者定制其工作模式以适应具体应用的需求。本文重点介绍读写器的开发。
1 读写器硬件结构设计
其设计以现场可编程门阵列(FPGA)作为处理器,MF RC500收发芯片作为射频模块,通过RS232串行通信模块和电平转换接口MAX232与上位机相连。系统硬件原理见图1。
1.1 射频模块
读写器对标签的读写是通过发送射频能量和对回波的接收实现的。射频模块一方面将数字模块送来的信息完成调制放大并发送,另一方面接收回波信号将其解调成基带信号,送到数字模块。读写器的RF前端子系统主要负责对电子标签数据的读取与写入。核心芯片MF RC500由飞利浦公司生产,主要应用于13.56MHz射频信号的产生、调制、解调等功能。它支持ISO14443A所有的层,适用于各种基于ISO/IEC 14443A标准并且要求低成本、小尺寸、高性能以及单电源的非接触式通信的应用场合。MF RC500负责与电子标签的射频通信,通过并行数字接口直接连接到处理器。内部的发送器部分不需要增加有源电路就能直接驱动近距离操作的天线(可达10cm)。接收器部分提供一个坚固而有效的解调电路,用于ISOl4443A兼容的应答器信号。
射频接口MF RC500芯片上带有A0、A1、A2三根地址线,用于对内部寄存器的寻址,同时DO~D7八根数据线支持地址线、数据线复用。在本设计中不采用数据线、地址线复用的接法,采用独立的数据线、地址线的接法。芯片内有64个寄存器,由处理器向芯片相应的寄存器位配置数据;由处理器读取寄存器的相应状态标志来监控芯片当前所处的状态,从而决定下一步的操作。由于片内的64个寄存器寻址需要6根地址线,当采用独立的地址线时,由于地址线只有3根,支持不了64个寄存器的寻址,为此芯片采用了分页机制。64个寄存器被分成8页,每页8个,3根地址线恰好可以实现对每一页内的8个寄存器寻址,而对于寄存器页的选择,需要配置Page寄存器的0、l、2位。Page寄存器的第7位用来选择是否采用独立的地址线,芯片复位后,Page寄存器的默认值为80H,即默认采用独立的地址线寻址方式,Page寄存器的0、l、2位仅当第7位为1时才有效。芯片上的双向数据线DO~D7同处理器的I/O口直接相连,用来实现芯片间数据的双向并行传输。
1.2 天线
天线在整个系统中起着重要的作用,在非接触式卡与读写器之间的能量与数据传递要通过天线线圈产生的磁通量实现。可以选择2种不同的天线连接到读卡器上:50 Ω匹配的天线或者直接匹配的天线。本方案中采用的是YW-300天线,工作距离可以达到10cm。
1.3 数字模块
数字模块由处理器、存储器组成。处理器的功能有:实现与PC机通信,接收PC机命令并完成解析;将送来的EPC卡号加算CRC校验上传PC机;解决多卡碰撞,实现多卡读取;实现对射频模块的锁相环频率控制以及功率控制。
FPGA的工作过程:上电复位后,接收上位机初始化配置命令和数据,进行相应配置;若有命令传送过来,则通过接口模块接收上位机传送过来的命令;命令接收完后,进入指令分析状态,对接收到的命令进行分析判断。
在主控状态机的控制下,发送模块将把命令和内容组成数据块,进行基带编码、循环冗余校验生成,并打包成符合协议规定的数据帧,传送给射频收发模块,由其完成对信号的调制、放大、发射。电子标签根据接收的数据帧,进行指令分析,根据指令执行相应的功能。接收模块检测回波数据,当检测到回波数据的帧头有效时接收数据。同时将接收到的数据送CRC校验模块校验,校验成功即产生CRC K=‘1’表示读卡成功。
1.3.1 发送编码模块
在ISO/IECl4443 Type A协议中,读写器到标签的通信采用改进的Miller编码方式,其标准中定义了三种序列:(A)经64个时钟后应有一个凹槽;(B)1个位内(128个时钟)没有调制;(c)1个位起始时有一个凹槽。这三种序列用于进一步编码。逻辑1用序列(A)表示。逻辑0通常用序列(B)表示,但在a.有两个或两个以上连续的0时,从第二个0开始要用序列(c)来表示所有相连的0;b.直接与起始帧相连的所有0用序列(c)表示。通信开始用序列(c)表示。通信结束用逻辑0跟序列(B)表示。无信息用至少两个序列(B)表示。如图2所示改进的Miller编码波形。
从波形中可以看出,若输入1,则64个时钟后输出一个脉冲,若输入0,则128个时钟内没有脉冲输出,而当有两个连续的0输入时,则在第二个0起始处输出一个脉冲。通过对照理论波形,可以看出编码完全正确,符合设计要求。
1.3.2 接收解码模块
在射频收发模块中进行解调处理而得到的基带信号将被送入FPGA进行Manchester解码、CRC校验,并在主控状态机的控制下通过RS232将数据传送给上位机。在ISO/IECl4443 Type A协议中,电子标签到读写器的通信采用Manchester编码方式,其编码规则是:某比特位的值由该比特长度内半个比特周期时电平的变化来表示,负跳变表示‘1’,正跳变表示‘0’。Manchester解码即对Manchester编码信号位的1/4和3/4处采样,若采样结果为(1,0),则解码数据为1;若采样结果为(0,1),则解码数据为0。如图3所示Manchester解码波形。输入数据l00100l1,解码所得数据为147,用二进制表示也即100100ll,可见解码完全正确,符合设计要求。
2 系统软件设计
2.1 主程序
读写器上电复位后,对各功能模块进行初始化,然后发出询卡/应答指令寻找有效范围内的电子标签。电子标签在读写器的阅读范围外为无电状态,不能进行任何操作。当进入读写器的载波有效范围内时,电子标签上电复位,进入等待接收询卡/应答指令的状态。收到询卡指令后,电子标签会发出自己独有的ID码,读写器根据收到的IDR码发出选卡指令,选择该标签进行下一步的通信。
在应用中可能会遇到多个电子标签同时在读写器的有效工作范围内的情况,这些标签就会在收到询卡指令后,同时发出自己的ID码时发生互相冲突,因此就要求系统能够具有防冲突的机制,才能从多个标签中选择出其中一个。主程序流程见图4。
2.2 防碰撞算法
A型射频卡采用了ISO/IECl4443系列协议,配合读写器共同实现防碰撞的快速交互通信。为了从多张电子标签中快速识别出一张来单独进行通信,A型卡采用了位碰撞监测协议实现防碰撞过程,即阅读器对卡返回的唯一识别号(即UID)数据帧中的每一位进行冲突监测。当多张A型射频卡在同一时刻向读写器传送UID数据帧时,一定会在同时返回的某一位上有不同的位值。根据Manchester编码规则,这一位正负边沿抵消了,故读写器无法识别的该数据位即为碰撞位。碰撞位监测到后马上启动防碰撞过程。读写器主动地发出一系列命令数据帧,主要是ANTICOLLISION命令和SELECT命令。射频卡被动地响应每一条指令完成交互的会话过程。
3 结束语
本设计在Modelsim SE6.1和Altera Quartus II 7.2中进行了功能仿真和综合,结果表明能够满足设计的需求。