首页 理论教育多标签防碰撞:最优解决方案

多标签防碰撞:最优解决方案

【摘要】:多标签同时应答时产生的标签数据混叠问题就是我们通常所说的碰撞。为了防止由于多个电子标签的数据在读写器的接收机中相互碰撞而不能准确识读的情况出现,必须采用有效的防碰撞算法来加以克服。这表明系统防碰撞算法一次性最大读取标签数由LIFO栈的设计大小决定。

在RFID系统中,通常会遇到在读写器范围内存在多个电子标签的情况。多标签同时应答时产生的标签数据混叠问题就是我们通常所说的碰撞。即当在读写器的作用范围内有多个标签的时候,如果它们同时发送信号,这些信号就会相互干扰而产生信道争夺的情况,处理不当就会妨碍读写器对标签信号的处理,进而影响整个系统的正常运转。为了防止由于多个电子标签的数据在读写器的接收机中相互碰撞而不能准确识读的情况出现,必须采用有效的防碰撞算法来加以克服。

目前,关于防碰撞算法的原理及分类,有很多文献可以参考,其中关于RFID系统的防碰撞算法,国内外已有很多学者进行相关研究,发表了很多算法原理及其实现过程。如ALOHA防碰撞算法和符合ISO 14443-3TYPE A标准的二进制树形搜索算法等。本书根据二进制树形搜索防碰撞算法,利用FPGA进行仿真,并给出一个参考示例。

1.二进制树形搜索防碰撞算法

这里的二进制树形搜索防碰撞算法的标签采用Manchester编码方式进行仿真,依据这种编码方式,可以按位判断,这使得准确地判断出碰撞位成为可能。当读写器接收到发送的标签信号时,首先判断是否发生碰撞及发生碰撞的具体位置,然后根据碰撞的具体位置确定下一次发送的请求命令中的参数,再次发送,直到确定其中的一张标签为止。这就是二进制树形算法的基本原理。

2.碰撞算法的FPGA仿真实现

很多防碰撞算法是通过软件实现的,容易造成应用软件非常复杂而且多标签应用时速度很慢。这里采用软硬件结合方式,用FPGA实现防碰撞算法,可实现速度快、成本低的要求。

(1)碰撞算法仿真的总体设计方案

这里将标签抽象为一个Manchester编码器模块,RFID读写器内部包含着3个基本的功能模块:Manchester解码器模块、LIFO模块和控制整个算法的状态机模块。其基本模块连接关系如图13-6所示。

图13-6 RFID防碰撞算法基本功能模块连接示意图

具体工作流程描述如下:

1)RFID读写器内部的状态机每隔一段时间发送一次call命令;

2)读写器覆盖范围内的标签收到call命令后判断是否满足call命令的条件,若满足则发送ID码给读写器,如果不满足条件则不作反应;

3)读写器收到标签发来的数据进行Manchester解码。如果无碰撞发生则存储数据后强制该标签进入睡眠状态;如果产生碰撞,则根据解出的数据和碰撞位标志进行下一次call命令。如此循环执行直到读写器范围内的所有标签被识别出来。

在设计中,采用Verilog HDL语言作为设计输入,仿真工具采用Quar-tus II 5.1 build 21603/06/2006 SJ Full Version;FPGA器 件 为EP2C5T144C6。

(2)Manchester编码器设计及仿真

RFID标签可以模型化为一个Manchester编码器,它的主要数据输入包括RFID标签的数据,call或sleep命令标志及相应的ID参数和m参数。当接收到RFID读写器也就是算法控制状态机的控制信号后作出相应的判断,如果满足call命令的条件则开始对标签数据进行Manchester编码,编码完成后将编码后数据发送给Manchester解码器,Manchester解码器接收到数据后开始进行解码工作。如果满足sleep命令的条件,标签则进入睡眠状态,对以后的call命令不作应答。

(3)Manchester解码器设计及仿真

Manchester解码及碰撞位判断是整个算法的关键。解码和碰撞位的判断均由Manchester解码器模块完成。

首先,Manchester解码器模块中定义了一个两位的移位寄存器,用来检测标签发送的Manchester码的同步头,以便判断出编码的到来。一旦移位寄存器检测到标签发送过来的信号的同步头,Manchester解码器开始解码工作。采样信号的产生可以利用循环计数的计数器来实现。该计数器在高频时钟的边沿到来时自动加1,其循环周期与Manchester编码时钟周期相等。在与Manchester编码位1/4,3/4处对应的计数器数值时令采样信号为高电平即可。当解码完成后解码器将向控制状态机发送一个data_ready脉冲信号,表明已经解码完毕,可以向状态机传送数据。

(4)存储节点的LIFO栈设计及仿真

LIFO(Last In First Out)栈用来存储算法执行过程中所经过的节点的信息。为了协调LIFO内部的工作状态,在LIFO栈的模块中定义了一个小型的状态机。

对LIFO栈穿插写入和读取数据,以验证LIFO模块功能。第一次写入两个数据10100011,11100010,进行一次读取操作;然后连续写入两个数据10101010,01011011,再连续进行四次读取操作。其仿真结果如图13-7所示。

图13-7 LIFO栈读写功能仿真结果

由图13-7可看出,第一次写入两数据后,LIFO栈的栈内数据为10100011,11100010,栈顶数据为11100010,进行一次读操作,栈顶数据变为10100011;第二次连续写入两数据10101010,01011011后,栈顶数据变为01011011,连续进行三次读取操作后,根据empty标志信号可以看出此时LIFO已经为空,所以在第四次读取时并没有读出数据。

3.综合仿真

将Manchester编码模块、Manchester解码模块、LIFO模块和算法控制状态机模块连接起来进行算法的综合仿真。

测试中设定读写器作用范围内共有4个RFID标签,标签的ID号为8位二进制码,分别为:ID1=10100011,ID2=10011011,ID3=00010001,ID4=11101100。其仿真结果如图13-8所示。

图13-8 综合时序仿真测试结果

仿真结果分析:

(1)一次性最大读取标签数

通过LIFO栈的仿真和分析可获得如下结论:如果LIFO的大小为N个单元,算法一次最多可以处理的标签数目即为N+1。这表明系统防碰撞算法一次性最大读取标签数由LIFO栈的设计大小决定。不同的FPGA器件可用的存储器空间大小不同,使得基于其上设计的算法的该项性能指标也不同。目前的FPGA器件大都内置了较大的存储器,例如Altera公司的低成本Cyclone II系列产品,最大提供1.1Mbits的存储容量。可以估算,存储器的1/4用于存储节点信息的参数,1/4用于存储节点信息的碰撞位标志,1/4用来存储解出的标签数据,1/4作为系统保留。由于标签数据信息长度为64bits,用Cyclone II系列FPGA器件实现算法,设一次性可读取标签的最大数目为Nmax,可以计算出

(2)算法识别速度

ISO 14443定义了TYPE A、TYPE B两种类型协议,其通信速率均为106kbit/s。以此标准来计算算法的识别速度。

算法执行过程中以call命令和sleep命令为单元,每次命令的执行都要发送64bits参数,8bits的m参数,接受标签返回的64bits数据。共传送136bits的数据。另外call命令中读写器与标签对数据的处理也要占用一定的时间。可以等价为传送小于8bits的数据。这样每次命令的执行共有144bits的数据传送。所以,每秒钟可执行call命令次数n为:

由算法可知,当区域内存在的标签数为L时,则全部被识别出所执行的call命令的次数约为2L,因此本文中实现的跳跃式二进制树形防碰撞算法的最大识别速度约为376个标签/s。