基于STM32的RFID手持式阅读器的研究与设计.docx
基于STM32的RFID手持式阅读器的研究与设计继计算机和互联网发展之后,物联网的应用在各个领域迅速发展起来。射频识别技术(RFID)是物联网的核心技术之一。RFID是一种非接触式的自动识别技术,其基本原理是利用射频信号及其空间耦合和传输特性,实现对静止或移动物体的自动识别1。RFID系统主要由阅读器、射频卡等部分组成,其中射频识别阅读器根据应用场合可分为固定式阅读器和手持式阅读器2。手持式阅读器灵活性大、便于操作人员快速完成某一区域内的信息采集。随着物联网射频识别技术的不断发展,RFID阅读器被广泛应用于制造业、物流、港口、码头、车辆及人员管理等领域。1硬件设计1.1硬件结构设计RFID阅读器基于STM32单片机设计,芯片型号选择为STM32F103RBT6。该芯片为LQFP64封装,内部有128KBFlash和20KBRAM,采用32位的ARMCortexTM-M3内核,最高支持主频72MHz,拥有2个SPI接口、2个USART接口、1个USB接口、2个I2C接口和7个定时器。支持SWD和JTAG调试模式及IAP和ISP编程。STM32单片机支持J-Link在线调试,J-Link调试有两种模式:JTAG调试和SWD调试。在线调试的便捷性,可以极大缩短程序的开发周期,提高开发效率。本系统采用的调试模式为SWD模式,只需2根SWDIO和SWCLK信号线,相比JTAG模式更加节约I/O口资源。阅读器的硬件结构框图如图1所示。620)this.style.width=620;"border=0alt=基于STM32的RFID手持式阅读器的研究与设计src="技术2021/ndxy12jrjd52021.jpg">1.2电源模块设计系统可使用直流电源或电池供电,外部直流电源电压为8.4V;电池电压为7.2V,2600mA/h的锂电池。电源模块设计原理图如图2所示。620)this.style.width=620;"border=0alt=基于STM32的RFID手持式阅读器的研究与设计src="技术2021/motxhbwxh012021.jpg">电源模块工作原理:当插座J1连接外部直流电源时,电流可经过D4给电池充电,直流电源经开关JP1连接IRF7404的G极,使IRF7404的D极与S极断开,则系统使用外部直流电源供电;当不使用直流电源、按下开关时,D4可将CD_POWER与电池断开,IRF7404的G极为低电平,IRF7404导通,则系统使用电池供电。SYS_POWER电压经过LM2576S-3.3转换为3.3V为系统的各模块供电。1.3MFRC522模块设计MFRC522是阅读器的读卡芯片,工作频率为13.56MHz,工作模式支持ISO14443A标准,芯片内部驱动器可以直接驱动阅读器的天线,无需其他电路。MFRC522具有3种接口模式:SPI接口模式、UART模式和I2C总线模式3。其中SPI模式的通信速度最快,可达到10Mb/s。MFRC522与主机接口模式有关的两个引脚为IIC和EA:当IIC引脚拉高时,表示当前模式为I2C模式,若IIC引脚为低电平时,再通过EA引脚电平来区分。EA为高电平时,表示SPI模式;为低电平时,则表示UART模式4。本设计中MFRC522与MCU采用SPI通信,与AT45DB161共享一个MCU的SPI2接口。在系统中,MFRC522和天线电路一起作为单独模块使用,以便于更换与维修。天线模块与主板之间通过插座连接。天线是阅读器中的一个重要组成部分。其作用是向外发射一组固定频率的电磁波,为射频卡提供能量、传递数据。本系统中使用的是PCB天线,天线的设计关系到阅读器的读写距离,甚至关系到阅读器是否能正常与射频卡通信。RC522的天线设计须注意以下两点:(1)为了让射频卡能获取足够大的能量驱动本身的集成电路,设计天线时应该保证向外辐射足够大的电磁波;(2)为了提高读卡数据的准确性,需要考虑调谐电路的通频带,确保调制信号的准确性。天线的匹配电路可分为:天线线圈、LC谐振电路和EMC滤波电路。RC522的天线匹配电路如图3所示,其中RQ为品质因素Q的匹配电阻,Lant为天线的电感。1.4显示模块设计阅读器选用2.8英寸的TFTLCD触摸屏。在本系统中移植了GUI模块,使得人机交流界面操作更加便捷、友善。触摸屏为四线电阻屏,使用ADS7843作为A/D转换芯片。ADS7843是内置12位模/数转换、低导通电阻模拟开关的串行接口芯片,模/数转换输出范围04095,工作电压2.7V5V,参考电压VREF为1VVCC,转换电压的输入范围为0VREF,最高转换速率为125kHz5。ADS7843与MCU的接口为SPI1。620)this.style.width=620;"border=0alt=基于STM32的RFID手持式阅读器的研究与设计src="技术2021/wd4iljhyisn2021.jpg">驱动层的程序基于硬件平台,主要是为中间服务层提供硬件驱动接口函数,完成底层的硬件操作。编写STM32的内部资源驱动程序时,调用了ST公司的固件库函数。中间服务层主要是为上层应用程序提供库支持和服务接口。中间服务层的程序在驱动层程序上开发,并封装驱动程序的接口。如FATS文件系统是在AT45DB161的驱动程序上移植,为上层的应用程序提供文件创建、写入、读出、删除等服务;GUI模块是在LCD显示驱动程序上开发,将LCD驱动的画点画线函数封装成不同的控件,在控件上加载相应的数据结构,为界面应用程序提供控件的创建、销毁等操作。应用层程序是面向用户,通过调用中间服务函数和库函数来完成相应的数据处理和控制功能等。2.2FreeRTOS实时操作系统FreeRTOS是一个轻量级的操作系统,基本满足较小系统的需要。该操作系统完全免费且源码公开,同时具有可移植、可裁减、调度策略灵活的特点。在本设计中FreeRTOS的任务之间的关系如图5所示。620)this.style.width=620;"border=0alt=基于STM32的RFID手持式阅读器的研究与设计src="技术2021/4n3p0vjpz4l2021.jpg">2.3GUI模块GUI模块是一个中间服务层程序,为显示应用程序提供控件显示服务。如控件的显示位置、尺寸、颜色以及控件响应的回调函数入口地址等。在本系统中GUI控件包含有文本框、编辑框、进度条、图像框、下拉列表、按钮等。每个控件都可以注册一个回调函数,这个函数对应了该控件的响应功能函数。2.4FAT文件系统FatFs文件系统是中间服务层程序,建立在AT45DB161驱动程序上,文件系统提供了磁盘I/O接口和应用程序接口。磁盘I/O接口函数位于diskio.c文件,常用的接口函数有读磁盘disk_read()和写磁盘disk_write()。这两个函数分别调用AT45DB161驱动程序的读扇区和写扇区函数。在文件系统中一个扇区的大小为512B,与AT45DB161的页大小一致。为了使FatFs文件系统与Windows的文件系统兼容,要使用FAT32格式来格式化磁盘。f_open()函数与f_close()函数必须要成对出现,即打开一个文件操作完成后必须要关闭这个文件。在对文件进行操作前必须先调用f_mount(0,&Fs)函数对工作区进行注册,操作完成后也需要调用f_mount(0,NULL)函数对工作区进行注销。2.5MFRC522驱动程序流程本系统中使用的射频卡为Mifare1S50,也简称为M1卡,该卡有16个扇区,每个扇区有4个块,每个块可存储16B的数据。MFRC522对M1卡进行读写控制,分别有寻卡、防碰撞、选卡、认证、读块和写块等过程。MFRC522驱动程序流程如下:(1)寻卡:寻找感应区内所有符合ISO14443A标准的卡,寻卡成功后,返回卡的类型。(2)防碰撞:通过防碰撞命令查看多张M1卡之间是否发生碰撞,若发生碰撞,使用防碰撞算法进行处理;若未发生碰撞,则MFRC522与M1卡进行通信,如果通信成功,读出M1卡中的序列号。(3)选卡:根据M1卡的序列号进行选卡。(4)密码验证:密码验证模式有验证A密钥和验证B密钥,通过这两种模式来验证块地址、密码和卡片序列号。(5)读数据块:根据提供的块地址读取块数据。(6)写数据块:根据提供的块地址写入块数据,操作完成后命令M1卡进入休眠状态。2.6AT45DB161D驱动程序AT45DB161D是一个外部Flash存储器,拥有2MB的容量,分为4096个页,可配置为每页512B,还拥有2个512B的缓冲区。在主存储器正在编程时,缓冲区允许接收数据,且支持数据流式写入。AT45DB161的初始化包括STM32的引脚配置和SPI2接口配置,初始化之后才能进行读写操作。读写页操作流程如下:(1)读页操作流程检测AT45芯片是否忙。若忙,则继续读忙,直到芯片空闲;若芯片空闲,则执行流程。向AT45芯片写入命令0x53和页地址。0x53命令是将Flash中整页的数据读到缓冲区1中。向AT45芯片写入命令0xD4和页偏移地址及数据长度。0xD4命令是读缓冲区1中的数据。读页操作完成。(2)写页操作流程检测AT45芯片是否忙。若忙,则继续读忙,直到芯片空闲;若芯片空闲,则执行流程。向AT45芯片写入命令0x84、页偏移地址及需要写入的数据。0x84命令是将数据写到缓冲区1中。向AT45芯片写入命令0x83和页地址。0x83命令是将缓冲区1中的数据写到Flash指定的页。使用0x83命令,写入前不需要对页进行擦除操作。写页操作完成。3性能测试与实验分析3.1手持式阅读器的功能测试需要测试的功能有对M1卡读写、文件读写、与PC机数据通信等功能。为了便于测试上述功能,将本设计应用在校园消费系统上进行测试。测试步骤如下:(1)用串口线将RFID阅读器与PC机相连。运行PC机的上位机程序,设置串口参数为:波特率9600b/s,数据位8bit,停止位1bit,无校验位,无流控制。(2)对M1卡读写功能测试。通过上位机软件发送指令和数据至阅读器,阅读器将指定数据写入M1卡。然后再将M1卡数据读出,传回给上位机软件显示,并比较写入数据和读出数据,如图6所示。620)this.style.width=620;"border=0alt=基于STM32的RFID手持式阅读器的研究与设计src="技术2021/nhy1eeyujke2021.jpg">(3)文件读写测试。由于读M1卡的数据以文件的形式存放在阅读器的外部Flash中,该Flash由文件系统管理。用USB线连接阅读器和PC机,阅读器以盘符的形式在PC机上显示,从磁盘中将文件复制到PC机上,用上位机软件打开读出软件,记录测试数据。(4)与PC机数据通信测试。以上两项测试通过则表明阅读器能与PC机进行正常通信。3.2性能测试与分析系统的性能测试主要是锂电池的续航时间及RFID有效读卡距离等。系统性能测试如表1所示。620)this.style.width=620;"border=0alt=基于STM32的RFID手持式阅读器的研究与设计src="技术2021/wfsx0wnxrog2021.jpg">(1)锂电池的续航时间需要分别测试最长待机时间和连续工作时间。最长待机时间测试:将锂电池充满电,阅读器使用电池供电,将阅读器开机而不使用,记录待机时间。连续工作时间测试:将锂电池充满电,阅读器使用电池供电,编写一个测试程序,让阅读器定时每30s读取M1卡信息。记录工作时间。用万用表分别测量阅读器的待机消耗电流和工作消耗电流,并记录电流值。(2)RFID有效读卡距离。将阅读器固定不动,M1卡平行放在阅读器天线平面的正上方200mm处,将M1卡缓慢向阅读器移动,直到阅读器能正确读取M1卡中数据为止。测量卡与阅读器天线之间的距离并记录数据。通过对上述的系统功能、性能进行验证,分析实验测出的相应数据,系统的功能基本能达到了初期预设的技术指标。本文设计的阅读器有良好的人机交流界面,可通过触控操作,显示屏可显示M1卡中存储信息。经过实验证明,在70mm的范围内能准确读写M1卡中的数据。该阅读器具有超长待机和低功耗的功能。经过实际功能测试,已成功地将该设计应用于校园消费系统。1