使用FPGA实现读写器的编解码设计UHF RFID读写器模块的说明

uhf rfid读写器具有读写距离远、读写速度快等优点,已成功运用于供应链管理、航空管理和后勤管理等诸多领域。本设计依据的协议是epc c1g2(epcclassl generation2)。
本文介绍了一种读写器的编解码部分由fpga来完成的设计方案,由fpga负责前向链路的pie编码和后向链路的fm0/miller解码,且解码模块可对标签突发传来的数据立即检测并实施解码,实现了较快的解码速率。fpga选用的是altera公司的ep1c3t100c6芯片。
1、rfid系统介绍
图1所示为rfid系统,主要由pc机、读写器、天线和电子标签组成。读写器与电子标签之间的数据通过天线进行传递。读写器作为rfid系统的一部分,既能与标签通信,又能向pc机传输数据并执行上位机所要求的操作,具有发送、接收和处理数据的能力。读写器系统按其所处理信号的不同,主要由2个部分组成,即处理数字信号的基带部分和处理模拟信号的射频部分。
图1 rfid系统
2、epc c1g2协议的相关介绍
epc c1g2标准具有如下特点:速度快,速率可达40~640 kbps;可以同时读取标签的数量多,理论上能读到1000多个标签;可在密集的读写器环境下工作,能迅速使用变化无常的标签群;存储区域多,可延伸使用用户的内存需求;功能强,具有多种写保护方式,安全性强;通用性强,符合epc规则;产品价格低,兼容性好。
2.1 pie编码介绍
epc c1g2协议规定发送链路(即读写器向标签发送数据)采用的编码方式是脉冲间隔编码(即pie编码)。读写器每次给标签发送命令,都以帧同步码或前同步码开始所有的通信。帧同步码格式如图2所示,帧同步码由delimiter、数据0和rtcal三部分组成。前同步码格式如图3所示,前同步码由delimiter、数据0、rtcal和trcal四部分组成,除delimiter外,各部分均以低脉冲pw结尾,且各部分pw的长度必须相同。de limiter的长度固定为12.5μs,协议规定允许有±5%的误差。delimiter用于给电子标签校准时钟。
图2 pie编码的0和1
图3 pie前同步码
前同步码只用于表明盘存周期开始的query命令中,其他命令则以帧同步码开始。当query命令数据中的dr=1、前同步码中的trcal长度为33.3μs时,可设定反向链路(即标签向读写器发送数据)频率最高为640khz。
2.2 fm0和miller码介绍
query命令中m参数值决定了标签返回数据的编码方式,即fm0、miller2、miller4、miller8四种。fm0码在每个数据边界处和数据0中间反相。miller码则是在两个连续的数据0的边界处和数据1的中间反相。miller编码序列每位可包含2、4、8个副载波周期,即miller2、mille r4、miller8三种编码形式。这四种编码方式都以各自特定的帧头开始,而具体选择哪种帧头,则由query命令中trext参数值决定,并且在结尾处都有一位“dummyl”作为数据传送的结束标志。
2.3读写器与标签通信流程
epc c1g2协议规定读写器的命令分为选择、盘存、访问3类,而标签的工作状态分为就绪、仲裁、应答、确认、开放、保护、杀死7个状态,读写器命令类型和标签状态如图4所示。读写器依赖3类命令通过改变标签所处的状态,实现对标签群的筛选,以及对单个标签的识别和访问过程。读写器与标签的通信过程略一编者注。
图4 读写器命令类型和标签状态
3、总体设计
在本读写器设计中,arm与fpga协同工作。arm芯片是lpc2148,工作时钟是20 mhz,主要完成对读写器系统的控制。而fpga则负责编解码部分的数据流处理,工作时钟频率是25 mhz。图5是fpga部分的整体设计框图。
图5 整体设计框图
fpga中的模块主要包括协议控制及命令产生模块、pie编码模块、fm0/miller解码模块,以及用于与pc机交互的串口控制模块。
工作过程如下:对读写器命令数据及其相应的crc5/16校验位进行pie编码,编码完成送到射频发射端,数字信号通过控制射频芯片rf2 173的开关引脚实现调制深度为100%的ook(on-off keying)调制,并经由收发分离的定向耦合器,通过天线发射出去。
场内标签接收到读写器发送的信息后,在允许其通信的情况下,会根据读写器发送来的命令参数,选择4种编码方式中的一种,将要回复读写器的数据进行编码,经调制之后在空间传输。
读写器天线接收到标签信息后,经由定向耦合器将标签信息送到读写器的射频接收模块,该模块对标签信息进行解调,并将解调后得到的数字信号送给fpga的fm0/miller解码模块。解码模块根据数据的编码方式选择相应的电路解码,解码后的数据返回给协议控制及命令产生模块。该模块根据上次发送的命令以及接收到的标签信息作出判断,产生下一次的操作命令数据,发给pie编码模块,与该标签进行进一步的信息交互或选择重新读取另外的标签。
同时,为了准确获取标签信息,必须将读写器与pc机相连。读写器通过由fpga实现的串口模块与pc机相连,对读取到的标签信息做必要的显示,如标签返回的rn16、epc、uii等。
4、fpga实现电路
为了实现fpga部分的功能,在altera公司的ep1c3t100c6芯片上,利用quartus ii软件进行设计,pie编码模块设计如图6所示。
图6 pie编码模块设计框图
4.1编码模块设计
pie编码由pie_encode模块实现。该模块接收命令产生模块并行发来的8位数据,按照协议规定及设置,先给命令数据添加特定的帧头,并根据数据传输速率,对命令数据及其crc5/16校验位进行pie编码,编码完成后输出给射频发射模块调制,然后通过天线发送出去。其设计框图如图6所示。
pie编码模块由编码状态机作为控制模块。状态机的状态由命令帧头和数据0和1组成,即idle、delimiter、tari、rtcal、trcal、data_ sendl、data_send0 7个状态,其中idle是空闲状态,接收到开始信号后跳转到其他状态。状态机的流程按照命令的组成依次进行,每个状态按照协议要求保持特定的时间,直至命令编码完成。由于query命令和其他命令的帧头不同,query_cmd_flag_in信号用于指示此次发送来的数据是否为query命令数据,如果是,则在编码时加入trcal命令段;否则,跳过trcal状态。
在接收部分数据开始发送指示信号rx_cmd_start与要发送的数据rx_cmd、rx_cmd_num保持同步,编码模块中的命令数据计数器和命令数据移位寄存器根据rx_cmd_start信号将8位数据并行送入各自的寄存器。
接收完成后,数据寄存器会根据计数器中的值进行相应的移位,将无效数据移出,保证有效数据是从命令寄存器中的最高位开始。同时,每完成一位数据的编码,计数器自减1,移位寄存器也自动左移一位,将下一个要编码的数据放入待编码数据寄存器中,该寄存器由此去控制状态机的下一个流程。
发送部分主要由一个命令长度计数器组成,该计数器根据命令参数的设置以及所处的状态进行计数,控制状态机在某个状态保持的时间当一位数据编码完成,计数器清0,并开始对下一位数据计数,同时状态机也跳转到下一个状态,而编码数据则根据状态机的状态以及计数器的值拉高或拉低,并由锁存器将编码后的命令锁存输出。这样就实现了边编码边调制的目的,提升了命令发送的速率,也节省了硬件资源。
4.2解码模块设计
解码部分由data_pre_process、fm_and_miller_decode、data_post_decode 3个模块组成。data_pre_process是解码数据预处理模块,接收射频模块解调后的数据。因为射频发射和接收使用的是同一根天线,发射的数据信息以及其他杂波信号经常会泄露进解码模块。该模块主要是去除信号中的毛刺,并对接收数据的高低电平长度进行判断,看是否符合编码规则,如果均在合适的范围内,则视为成功。同时产生待解码数据的采样信号,以及其他指示信号,以便解码模块的数据处理;若不符合要求则丢弃这部分数据,重新检查分析新来的数据信息。
data_post_process是解码数据确认及串并转换模块。解调后的数据经过了解码预处理模块的初步判断,只是符合了一定的编码规则,在解码过程中还可能会出现诸如帧头出错、结尾数据不为1等其他错误。该模块通过判断解码模块的error和data_success信号,确认此次解码是否成功,若成功,将接收解码数据,同时考虑到串行数据传输速度较慢,本模块会对解码数据进行串并转换,然后8位并行地将解码后的数据传输给其他模块。
fm_and_miller_decode是解码模块。其组成框图如图7所示。
图7 miller2 解码结构图
该解码模块主要由解码状态机控制。状态机的状态由初始态、数据解码态,以及最后的解码成功和解码失败状态组成。接收到解码开始信号时,状态机由初始态跳转到数据解码态开始解码,在解码过程中,如果发现输入的数据违背了编码规则或不符合命令的设置,则直接跳入失败状态。在该状态下,会有一个解码失败信号error产生并输出。如果解码顺利进行到结束,则跳转到解码成功状态,会有一个解码成功信号data_success产生并输出,控制下一个模块的工作。这样解码状态机一边接收待解码数据,进行解码处理,一边将前面处理完的数据输出给crc5/16校验模块,实现了类似于流水线的工作,节省了解码时间。
解码模块接收部分通过采样信号接收待解码数据,这样便只需检测采样信号,节省了计数器的消耗。采样到的数据首先进行帧头检测,判断使用的帧头类型及编码形式,若帧头检测正确,则实施去帧头处理,将有效数据通过控制状态机流程来进行解码。而其他控制信号,即来自解码预处理模块的数据开始传输指示data_start,数据传输结束指示data_end,数据传输错误指示data_error则直接控制状态机状态的转换。
解码完成之后,根据前面发送命令的类型,对解码后的数据进行crc5/16校验,若校验正确,则去掉校验位,将有效数据输出;若错误,则返回给状态机,发出解码错误指示。同时,根据状态机所处的特定状态,在每一个解码数据期间会输出持续一个周期的数据采样信号sclk,以及在数据开始解码时便与解码数据同步输出的信号data_out_flag,以便后续模块进行数据的采样与控制。
5、软件仿真与硬件测试
以上各模块均使用硬件描述语言实现。在quartus ii9.0中全部编译通过,满足时序要求,编译报告显示本设计共消耗了679个le资源。调用modelsim软件仿真验证。使用了quartus ii软件的signaltap逻辑分析仪,捕捉了读写器实际工作时fpga的编解码数据。
图8是读写器先后发送不同命令并与标签交互的部分流程。图9是读写器发送的query命令的pie编码,所发送的命令数据是1000_00110000 0000010101,其中前4位1000为query命令的命令码,后面18位则为命令数据。
图8 命令发送流程及标签信息的返回
图9 命令的pie编码
图10是读写器接收到标签返回的miller2编码信息后的操作。为了便于观察,将解码后的数据也作为一路信号显示,即decode_data。最后一路信号是串口要发送的数据。图10中的enc_cmd_data_out信号是读写器接收到标签返回来的信息后,发出的ack命令,发送的命令数据为01_0001111010100111,其中前两位01为ack命令的命令码,后面的16位数据按照协议要求为标签返回的rn16。
图10 命令的miller2解码
图11 signaltap的采样信号
图11是在读写器工作时利用signaltap逻辑分析仪捕获到的解码后的标签数据及采样信号。
结语
本文介绍了在epcc1g2协议下,利用fpga快速处理大量数据流的优势,实现uhf rfid读写器中编解码模块的设计方案,解决了读写器读取标签速率难以提升的问题。经过软件仿真与实际硬件测试,读写器工作良好,速度、性能均得到显著提升。

工业物联网解决方案:旅游景区环境在线监测系统
[图文]专用于微功率发射机场强仪
工信部公布了2020年第26批共16家CDN牌照企业名单
中国首条8.5代TFT-LCD玻璃基板生产线项目启动
谷歌手机将支持后置触摸屏,魅族Pro7:我先走一步了!
使用FPGA实现读写器的编解码设计UHF RFID读写器模块的说明
基于精密积分器的传感器电路设计
通用MCU业绩大增 国民技术为世强先进颁发2021最佳业绩成长奖
非易失电导态对神经网络计算硬件系统的构建
三峡新能源锡铁山流沙坪二期100MW风电场配套储能项目顺利并网
控制变压器和隔离变压器的区别
比特币区块链上隐藏着许多值得纪念的信息
DIY创意无限:为谷歌Nexus 7平板添加无线充电功能
喜讯!杰发科技、杰开科技双双荣膺国家级专精特新“小巨人”企业
PLC远程维护解决方案
未来金属3D打印材料将迎来爆发期,中国金属3D打印材料市场前景广阔
Semtech与合作伙伴携手亮相欧洲光通信会议(ECOC) 2023展
华为5G端到端产品助力5G商用部署
TDA8601各引脚功能及电压
PLC一键启停编程梯形图实例