S3C6410和CR95HF的RFID读卡系统设计
引言
射频识别(RFID)是一种新兴的通过射频载波来发现目标和进行无线数据交换的识别与跟踪技术。RFID与其他技术相比,具有识别速度快、抗干扰能力强、安全性高、非接触等优点。因此该技术已广泛应用于门禁系统、物流配送、校园卡等多种日常生活,作力物联网关键技术,未来的发展潜力巨大。但是现有的读卡器普遍存在主频低、处理速度慢、便携性差等缺点,难以满足日益发展的使用需求。针对这些不足,本文基于高主频、性能强悍的S3C6410嵌入式微处理器,选用新型的CR95HF射频芯片,开发设计了一款工作在高频13.56 MHz的手持式RFID读卡器,同时创新性地搭载新兴的Android嵌入式系统,支持ISO14443、ISO15693等多种协议,处理速度快且准确度高。
1 系统结构与工作原理
本文设计的嵌入式RFID读卡系统由微处理器、触摸屏、电源、射频、存储、天线等组成。整体结构如图1所示。
读卡器要求处理速度快,能够实时显示信息,因而选用性能强悍、功耗极低的S3C6410嵌入式微处理器作为核心,其基于先进的ARM11内核,烧写Android嵌入式系统。射频芯片采用ST公司的新型非接触芯片CR95HF,与微处理器之间通过串口进行通信。工作原理为:读取标签数据时,将标签靠近读卡器,触摸屏操控端传输读命令给S3C6410,其操控射频模块将该命令发送给标签,标签收到后将所需数据返还给读卡器显示;执行写入操作时,S3C6410收到触摸屏写命令后操控射频模块向标签写入数据。
2 系统硬件设计
2.1 微处理器外围和电源电路设计
本设计采用三星公司的S3C6410嵌入式微处理器作为主控芯片,其主频高达667 MHz,是一款基于ARM11内核的高性能RISC处理器。S3C 6410包括电源管理、串口、SPI、I2C总线、USB和I/O等多种硬件接口,具有性能强悍、处理速度快且功耗低等优点,能满足系统的设计需要。并行使用2片128M DDR芯片K4X1G163PC来实现256M的RAM电路。主控芯片利用串口和射频模块通信,并通过USB接口和上位机通信。
系统设计了5 V直流和3.7 V锂电池两种方式供电来满足读卡器手持需求,并用跳线帽选择。锂电池供电时读卡器能手持使用。系统电源需要5 V和3.3 V两种。3.7 V锂电池通过升压芯片转化为5V,之后通过稳压芯片LM1117转换为3.3 V给微处理器、射频芯片供电。直流电源供电时通过LM1117就能完成供电。LM1117能支持接近1 A的大电流输出,其电路如图2所示。输入为VCC5,输出为VCC3.3.C1~C4为去耦电容,用于消除电源引脚自激,保持电源稳定。
2.2 射频电路及匹配网络设计
本文设计的读卡器射频芯片采用CR95HF,其是ST公司具有SPI和串口的高频13.56 MHz新型收发器芯片,支持ISO14443、ISO15693、ISO 18092等多种协议,主要用于RFID和NFC近场通信。射频电路如图3所示,CR95HF利用串口与微处理器通信,其串口引脚为UART_TX和UART_RX。将SSI_0、SSI_1接地置0来实现串口模式。上拉电阻R5、R6将电平钳制在高电平,并起到限流保护作用。C2、C5为去耦电容。两个TX和RX引脚连接匹配网络和天线。
匹配网络设计时首先通过0 Ω电阻和不焊的接地电容来构成低通滤波器抑制高次谐波,之后设计匹配电容。采用PCB矩形天线,由于其与匹配网络等效电容构成13.56 MHz的LC谐振电路,从而可以得到电感参数进行天线设计。设计PCB时注意将电源线加宽并与射频部分隔离,尽量缩短射频电路之间的连线长度,并减少回路面积来防止PCB各线路的信号串扰和电磁干扰(EMI),提高制板的稳定性。
2.3 触摸屏与存储电路
读卡器采用4.3寸、分辨率为272×480的LCD液晶屏,能够实现良好的界面显示。屏幕为电阻触摸屏,利用24条I/O口与微处理器通信来显示信息。微处理器通过10条控制I/O口和屏幕相连来实现控制功能。
内核代码、显示数据、应用程序和读取的标签信息均需要存储,因而读卡器设计了FLASH和SD卡。FLASH选用K9G8G08U0A芯片,1GB容量,利用片选信号CSN2控制,用来存储内核代码与应用软件。SD卡容量为8GB,和微处理器通过高速MMC接口相连,用来存储显示数据和标签信息,其电路如图4所示。时钟引脚为MMC0_CLK,MMC0_CDN、MMC0_WPN、MMC0_CMD为控制引脚,用来控制SD卡读写。R17~R24为上拉电阻,MM C0_DATA0~MMC0_DATA3为数据通信引脚,用来传输读写数据。
3 系统软件设计
3.1 嵌入式系统移植
本读卡器移植嵌入式Android 2.3操作系统并开发RFID应用软件。Android是谷歌公司推出的基于Linux内核的手机操作系统,是一种真正开源且功能强大的嵌入式移动系统,采用软件堆层架构。嵌入式系统移植如图5所示。PC机通过arm-linux-gcc交叉编泽工具构建开发环境,编译Uboot生成烧入FLASH引导程序,编译Linux内核生成Android所需的底层映像zImage,并裁减、编译Android源码生成根系统rootfs. yaffs2,将以上文件导入SD卡来实现系统的移植和烧写。
3.2 读卡器驱动设计
读卡器软件主要由底层驱动、数据处理及交互界面组成。微处理器和射频芯片通过串口通信,串口驱动的开发使用Android NDK将Linux的C函数通过JNI接口生成相应的.so动态链接库供Java语言开发的安卓软件使用。由于数据采用十六进制传输,因而串口通信需要配置为原始数据输入/输出。为提高通信速率,本文采用高速波特率921 600 b/s,并通过奇偶校验有效降低了误码率,修改寄存器实现了8数据位的传输,较传统7数据位速率提升1/8,主要C代码如下:
CR95HF支持ISO14443、ISO15693等无线协议,根据协议标准调用串口函数和延时函数并加载数据来实现射频驱动。射频指令格式如图6所示。
由不同的CMD命令来选择不同协议,协议命令参见表1。
3.3 数据处理
读卡器需具有寻卡、防冲突和读写卡等功能。设置串口波特率和选择协议,防冲突来判断附近存在一张还是多张标签卡。根据所选CMD及返回结果对数据处理来实现读卡器和标签的无线通信,其处理流程如图7所示。
寻卡、防冲突后选择地址进行读写卡,每地址可存储32位数据,默认为ISO15693协议。由于原始数据输入/输出,因而收到信息后通过函数ByteArrToHex(byte[])转换为Hex字符串。
搜寻到标签卡后,卡的惟一标识符UID数据必须在Android读卡器软件里全局通用才能让读卡界面和写卡界面共同来操控该数据。
由于各个Activity界面数据均独立,而用传统的Intent类在多个界面间传输同一组数据操作繁琐且易发生数据冲突,本文通过Applicat ion类对接收到的标签卡信息存入数组RcvBuffer实现了全局共享。实现全局共享Java程序如下:
3.4 人机交互界面软件设计
Android界面开发通过XML布局文件和Java程序混合实现。设计时,在AndroidManifest.xml文件中注册所需界面并通过网格视图Grid View来实现主界面的图片按钮显示。主界面包括设置、寻卡、读卡、写卡等功能按钮,选择后会通过Intent类调用相应的子界面组件Activ ity,其通过setContentView()函数来启动相应的XML。
4 系统测试
所开发的读卡器实物如图8所示,左侧为主体,右侧为天线。将RFID软件下载到读卡器后的测试结果如图9、图10所示。图9为选用4张支持ISO15693协议的标签放到读卡器附近时的寻卡结果,每个标签对应唯一的UID标识符,可见读卡器寻到了附近的所有标签。图10为读卡测试结果,选择UID和输入地址时能够成功读取到该地址的标签数据“AA1107FF”。可见读卡系统能够成功地与标签无线通信。
对读卡器寻卡和读写卡各测试了400次,只有1次发生数据丢失,表明读卡器稳定性非常高。经测试,无障碍物遮挡时读卡器读写距离至少为6.4 cm,有木板、书、皮革等障碍物时读写距离至少为5 cm,可见识别距离能够满足需要。同时对ISO14443协议的标签测试也表明读卡器可以对其稳定读写。
结语
本文详细介绍了基于S3C6410和CR95HF的新型嵌入式RFID读卡系统解决方案。该读卡器工作在13.56MHz的高频频段并支持多种协议。经测试,该读卡器能对符合协议的标签进行稳定的读写,具有便携、性能强悍、功耗低等特点。本设计应用范围广,可用于航空物流行业等要求便携性强且处理速度快的场合。