CPLD在射频卡读写器中的应用
扫描二维码
随时随地手机看文章
1 系统工作原理和CPLD特性
射频卡读写系统又称射频识别系统(Radio Frequency Identification),它是利用无线方式进行非接触式双向数据通信,进而达到识别目标并交换信息的目的。射频识别技术发展迅速,在门禁、交通这、防盗、金融、身份证管理、工业自动化等方面有着广泛的应用前景。按照相关标准,非接触IC卡可以分为3种:(1)密耦合卡(ISO10536),作用距离0~1cm。(2)近耦合卡(ISO 14443),作用距离0~10cm。(3)疏耦合卡(ISO 15693),作用距离0~150cm[1]。
基于ISO 15693协议标准设计的射频卡读写器是目前中低频段工作距离最远(达1.5米)的射频识别装置。射频卡由半导体厂商提供,目前国内外均有符合该标准的商用化射频卡。
在实际应用中,密耦合卡和近耦合卡距离射频卡读写器作用距离特别小,一般每次只要求响应一张卡(如公交售票系统)。而疏耦合卡往往应用在对多卡同时进行响应的场合(如多个持卡行李同时经过门检),读写器与多卡同时进行数据交换可以通过软件设计加入“防碰撞机制”实现。但是由于读写器在响应某张卡时的数据交换时间被限制在200μs~300μs内,选用普通单片机无法达到这一要求,因此在设计中选用了高速CPLD器件来实现编码、解码以及差错控制功能。一方面在响应时间上满足了实际应用的需要;另一方面简化了软件设计。
2 功能模块实现
2.1 编码器与译码器
单片机启动编码后,编码模块向单片机发中断(INT0)获取待编码的指令数据,同时将指令数据送入并行CRC模块。当指令数据完成编码后,控制电路将2字节 CRC值紧接在数据之后进行编码。译码时,译码器检测到起始位后,开始译码。译码后的数据通过中断(INT1)通知单片机取走。并同时送入CRC并行运算模块进行校验,单片机在特定的时刻(接收完最后一字节数据时)读取CRC校验标志端口CRCALL0,判断整个数据串的正确性。
(1)数据编码从读写器到卡的数据采用脉冲位置调制即“1/256”编码。用256个时隙表示8bit数据,通过控制bit脉冲出现的时间位置来表示0~255范围内的数据。如图2,在第255个位置出现的位置脉冲(9.44μs高电平的9.44μs低电平)表示数据E1(HEX),采用计数器加控制电路即可实现。控制部分协助实现数据无缝编码及形成帧起始位和结束位,用VHDL设计易于实现。编码后的数据进行ASK调制(13.56MHz载波),经天线发射出去。
(2)数据译码从射频卡返回的数据经过一次解调(去掉13.56MHz载波)后,数据编码格式如图3所示。可以直接进行数据译码,也可以去除子载波(423.75kHz)后得到Manchester码再译码。这里采用后者,通过在每一bit的前、后半段时间内两次取样、判决、加以串并变换即可得到译码后的并行数据并送至并行CRC模块进行CRC校验,同时送往单片机处理,行CRC模块在校验结束时通知单片机取校验结果。
2.2 差错处理模块
与射频卡内部电路配合,读写器端采用了常用的CRC检错得传机制。为了缩短处理时间,满足读写器在实际应用中对多张卡同时处理时的响应时间要求,设计采用硬件实现。
CRC-CCITT算法生成多相式为:x 16+x 12+x 5+1[4]。计算CRC实际上是将数据通过线性反馈移位寄存器,所有数据移入后CRC寄存器的值即为16位CRC值。并行CRC运算模块每次输入8位数据,相当于一次并行运算就得到了串行移位运算时需要8位移位所得的结束。由表1~表4可以知道并行CRC实现的原理:每个时钟到来时完成8bit数据 CRC值计算;下一个8bit数据到来时,把上一个8bit数据的CRC值C15~C0作为初值,继续完成并行CRC计算。即每次处理一个字节。
表1 移位前CRC寄存器值(初值)
R15 | R14 | R13 | R12 | R11 | R10 | R9 | R8 | R7 | R6 | R5 | R4 | R3 | R2 | R1 | R0 |
C15 | C14 | C13 | C12 | C11 | C10 | C9 | C8 | C7 | C6 | C5 | C4 | C3 | C2 | C1 | C0 |
表2 1次移位后CRC寄存器值
R15 | R14 | R13 | R12 | R11 | R10 | R9 | R8 | R7 | R6 | R5 | R4 | R3 | R2 | R1 | R0 |
X0 | C15 | C14 | C13 | C12 | C11 X0 | C10 | C9 | C8 | C7 | C6 | C5 | C4 X0 | C3 | C2 | C1 |
表3 2次移位后CRC寄存器
R15 | R14 | R13 | R12 | R11 | R10 | R9 | R8 | R7 | R6 | R5 | R4 | R3 | R2 | R1 | R0 |
X1 | X0 | C15 | C14 | C13 | C12 X1 | C11 X0 | C10 | C9 | C8 | C7 | C6 | C5 X1 | C4 X0 | C3 | C2 |
表4 8次移位后CRC寄存器值
R15 | R14 | R13 | R12 | R11 | R10 | R9 | R8 | R7 | R6 | R5 | R4 | R3 | R2 | R1 | R0 |
X7 X3 | X6 X2 | X5 X1 | X4 X0 | X3 | X7 X2 | X6 X1 | X5 X0 | C15 X4 | C14 X3 | C13 X2 | C12 X1 | C11 X7 X0 | C10 X6 | C9 X5 | C8 X4 |
表中参数说明:Ri为CRC移位寄存器值(R0为低位),Ci为CRC移位寄存器初值(C0为低位),Di为输入数据(D0为低位),Xi=Di XDR Ci,同一栏中数据的运算关系是异或(XOR)。
每次并行数据到来时,各CRC寄存器值按表4运算关系更新。最后一个字节数据输入后CRC寄存器的值(R0~R15)即为该数据组的CRC值。模块设计采用了VHDL语言,同步更新R0~R15寄存器的值,从表中看出,一次CRC计算最多完成4组XOR运算。如:R3<=C11 XOFR D7 XOR C7 XOR D0 XOR X0;R15<=D7XOR C7 XOR D3 XOR C3。
3 控制模块
单片机扩展了RAM后,P2口只有P2.5~P2.7可以用来提供控制信号,不能满足需要,因而在CPLD内部将3路信号扩展为8路控制信号,以实现对各部分进行协调控制。主要有编码器和译码器的启动信号、复位信号、指令标志信号、CRC输出信号等控制信号。
4 性能分析
这里选用1片XILINX XC95144实现整个数据处理模块的功能,使用软件平台是Xilinx Foundation 3.1i。XC95144内部有144个宏单元、3200可用门。图5和图6分别给出了编码器和译码器的部分时序仿真结果及其说明。可以看到,二者均实现了协议要求,编码器在准确的位置实现脉冲位置调制,译码器能准确地对曼彻斯特码数据进行译码,并计算出输入数据的CRC值。
用AT89C51单片机提供编码数据以及模拟待译码曼码数据流对模块功能进行实测,用示波器观察各测试点信号,结果基本上与时序仿真的波形图相同,达到了预期设计的目标。
本文较系统地介绍了一类远距离射频卡读写器数字处理模块的设计,特别在于:(1)采用单片CPLD实现了射频卡读写器数字模块功能,采用了原理图和VHDL 相结合自顶向下的设计方法[2][5],样机PCB版面积小,开发周期短,性能稳定。其设计方案和思路对其他类别射频卡读写器设计具有一定的参考价值。(2)提出了一种快速实现CRC-CCITT的并行运算方法,该方法适用于高速数据传输场合。
为了提高系统的安全性,可以对对写入卡中的数据进行加密处理,即引入数据加密模块,并将整个设计配置到一片容量更大的CPLD或FPGA中。