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

基于ARM的嵌入式RFID读写器设计

作者:魏登峰 田华
来源:微计算机信息
日期:2016-08-05 14:19:00
摘要:RFID 利用了电磁波空间耦合、传播进行通信,以达到自动识别被标识对象,获取对象信息的目的。同其他一些识别技术相比,射频识别技术具有高效快捷、非接触、无污染、识别率高等突出优点。识别过程无需人工干预,可在恶劣环境下工作,能够应用到很多行业。

  引言

  RFID 利用了电磁波空间耦合、传播进行通信,以达到自动识别被标识对象,获取对象信息的目的。同其他一些识别技术相比,射频识别技术具有高效快捷、非接触、无污染、识别率高等突出优点。识别过程无需人工干预,可在恶劣环境下工作,能够应用到很多行业。

  1.RIFD 读写器的硬件总体设计

基于ARM的嵌入式RFID读写器设计

图 1 读写器的硬件总体设计

  RFID 系统主要由射频卡、读写器以及计算机系统组成。系统的工作原理如下:读写器通过天线发送出13.56MHz 的射频信号,当射频卡进入读写器工作场时,天线产生感应电流,从而射频卡获得能量被激活并向读写器发送出自身编码等信息,读写器接收到来自射频卡的载波信号,对接收的信号进行解调和解码后发送至 PC 机进行处理,PC 机根据逻辑运算判断该射频卡的合法性,针对不同的设定做出相应的处理和控制,发出指令信号,射频卡的数据解调部分从接收到的射频脉冲中解调出数据并送到控制逻辑,控制逻辑接受指令完成存储、发送数据或其他操作。

  2. 硬件选型

  在整个系统中,RFID 收发模块的功能是当接收到来自射频卡的载波信号时,对该信号进行解调和解码,并且将信息进行编码和调制后发送到射频卡中,要实现上述功能就需要一款内部封装有发送调制器和接收调制器的射频芯片,选用了射频芯片 S6700。S6700 芯片的时序是通过控制产生的,因此选用了单片机P89C58,利用它的 I/O 口进行控制。因为系统中使用的射频卡是疏耦合 IC卡,所以它与 S6700 芯片之间的协议标准采用了 ISO 15693,C 语言进行编程。

  3.RFID 收发模块硬件电路设计

  RFID 收发模块的主芯片是 TI 公司的射频芯片 S6700,该芯片的通信接口主要使用三条线:SCLOCK、DIN 和 DOUT。除了通信线外,还有一条 M_ERR 线,用来表征通信是否正常;应用电路如图2 所示:

基于ARM的嵌入式RFID读写器设计

图 2 RFID 收发模块硬件电路

  S6700 的 SCLOCK、DIN、DOUT 分别由 P89C58 的 P1.3、P1.5 和 P1.6 进行控制,由于单片机P89C52 应用比较广泛。R2 为调制深度选择电阻,当 R2 为 12 欧姆时,调制深度为 10%;当 R2 为 18 欧姆时,调制深度为 20%。SCLOCK 为双向时钟线,分别由单片机 P89C58 和 S6700芯片在不同的情况下进行控制:发送数据时由 P89C58 控制,接收数据时由 S6700 控制。在收发数据时,每个数据位在 SCLOCK 的上升沿被锁存,当 SCLOCK 为高时,数据位必须固定且保持不变,只有当 SCLOCK 为低时,传送的数据才能被改变;DIN 为数据输入线,S6700 芯片通过该线接收来自 P89C58 的命令和数据;DOUT 为数据输出线,S6700 芯片通过该线将回应数据发送给P89C58,同时该线还可用于监测S6700 芯片内部数据缓冲区的情况。M_ERR 线用来表征在同时读多张卡时数据的冲突情况。该线由于内部下拉,平时为低电平,一旦发生多卡冲突,此线会升为高电平。在每一次通信过程中,远端控制器必须通过发送命令来实现任务,典型命令格式为:起始位 S1、

  8 位命令字、传输数据和结束位ES1。

  4.嵌入式控制模块硬件电路设计

  S3C44B0X 微处理器是低功耗的,采用了应用于实时环境的 ARM7TDMI 32 位核,所以选为控制模块的主芯片,负责完成 PC 机和 RFID 读写器之间数据的传送和控制。

  4.1 晶振电路

  晶振电路用于向 CPU 及其他电路提供工作时钟。S3C44B0X 芯片通过管脚OM[3:2]确定选择何种时钟源,在本系统中,将两个管脚下拉,选择晶体时钟模式,选用该模式时,外部采用 10MHz的晶振,可以利用公式设计出各种所需的输出频率,也就是说时钟频率可以通过软件进行设定,公式如下:

  Fpllo=( m×Fin ) / ( p×2s)

  其中设置 m=0x48,p=0x03,s=0x02,这样就可以得到 40MHz 的输出频率,满足系统的要求。

  4.2 电源电路

  在该系统中,需要使用 2.5V 和 3.3V 的直流稳压电源,其中 S3C44B0X 的内核需 2.5V 电源,S3C44B0X 的 I/O 口和其它部分电路需要 3.3V 电源。为简化系统电源电路的设计,要求整个系统的输入电压为高质量的 5V 的直流稳压电源,这样就需要用 DC-DC 转换器来完成 5V~2.5V 、5V~3.3V 的转换,在该系统电路中选用了 BayLinear 公司的 B1117 电压转换芯片系列:B1117-2.5和B1117-3.3,器件输出电流为 1.0A。系统电源电路如图4 所示。

基于ARM的嵌入式RFID读写器设计

图 3 系统电源电路图

  4.3 SDRAM 接口电路

  在本系统中,采用了 HY57V641620 SDRAM 芯片,存储容量为 4 组×16M 位(8M 字节),工作电压为3.3V,支持自动刷新和自刷新,16 位数据宽度。该芯片是通过行、列地址来定义存储器地址空间的,A11-A0 是列地址,A7-A0 是行地址,芯片管脚 BA0、BA1 用于片内 4 个存储器组的选择,将它与 ADDR21 和ADDR22 相连,利用地址高端进行相应的选择。

  在本系统中,采用该 JTAG 接口对程序进行调试和下载。标准的 JTAG 接口是 4 线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。

  5 读写器的软件设计

  根据 RFID 读写器的需要,移植了UC/OS-Ⅱ。嵌入式系统通信程序循环发送命令,检测是否有卡待读,如果接收到从 RFID 模块传来的卡号信息,则将卡号从信息中提取出来发送至 PC 机上的应用程序,由应用程序对它进行辨识。无论是与 RFID 模块的通信还是与 PC 机的通信,都采用了串口通信方式,所以首先应对串口进行设置。

  当嵌入式控制程序向 RFID 模块发送完读卡的相关命令后,就需要等待接收传回的卡号数据信息,由于系统串口采用的是查询方式,一旦发送端存在数据遗失,一直未能有数据传送回来,则程序将进入死循环,所以在程序中设计了自动终止功能。在系统设计中该部分子内容只接收来自 RFID模块的数据,故只考虑串口2。

  读卡程序如下:

  char recv_rfid()

  {

  char lm;

  int m,l;

  if(whichUart==1) // 串口 2,接收从 RFID 模块传来的数据

  {

  wh: for(;(!(rUTRSTAT1 & 0x1));){

  m=m+1; // 等待的同时对变量 m 计数

  if(m==500) // 判断 m 是否已累计到 500 还未接收到有效数据

  {err_flag=1; // 若是,则将标志 err_flag 置 1

  goto wh1; // 跳转到标记为 wh1 的程序处

  }}

  lm=RdURXH1(); // 若接收到有效数据,则将串口数据赋给变量 lm

  return(lm); // 返回 lm 的值

  }

  wh1: l=0; // 标记 wh1 处程序,实为跳出子程序

  }

  写卡的过程只需要将从应用程序处获取持卡人的相关信息然后发送至RFID 收发模块,由 RFID模块写入射频卡中,因为要验证写入信息是否正确,所以该程序还需要实现读取射频卡中的信息并返回给应用程序,由应用程序来判断写入信息的正误。持卡人的相关信息包括姓名、性别、年龄、工作单位、身份证号、发卡日期和发卡时间。

  6 结束语

  本文创新点:基于 S6700 的嵌入式的RIFD 读写器具有成本低廉,稳定性好等特点,完全支持ISO/ IEC15693 协议的全部命令,并且实现了同时识别,若设计出功率放大器,读写距离可以达到 1m左右,可满足门禁、校园一卡通等非高速识别应用场合的需要,在低成本应用领域有较广阔的应用空间。