基于单片机的RFID实验平台设计

时间:2022-09-23 04:28:57

基于单片机的RFID实验平台设计

摘要:物联网领域发展迅速,射频识别在终端的数据采集中有着重要应用。本文用S52单片机结合射频模块,完整的实现了射频识别实验平台的硬件搭建和软件设计,经过实验验证该平台能较好的实现预期功能,达到预期目标。

关键词:S52单片机;射频识别;实现

中图分类号:TP334.1 文献标志码:A

RFID experimental platform fulfillment based on SCM

Yuan Xiao Wang Hong

(Computer Science, South-Central University for Nationalities, Wuhan, Hubei 430074)

Abstract: The field of IOT (Internet of things) have been developing fastly,RFID havebeen used as a important means of data-colletion of DTE.My project use S52 SCM combined with technically matured RF chips achieved the testing platform wholly both in hardware and software , After experimental verification basically met the expected goal.

Key words: S52 SCM; RFID; achievement

0 引 言

射频识别技术(RFID)[1]是利用射频方式进行通信,实现一定距离接触或非接触通信和识别,可用来追踪和管理所用的对象。是物联网底层的各种数据采集设备中重要的一种,在物流、电子证件、工业自动化控制、商业自动化、ETC、防伪,以及军事领域都有着广泛的应用。尤其是现在的物联网,有着重大的研究价值和商业前景。RFID一般包括读写器和电子标签(应答器)两部分:电子标签由天线和内置芯片构成,RFID读写器有手持或固定的两种。RFID的主要任务是控制射频模块向电子标签发射读写信号,接收标签的应答信息,由连接的终端完成信息存储和处理。根据EPC规范,可以把电子标签分为三类:CLASS0(900MHz)、CLASS1(13.56MHz)和CLASS2(860~930MHz)。CLASS0由生产厂商一次写入数据用户不能修改;CLASS1可由用户一次写入;CLASS2允许用户多次写入,并且电子标签有一定存储空间,可存储一些附加数据。本文主要讨论利用已有的RFID相关芯片,结合AT89S52单片机[2],设计并实现射频识别读卡器[3]实验装置,为今后向可编程逻辑FPGA[4]移植和进一步研究奠定基础。

1 系统设计

完整的RFID系统包括:读写器、通讯总线、液晶屏、按键组、天线、标签等。系统总体结构如图1所示。由MCU(S52单片机)控制读写器模块完成对电子标签的读写操作,将获取的数据在液晶屏显示和存储器进行相关操作。MCU集中控制外设,负责和外设交换数据,与RF模块通信。RF接口负责调制解调信号,并从载波信号中提取数字信号。

1.1 硬件设计

1.1.1 射频模块

射频模块对标签的读写是通过发射高频电磁波,电子标签内置的线圈在电磁感应原理下产生电流驱动内置的芯片,进行应答。读写器的射频模块接收到回波信号将其调制成基带信号,提取有用的信息并送到单片机的MCU进行处理。射频模块功能框图见图2。

该模块以FM1702SL[5]为核心芯片,应用于13.56MHz非接触式IC卡的读写。支持该频率下CLASS1非接触通讯协议,支持多种加密算法。不需要增加有源电路就可以驱动近距离天线,最远作用距离可达10cm。采用正交解调电路解调RX引脚的负载波信号,其原理图如图3所示。

FM1702SL芯片有8个寄存器页,每页8个寄存器,每个寄存器位宽为8,采用统一编址方式。MCU通过SPI接口与FM1702SL通信,如果MCU要让FM1702SL执行某种命令,只需将相关命令写入相应寄存器即可。

1.1.2 SPI接口

SPI(serial peripheral interface)总线技术是Motorola公司开发的一种同步串行接口,用于CPU和各种器件进行全双工、同步串行通讯。它只需要四根线就可以完成MCU与各种器件的通讯,这四条线是:串行时钟线MSCK、主机输入/从机输出数据线MISO

、主机输出/从机输入数据线MOSI、低电平有效从机选择线SS。当SPI工作时,移位寄存器中的数据逐位从输出引脚(MOSI)输出,高位在前,同时从输入引脚(MISO)接收数据逐位移位到移位寄存器(高位在前)。发送一个字节后,从另一个器件接收的字节数据进入移位寄存器,主SPI的时钟信号使传输同步。

SPI接口[6][7]的主要特点有:可以同时发送和接收串行数据,可以当作主机(Master)和从机(Slave)工作。提供频率可编程时钟(频率可变或可编程的时钟发生器),发送结束终端标志,写冲突保护,总线竞争保护等。SPI接口芯片与主机的连接方式见图4。SPI的工作时序见图5。

SPI为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟和极性可以进行配置,时钟极性(CPOL)对传输协议没有大的影响。当CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。另外还有时钟相位(CPHA)。当CPHA=0,在串行同步时钟的第一个跳变沿数据被采样;CHPA=1时,在串行同步时钟的第二个跳变沿数据被采样。

1.2 软件实现

1.2.1 系统工作流程

MCU读写芯片的工作流程如下:(1)复位并初始化FM1702SL、SPI通信接口、FM1702SL定时器、设置定时器控制寄存器。(2)请求:当IC卡在天线工作范围且读写器模式为Read时,卡片ATR启动,卡片Block0中卡片类型号共2个字节传送给读写器,建立卡片和读写器通信。通过复位请求操作回到初始状态,选择其他模式进行相应操作。出现错误按RESET键,在响应状态实现对卡片读、写、增值、减值等操作。操作流程如图6所示。

1.2.2 主函数

根据读卡器工作流程,需要设计的模块包括APP、EEPROM、KEY、LCD、SOFTUART。主函数调用的头文件如“reg52.h”以及功能函数需要的头文件等将会在主程序中包含进来。头文件省略,主函数设计如下:

void main( void ) //主程序

{ //变量声明;

lcdreset(); //LCD 初始化

putstrxy(1,0,"WELCOM");//显示开机字符串

while(tmp

{

DelayMs(100); //延时函数

//循环查询是否有键按下

}

while(1){ tmp = getkey();//获得按键的编号值,并给numeid赋值}

switch(numeid)

{

cmdi(); //调用命令函数,这里的cmdi()函数是一系列函数

showi(); //回显处理结果,showi()也是一系列函数

}

}

}

其中 showi()是字符串显示函数,cmdi()接收numid转入相应的功能函数进行处理并返回处理结果,将处理的数据显示出来。对于不同的numid下对应的show(),不同的cmd()中嵌套的功能函数不同。至于功能函数,在下面进行了部分列举,其它函数的结构类似不再赘述。

1.2.3 功能模块函数

系统的硬件有两个部分很重要:一是MCU,另一个是射频模块。二者之间的连接是通过SPI接口实现的,下面给出SPI的软实现代码架构:

void softuart_init(void) //初始化串口

{

//…变量声明

//BUF_SIZE在头文件中定义为24

for(x=0;x

{

rxbuf[x]=0xff;

}

}

char sgetc( void ){…};//该函数负责从数据输入寄存器中读取一个字符

void sputc(char ptr){…};//写一个字符到数据输入寄存器

void sputstr(char *ptr){…};//读完后输出到显示

另外,还有一些重要的功能如寻卡、读卡、CRC校验、防冲突技术等等的实现,在此仅给出读卡功能函数,其他函数不作介绍。

读块函数: void ReadBlock(u8 blockn,u8 *key)

{ //局部变量定义

u8 tmp;

cmdbuf[0] = 0x0a;//长度字

cmdbuf[1] = READ_BLOCK;//命令类型,读块

cmdbuf[2] = 0x00;//密钥标志,TYPEA

cmdbuf[3] = blockn;//块号

for(tmp=0;tmp

cmdbuf[4+tmp] = key[0+tmp];//6字节密钥

cmd_proend();

}

2 实验验证

在该实验平台上可以验证读卡、写卡、充值、减值、更改密码等操作,这里选取读值部分实验验证过程及结果作简要阐述。

(1)连上电源适配器,输出DC5V到板上,准备一张IC卡(白卡)没有记录任何数据。

(2)打开板上的电源开关,电源指示绿灯亮显示正常。将卡片放在射频感应区,按左右方向键进行状态的切换有CMD1~CMD8种状态,转到Initi_Purse状态,按确认键可以写入程序中已设的数据,数据是32000000CDFFFFFF。结果如图7所示。

(3)转到ADD_Purse状态,确认键可以将钱包增加一定数额,数值的大小由程序设定。

(4)进行读块操作,看钱包是否增值到指定数额。图7显示最后为370000000C8 FFFFFF。

(5)进行减值操作,完成后进入读状态,读出卡片中的值,回到32000000CDFFFFFF(见图8)。

3 总结

RFID并不是一种新的技术,但是最近兴起的物联网浪潮无疑将会拉动该领域的发展。本文探讨了使用S52单片机和射频芯片实现RFID系统基本功能的软硬件原理和方法,通过实验验证了系统能满足预定的功能。对以后深入研究更高频段的RFID技术,且能够同时实现多卡快速读取都有指导意义,具有一定的实用性。本文的缺点是同现实生活中使用的读写器的性能相比在功耗响应速度上有差距,有待改进。

参考文献:

[1] Finkenzeller K.射频识别(RFID)技术――无线电感应的应答器和非接触IC卡的原理与应用[M].北京:电子工业出版社,2001 :256-273.

[2] 孙育才. ATMEL新型AT89S52系列单片机及其应用[M]. 北京:清华大学出版社 2009 :152-183

[3] Qi Lei, Geng Wang. Design of a Handheld UHF RFID Reader for the Internet of Things [C]//2011 International Conference on Computer and Management, China,ShangHai,May 19-21,CAMAN ,2011:1-4.

[4] 田耘,徐文波. Xilinx FPGA开发教程[M]. 北京:清华大学出版社,2010:23-53.

[5] 上海正勤电子公司. FM1702SL技术手册[M]. 上海:上海复旦微电子公司, 2009:3-26.

[6] 权建军. 虚拟SPI在XFS4240与MCS51通信中的应用[J]. 单片机与嵌入式系统,2010,6: 18-21.

[7] 赵新雨. 基于FPGA与单片机的SPI接口的实现[J] .工业仪表与自动化装置, 2010,2: 20-23.

上一篇:组合导航定位系统研究 下一篇:P2P网络中考虑交易时间间隔的信任管理模型