读卡器的硬件可以分为三大模块:FPGA数字信号处理模块、MCU及人机接口模块和射频收发模块,其结构框图如图1所示。FPGA数字信号处理模块用来实现ISO/IEC 18000-6 Type B 协议中规定的基带数据编解码,MCU及人机接口模块用来实现指令的跳转控制和返回数据的显示等一些操作接口,射频收发模块用来处理前端的超高频信号。
ISO/IEC 18000-6 Type B 协议规定读卡器到射频卡端的射频调制方式为调制深度为99%的ASK调制,也就是可以近似看作为OOK调制;而射频卡到读卡器端的射频调制方式为反向散射调制,其调制方式与ASK调制类似,所以在解调端可以按照ASK方式解调。射频收发模块的核心芯片采用RFM公司的TR1000芯片。TR1000是一款单片OOK/ASK通用无线射频收发器芯片,适合高稳定、小尺寸、低功率、低价格的短距离无线数据通信和无线控制应用。
读写卡操作程序完成基于ISO/IEC 18000-6 Type B协议的基带信号编解码,其程序设计流程图如图4所示。
具体工作过程如下:(1)上电复位,系统初始化,包括单片机时钟、端口、LCD、定时器的初始化,配置FPGA和开中断。(2)等待接收上位机或键盘发送的指令。(3)对指令进行判断,如果为多卡操作,则进入防冲突子程序;如果为单卡操作,则直接进行读卡、写卡、值操作和中止操作。(4)若操作成功,所得数据回传给上位机,同时驱动LCD显示操作成功信息;若操作失败,则驱动LCD显示操作失败信息。
当读卡器对射频卡进行多卡操作时,在其天线覆盖范围内的所有射频卡将被激活,并处于识别状态,造成了多张射频卡读写冲突。所以解决冲突是多卡操作的关键。ISO/IEC 18000-6 Type B协议详细规定了防冲突机制,其程序设计流程图如图5所示。该防冲突机制的原理是利用随机产生的0和1信号实现二进制树形搜索,并且设定了成功命令,进一步提高了搜索的效率,是一种二进制树形的防冲突算法[7]。具体实现过程为:首先,射频卡进入读卡器的工作范围,从离场掉电状态进入就绪状态。读卡器可以通过GroupSeleet命令和GroupUnseleet命令让读卡器工作范围内处于就绪状态的所有或部分的射频卡参与防冲突过程。针对该模式的防冲突机制,射频卡应该具有如下两种硬件电路:一个8 bit的计数器和一个0、1随机数发生器。当射频卡进入识别状态(ID状态)后,将其内部的计数器清0,其中的一部分可以通过接收GroupUnselect命令重新回到就绪状态,其他处于识别状态的射频卡则进入了防冲突执行的过程中。被选中的射频卡开始下面的循环:(1)所有处于识别状态并且内部计数器为0的射频卡将发送其识别码;(2)如果有一个以上的射频卡发送识别码时,读卡器将检测到冲突而发送Fail命令;(3)所有接收到Fail命令并且内部计数器不等于0的射频卡将把本身的计数器加1;所有接收到Fail命令并且内部计数器等于0的射频卡(即刚刚发送过应答的射频卡)将产生一个1或0的随机数。如果选择了1,射频卡将把自己的计数器加1;如果选择了0,射频卡将保持计数器为0并且再次发送它们的识别码。在接下来的过程中会出现4种可能的情况;(4)情况1:如果有一个以上的射频卡发送,将重复步骤(2);(5)情况2:如果所有的射频卡都随机选择了1,读卡器将接收不到应答,此时,读卡器将会发送Success命令,所有的射频卡的计数器减1,然后计数器等于0的射频卡开始发送,接着重复步骤(2);(6)如果只有一个射频卡发送并且它的识别码被读卡器正确接收,读卡器将发送包含识别码的DataRead命令,射频卡正确接收该条命令后将进入数据交换状态,开始发送它的数据。此后,读卡器将发送Success命令,使处于识别状态的射频卡的计数器减1;(7)情况3:如果只有一个射频卡的计数器等于0并且返回应答,重复步骤(5)读卡器发Success命令或重复步骤(6)发送DataRead命令;如果有一个以上的射频卡返回应答,重复步骤(2);(8)情况4:如果只有一个射频卡返回应答,并且它的识别码未被正确接收,读卡器将发送一个Resend命令。如果识别码被正确接收,重复步骤(5)。如果识别码被重复几次的接收(这个次数可以基于系统所希望的错误处理标准来设定),就假定有一个以上的射频卡在响应,重复步骤(2)。