基于TI S6700系列芯片的RFID阅读器设计
射频识别技术是二十世纪九十年代兴起的一项自动识别技术,它利用无线电射频方式进行非接触式双向通信。RFID(Radio Frequency Identification)系统中射频卡(应答器)与阅读器之间无需物理接触即可完成识别,可实现多目标识别和运动目标识别,应用范围更加广泛。图1是阅读器和应答器组成的一个完整射频系统:
图1 阅读器与应答器信息传递示意图(略)
从射频系统中可以看出阅读器的重要性及它的功能,在整个通信过程中阅读器起到桥梁的作用。
硬件设计
考虑到阅读器在系统中要完成的工作主要是从射频卡读取数据,并将数据经相应的处理后送给主机。在设计时按功能对阅读器进行模块化设计,图2是阅读器的内部功能框图。图中阅读器分为射频卡数据读取部分(射频部分)、控制电路部分、主机接口电路部分。
图2 阅读器内部功能框图(略)
控制部分
图3是控制器的接口电路图。
图3 控制电路部分(略)
此控制部分是为了辅助RI-R6C-001A工作,因为RI-R6C-001A芯片要正常工作,完成射频阅读器的功能,不但需要有外围电路,而且还需要有控制器对其进行适当的控制。在此设计中选用了PIC16F874单片机作为控制器,由于此单片机有丰富的位操作指令,有SPI串行口,精简的指令集,能够很容易的模拟RI-R6C-001A传送数据的时序以及时钟切换时序。由于RI-R6C-001A对外只提供 四个引脚DOUT、DIN、SCLOCK、M-ERR,所以控制器的接口电路相对较简单。DOUT、DIN、SCLOCK三个引脚分别连接到单片机的SPI串行口SDI、SDO、SCK三根线上,用来实现数据的串行传输。M-ERR引脚用来检测接收到射频卡中的数据是否发生错误,若有错误此引脚变为高电平,因此把该引脚接到单片机的外部中断输入引脚端,用于检测接收数据是否有错误,进而单片机对其做出相应的处理。由于RI-R6C-001A在接收射频卡中的数据并把它发送给控制器时,要求控制器要对其发送数据是否结束做出判断,并且RI-R6C-001A不发送数据时就不再送时钟,所以在此电路设计中把RI-R6C-001A的SCLOCK引脚也接到了具有电压变化中断功能的RB4引脚,此引脚外接一个二极管,与软件结合起来,要求当控制器供应时钟时,RB4引脚处于高电平输出状态,经过二极管,RB4引脚不会输入时钟;当RI-R6C-001A供应时钟时 ,RB4引脚处于输入状态,SCLOCK信号输入此引脚,从而可以对发送数据是否结束作出相应的判断。
射频部分
RI-R6C-001A芯片是TI公司最新开发的针对IC卡读写的多协议收发器,支持的协议包括: Tag-it协议、ISO/IEC 15693-2、ISO/IEC 14443-2(TYPE A)。该收发器由发送器,接收器,电源供应,参考时钟和内部振荡器,默认的复位设置和电源管理,串行通信接口等几部分组成。该芯片通常是+5V供电,采用SSOP20封装,内部封装有发送编码器,调制器,接收器和解调器,典型发送功率200mW,有IDLE、POWER DOWN、FULL POWER三种电源管理功能。它提供给用户数字接口的信号线为DIN、DOUT、SCLOCK,通过这三根线可完成控制器与RI-R6C-001A芯片之间的数据传输。当RI-R6C-001A要发送数据时,时钟由单片机控制,当它要接收数据时,时钟由该芯片控制。 DOUT除了在接收数据期间有把接收到的数据输出给单片机的功能外,还用来表征RI-R6C-001A内部FIFO的情况。DOUT内部下拉,平时为低电平。输入数据过程中,当RI-R6C-001A的16位FIFO寄存器满时,DOUT线会自动跳变为高电平,直到FIFO寄存器空,DOUT线又会跳变为低电平。在软件设计时单片机每发一位数据都要检测DOUT的状态。在DOUT为高电平期间,输入数据无效。
射频电路由三大部分组成(见图4):RI-R6C-001A应用电路,与单片机相连的接口电路,天线发送。接收电路:在RI-R6C-001A应用电路中,L1、L2、C2组成的T型网络以及L3、C9组成的LC网络都是起到滤波的效果,使RI-R6C-001A通过天线接收的数据不至于流向发送端TX-OUT,因为此芯片发送数据时频率是13.56MHz,而接收的信号的载波频率是13.56MHz/28和13.56MHz/32(FM)或者13.56MHz/32(AM),R-MOD端的电阻R2决定发送信号的调制深度;R3、L4、C10、C11组成串联谐振电路,匹配阻抗50 ,可调电容C11用来准确调整电路谐振点在13.56MHz。这一设计有利于阅读器正确的收发信息。
图4 射频电路部分(略)
系统工作过程
接收数据过程
单片机与RI-R6C-001A之间通信必须遵循Tag-it协议或ISO/IEC 15693,其中Tag-it是TI公司最新开发的RFID Transponder(应答器)的注册商标,是一个产品系列。Tag-it完全和ISO/IEC15693兼容,Tag-it应答器与阅读器之间是半双工通信,首先阅读器主动发一个请求(包含命令和参数),应答器被动发一个应答(包含发送的数据和状态)。 在软件设计上必须让单片机发送数据和接收数据满足RI-R6C-001A的通信要求。由单片机发给RI-R6C-001A的命令序列必须符合以下格式:
图(略)
S1表示传输开始,长度为1位;CMD表示命令字节,长度为8位或1位,8位用于普通模式,1位用于寄存器模式;ES1表示传输停止。命令字节:规定RI-R6C-001A与应答器通信时的有关参数,例如:支持的射频协议,调制方式,调制深度,波特率等。普通模式在每次通信时命令序列中都要包含使用的有关参数,而寄存器模式命令序列中并不含这些参数,而是由预先写入配置寄存器中的数值所决定;数据位是根据通信时的要求定的,数据位的顺序由ISO15693-3或者Tag-it协议所规定,具体采用哪一种射频协议使阅读器与应答器通信由CMD中指定, 因此数据位是任意的,且长短根据要求通信的信息而定。单片机的SPI口正好能满足这一要求。由于SPI口没有开始和停止位,为了满足RI-R6C-001A开始和停止位的要求,起始位是通过在启动SPI口之前直接用位操作指令先对DIN置低,然后对SCLOCK置高,再把DIN置高从而表示开始接收数据的起始位,然后启动SPI接口传输数据; 停止位是通过在数据传输结束后把SPI口引脚变成通用的I/O引脚,用位操作指令先把DIN、SCLOCK置高,再把DIN置低,表示传输数据结束。数据位:RI-R6C-001A接收单片机发来的数据时是在每个时钟SCLOCK的上升沿锁存数据,并且要求数据位的值必须被建立且SCLOCK为高电平时数据保持不变,也就是说要求单片机在时钟的下降沿送出数据,在时钟的上升沿数据是稳定的,可供阅读器对输入的数据进行锁存,因此对控制器SPI口相关寄存器SSPCON和SSPSTAT进行适当设置就可以满足此要求。
数据传送
单片机要接收RI-R6C-001A发过来的数据,首先在时序上必须满足RI-R6C-001A发送数据时序的要求,见图5。发送数据时,是在每个时钟的上升沿送出数据,在每个时钟的下降沿数据稳定,因此单片机应该在时钟的下降沿采样数据,这同样可以通过设置SSPCON和SSPSTAT寄存器来实现。
图 5(略)
时钟切换
需要注意的是,当单片机由发送转换为接收过程中,它同时由主动转化为被动,由发送时钟转换为接收时钟,这里有时钟切换问题,应满足图6所示时序图关系。
图6 时序图(略)
由时序图知当单片机传输数据ES1结束后(在a时刻)把SPI用到的引脚设置为通用I/O引脚,要进行时钟的切换,在第一个tran期间,通过位操作指令先把SCLOCK=0,再让DIN引脚出现一个正脉冲(b时刻到c时刻),单片机就把时钟控制权交给了RI-R6C-001A,d时刻表明在RI-R6C-001A控制SCLOCK的时间内DIN引脚为高电平,注意在阅读器给单片机送数据时,DIN引脚一直保持高电平,一旦它不再送数据,同时也不再送时钟, 在编程时可以检测单片机的时钟输入端是否由时钟输入,从而决定阅读器是否还在给单片机发送数据。当阅读器控制SCLOCK时,它将发送一个S2对应于应答器发送过来的SOF,2bit数据和一个ES2对应于应答器发送过来的EOF。在第二个tran期间可再次通过位操作指令让DIN引脚上产生一个正脉冲,此时单片机就收回了控制权,然后按第一次发数据的方式发数据。 在单片机接收DOUT引脚上数据的过程中,通过对单片机中与SPI接口有关的寄存器的设置,可以让单片机在输入的每位数据的有效时间中间采样数据,这一设置正好与RI-R6C-001A输出数据的时序相吻合,注意在每次时钟切换的过程中,SCLOCK都是为低电平的。
结束语
通过利用PC机,仿真器以及MPLAB ICE集成开发环境完成了软件的调试,软件的主要功能包括:从单片机发送符合RI-R6C-001A所要求的命令,数据。RI-R6C-001A收到这些数据进行处理,加上SOF和EOF后,以请求的形式发送给应答器,并接收应答器以应答的形式发来的数据,进行处理后再通过输出引脚DOUT 送给单片机,在编程时采用了模块式的结构,利用PIC16F87X汇编和C语言进行写的程序。
该系统经过测试,已经可以使用,如果硬件和软件设计合理,进一步提高其可靠性和安全性,再加上成本低廉、读写电路简单,应用必然会更加广泛。