物联传媒 旗下网站
登录 注册
RFID世界网 >  技术文章  >  物流  >  正文

射频识别系统中高频读写器的研究与开发

作者:吴战克,孙多春,刘贺平
来源:电子技术应用
日期:2010-12-06 15:16:34
摘要:介绍了射频识别(RFID)系统中读写器的设计开发以及RFID系统中S6700芯片的通信协议,同时给出了读写器硬件系统的结构、底层驱动和软件工作流程。读写器采用ATMEL公司的ATmega128单片机和TI公司的13.56MHz频段下的多协议收发芯片S6700。
  射频识别RFID(Radio Frequency Identification)技术于20世纪80年代兴起,最近几年得到迅速发展。它是一种利用射频通信方法实现非接触式、快速、实时、准确地采集与处理信息的自动识别技术。RFID技术同互联网技术相结合可以实现全球范围内物品的跟踪与信息的共享,被世界公认为21世纪十大最热门的重要技术之一,具有广泛的应用前景。近年来RFID产业在我国迅速增长,已渗透到人们生活、工作等各个方面。RFID市场分析预测显示,我国RFID需求增长迅速。2006年10月份国家将射频识别(RFID)技术列入863重大应用项目,科技部拨巨额资金重点支持我国RFID领域技术的突破与自主创新。

  读写器在整个射频识别系统中起着举足轻重的作用。读写器的频率决定了射频识别系统的工作频段,其功率直接影响射频识别的距离。人们通过计算机应用软件来处理对射频标签写入或读取其携带的数据信息,由于标签的非接触性,人们必须借助处于应用系统与标签之间的读写器来实现数据的读写功能。这使得读写器在整个通信过程中起着关键性的桥梁作用。

  1 读写器的组成结构

  读写器可以简化为两个基本的功能模块:控制部分和射频部分。控制部分即MCU控制电路,其功能是由智能单元发出命令,对射频部分回收来的信号进行必要的处理,将结果放入存储单元。 而射频部分由读写器芯片及外围电路组成,包括发射器和接收器,其功能包括对发射信号进行调制、将数据传送给电子标签、接收并解调来自电子标签的高频信号。

  2 硬件设计

  2.1读写器芯片S6700

  S6700是TI公司推出的一款具有代表性的多协议收发器芯片(RI-R6C-001A),工作频率为13.56MHz;支持三种协议,分别是Tag-it协议、ISO/IEC 15693-2、ISO/IEC 14443-2(TYPE A);其典型电源为+5V,典型发射功率为200mW,确保电压在3~5.5V之间;采用SSOP20封装,内部集成有发射调节器和接收解调器,采用曼彻斯特编码方式,有空闲模式(IDLE)、掉电模式(POWER DOWN)、工作模式(FULL POWER)三种电源管理功能;支持的调制方式有100%和10%~30%的ASK(Amplitude Shift Keying),这两种调制方式可以通过应用软件切换,调制深度通过改变与R_MOD端相连的电阻值来实现。

  发射通道首先对DIN、SCLOCK的数据解码,经过深度调制,再经过功率放大器和低通滤波器后输出。接收通道对接收数据进行检波,得到423/484/848kHz的信号,经解码后输出DOUT和M_ERR信号。

  在读写过程中,ISO/IEO15693-2所规定的读写器与应答器通信物理层协议的接口全部由S6700实现,CPU通过同步串行接口(SPI)与S6700相连,CPU和S6700的通信接口有四根线:时钟线(SCLOCK)、数据输入线(DIN)、数据输出线(DOUT)、出错检测线(M_ERR)。其中时钟线是双向的,在时钟的上升沿锁存数据。DOUT 除了有在接收数据期间的数据输出功能外,还用来表征芯片内部FIFO 的情况。

  2.2 模块总体设计

  控制部分MCU选用ATMEL公司的ATmega128芯片,是AVR单片机中功能很强的一款单片机,该芯片具有高性能、低功耗的 AVR 8 位微处理器,有先进的RISC结构,具有128KB的系统内在线可编程Flash。

  所设计的读写器电路包括三个部分:S6700典型应用电路及外围辅助电路、CPU接口电路和天线等效电路。S6700各对应端分别连接在ATmega128的PE5、PA0、PA1、PB5引脚上。在S6700的TX_OUT端将调制好的信号输出,经过一个LC网络将信号谐振放大,然后经过一个T形网络(双L网络) 进行通带的选择与阻抗的匹配,最后输出到50Ω的天线。由于使用同一收发天线,在芯片的接收端应接一个2.2kΩ保护电阻,以避免发射信号电压过大对芯片接收引脚造成损坏。R4、L4、C8、C9组成串联谐振电路,匹配阻抗为50Ω,可调电容C9用来准确调整电路谐振点在13.56MHz。因为S6700与外部天线模块是直接相连,考虑到加上同轴电缆后将使得接口电路的稳定性下降,可通过调节C9得到13.56MHz且满足50Ω的匹配阻抗。这一设计有利于读写器正确地收发信息。

  3 通信协议

    读写器与电子标签通信采用半双工模式,即一问一答模式。一般都是由读写器先发言(Reader talks first)。参照图3所示的读写器的通信过程,必须符合控制器与收发器S6700之间的通信协议以及收发器S6700与电子标签遵循的ISO15693-3规范。这里主要结合这两部分的通信协议加以讨论。

  3.1 请求命令结构

  控制器发送一个命令给收发器必须保证正确的时序。一个典型命令的结构是:起始位S1,8位命令,数据(域),结束位ES1。

  (1)起始位S1、结束位ES1波形。 
  (2)命令字节:规定收发器与电子标签通信时的相关参数。
  (3)数据:数据域内容由ISO15693-3规定,取决于命令内容。

  命令参数是表明远耦合器(VCD)到远耦合IC卡(VICC)之间的通信规则,包括采用什么支持协议、脉冲位置编码方式、调制深度、AM或FSK(频移键控),例如:2EH,表示普通模式、支持射频协议15693(1 out of 4)、AM调制方式、调制深度100%、返回数据采用高数据率。只有该命令字节的发送顺序是高位在先,即MSB FIRST,其他的数据、标志位发送顺序都是低位在先,即LSB FIRST。

  以命令2E(00101110)和数据4E(01001110)为例的通信如图所示。

  每个数据位在SCLOCK的上升沿时发送。当SCLOCK的管脚保持高电平时,数据位的电平必须保持不变。命令模式有二种:普通模式和寄存器模式。表明所采用的射频协议、调制方式及传输速率等是由命令序列中规定的还是由寄存器所设定的。普通模式指令包含所有参数,而寄存器模式不含这些参数,而是由预先写入寄存器的数值决定,在该模式下,命令字节为1位,且该位为1。

  15693-3 规定的请求格式如表1所示。

  标志位(FLAG)用来指出将由VICC执行的行为以及相应的域存在与否,相当于从VICC到VCD的通信规则,如采用何种方式:单/双副载波频率和高/低数据传输率等。比较上面两个请求命令格式,注意到S1和ES1在收发器命令中已经存在,这里只需把15693命令序列中的标志位、命令码、数据、CRC等内容放入收发器命令的数据域中。序列S1、CMD、DATA、ES1会发送一个“SOF,数据,EOF”给电子标签,即从MCU至S6700,从S6700至VICC两个请求过程,这两个通信过程不是同时刻发送的,S6700中存在FIFO缓冲器,并在DOUT中体现出来。传送的一些编码等信息会从帧首中体现出来(可参考15693-2定义)。

  3.2 响应结构

  VICC响应的基本格式如表2所示。

  起始位S2和结束位ES2:分别表示VICC响应数据的开始和结束。其波形如图所示。

  4 程序设计流程

  4.1 Inventory 及程序流程

  Inventory 请求指令和响应结构分别如表3、表4所示,其中请求Flags设置为06,即选择16时隙(slot),不显示AFI域。Inventory 命令代码为01,防冲撞算法参数为Mask length和Mask value。只进行16时隙时,Mask length设为0。

  命令流程是SOF/发送Inventory请求命令/EOF后进入slot 1, 以EOF切换到下一时隙直到slot 16为止。在一时隙中遇到有冲撞或是无标签响应时,切换到下一时隙。Inventory流程图如图所示。

  4.2 底层驱动实现

  从以上分析 ISO15693 的通信协议和时序可知,阅读器软件设计主要工作是按照 ISO15693 的通信格式及时序要求进行接口驱动程序的编写。下面是底层驱动的实现方法,主要是写命令函数 Write_cmd(char cmd)、写数据函数 Write_data(char data_buf)和读数据函数Read_data(char *cdata)。

    void Write_cmd(char cmd)
    {for (char Bitnum=8;Bitnum>0;Bitnum--)
    {PB5=0;              //DIN=0
    if(cmd&0x80)
    PB5=1;              //DIN=1
    PE5=1;              //SCLOCK=1
    PE5=0;              //SCLOCK=0
    cmd<<=1;
    }}
    void Write_data(char data_buf)
    {while(PA1);        //FIFO Manage
    for (char Bitnum=8;Bitnum>0;Bitnum--)
    { while(PA1); 
    PB5=0;             //DIN=0
    if(Data_buf&0x01)
    PB5=1;              //DIN=1
    PE5=1;              //SCLOCK=1
    PE5=0;              //SCLOCK=0
    Data_buf>>=1;
    } }
    void Read_data(char *cdata)
    {char Readin;
    for (char Bitnum=0;Bitnum<8;Bitnum++)
    { while(PE5==1);    //等待SCLOCK=0
    while(PE5==0);      //等待SCLOCK=1
    Readin>>=1;
    if(PA1==1)          //判断 DOUT=1?
    Readin |=80; }
    Cdata(bitnum)=Readin;    }

  本文主要介绍射频识别系统中读写模块的软硬件设计,其读写器模块通过PC机和串口通信软件测试,实现了识别与数据通信,能成功用Inventory命令识别出电子标签的唯一序列号。通过进一步地改进硬件设计与优化软件编程,将会进一步提高读写距离、识别效率、防冲撞性能和稳定性。