RFID读写器设计PPT课件_第1页
RFID读写器设计PPT课件_第2页
RFID读写器设计PPT课件_第3页
RFID读写器设计PPT课件_第4页
RFID读写器设计PPT课件_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-,0,RFID读写器原理与设计,JianguoHuhujguo,-,1,目录,1、RFID读写器硬件电路设计2、RFID读写器通讯设计3、RFID读写器固件设计,-,2,目录,1、RFID读写器硬件电路设计2、RFID读写器通讯设计3、RFID读写器固件设计,-,3,1、RFID读写器硬件电路设计,(1)RFID读写器介绍。(2)RFID阅读器整体结构。(3)RFID阅读器硬件设计。,-,4,(1)RFID读写器介绍,射频识别技术可利用射频信号识别对象,利用电磁耦合原理交换信息。与传统的识别技术相比,RFID技术具有读卡器和射频标签无接触的特点。本课程介绍一款高频RFID读写器的硬件电路设计,采用STM32F103RBT6嵌入式处理器作为主控芯片,RC500作为射频读卡芯片,可以读写工作在1356MHz的多种射频标签,采用USB通信协议与上位机进行通信。,-,5,(2)RFID阅读器整体结构,RFID阅读器系统由微控制器、射频读卡、声/光指示、通讯接口等部分组,RFID阅读器的结构框图如下图所示。,-,6,(3)RFID阅读器硬件设计,主控器电路射频电路天线设计电源转换电路指示电路设计USB接口设计总电路图扩展应用,-,7,主控芯片及其最小系统设计,主控芯片:主控芯片采用了ST公司生产的基于ARMCortex-M3内核的嵌入式处理器STM32F103RBT6,该处理器的工作频率为72MHz,128K字节的闪存程序存储器,高达20K字节的SRAM,支持多种通信总线,其中包括2个I2C总线接口、3个USART串行接口、2个SPI总线接口、CAN总线和USB总线。,-,8,主控芯片及其最小系统设计,最小系统设计1拉高复位引脚NRST脚串联一个10K的电阻再接到3.3V电源。2外部晶振输入外接一个12M(Hz)的晶振,晶振的匹配电容为27pF。,-,9,主控芯片及其最小系统设计,最小系统原理图:拉高主控器复位脚,加外部晶振输入,给主控器供电即可以正常工作。,-,10,射频读卡芯片电路设计,本RFID读写器使用NXP公司生产的MFRC500作为射频读卡芯片,该芯片是一种应用于1356MHz的非接触式射频标签的芯片,支持符合ISOIEC14443标准的射频标签。该芯片支持10cm的最大操作距离,与NXP公司的其他射频读卡芯片CLRC63、MFRC530、MFRC531、SLRC400引脚兼容。该芯片可以用8位并行接口或SPI总线方式与微控制器进行通信。,-,11,射频读卡芯片电路设计,MFRC500芯片主要引脚说明:13.56M晶振输入(1、3)射频信号发射(5、7)8位双向并行数据口(13to20)SPI串行通讯(13、21、22、24)天线信号输入脚(29)内部参考电压(30)重置、复位(31)VCC(6、25、26)GND(8、12、28),-,12,射频读卡芯片电路设计,本RFID读写器的MFRC500射频读卡芯片和主控器间的通讯采用串行通讯,其硬件原理图如下:,-,13,天线网络的设计,对于MFRC500,可以使用两种方法将天线连接到读写器:直接匹配天线和50匹配天线。本文中采用直接匹配的方式将MFRC500与天线连接,包括了EMC低通滤波器、天线匹配电路与接收电路。其电路分别如下图所示:,-,14,天线网络的设计,RFID读写器采用PCB环形天线,其电感量由如上公式进行估算:式中长度单位为cm,电感值单位为nH。l1为一圈导线的长度,取值20cm;D1为导线的直径,取值01cm;K为天线形状常数,本读写器是矩形天线,取值K=147;N为导线的圈数,取值2。代入公式,计算得L1=1857nH。对照芯片厂家提供的表格进行计算,得到与天线并联的电容容值为1323pF,与天线串联的电容容值为175pF。在实际电路设计中,与天线并联的电容采100pF与22pF电容并联得到,与天线串联的电容采用18pF。接收电路使用了MFRC500内部产牛的VMID引脚作为输入电压。在VMID和地线之间连接了一个01F电容,起到了减少干扰的作用。天线及其匹配电路原理图如图。,-,15,电源转换电路,本RFID读写器才用USB接口的5V供电,读写器上有部分元器件使用的是3.3V电压。采用AMSIII7-33芯片提供33V电压,AMSIII7系列芯片可以输出1A的电流,输入电压调节率小于02,负载调节率小于04,输出电压稳定。,-,16,声光指示设计,1蜂鸣器控制读写器用一个蜂鸣器出声音,操作读写器或者刷卡时会发出正确或错误的提示声。2红绿双色LED灯提示读写器的运行状态。,-,17,USB接口设计,读写器通过USB与电脑端上位机通讯,同时也采用USB接口给整个系统供电。按照USB协议,全速设备在D+线路上拉1.5K到Vcc,上拉引脚加PNP三极管进行USB的开关控制。,-,18,总电路图,-,19,扩展应用,门禁、考勤读头,会员管理发卡器,物联网终端,金融POS机机,仓储盘点机,智能水电表,-,20,目录,1、RFID读写器硬件电路设计2、RFID读写器通讯设计3、RFID读写器固件设计,-,21,2、RFID读写器通讯设计,(1)HID概述(2)开发环境介绍(3)指定HID设备查找(4)HID设备通讯,-,22,(1)HID概述,HID(HumanInterfaceDevice)人机接口设备是Windows最早支持的USB类别。由其名称可以了解HID设备是计算机直接与人交互的设备,例如键盘、鼠标和游戏杆等。不过HID设备不一定要有人机接口,只要符合HID类别规范,就都是HID设备。,-,23,通过设备管理器了解USBHID设备通过USBLyzer了解,-,24,(1)HID概述,链接知识:USB速度低速:1.5Mbps全速:12Mbps高速:480Mbps,USB1.1,USB2.0,USB3.0(5.0Gbps),-,25,(1)HID概述,HID数据传输能力每一笔事务(USB事务是指主机和USB设备间数据传输的基本单位)可以携带小量或中量的数据。低速设备每一笔事务最大是8个字节,全速设备每一笔事务最大是64个字节,高速设备每一笔事务最大是1024个字节。最大的传输速度有限,特别是低速与全速的时候。主机可以保证低速的中断端点,每10ms内不会有超过1笔事务,每一秒最多800个字节。主机可以保证全速的中断端点,每1ms内不会有超过1笔事务,每一秒最多是64000个字节。主机可以保证高速的中断端点,每125us内不会有超过1笔事务,每一秒最多24.576M个字节。,-,26,(1)HID概述,链接知识:API(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。API函数包含在Windows系统目录下的动态连接库文件中。如USBHID的API就封装在hid.dll,setupapi.dll,kernal32.dll里面。,-,27,(1)HID概述,使用HID设备进行开发的优点作为Windows操作系统最先支持的USB设备,在Windows98以及后来的版本中内置有HID设备的驱动程序(API),应用程序可以直接使用这些驱动程序来与设备通信。在设计一个USB接口的计算机外部设备时,如果HID类型的设备可以满足需要,可以将其设计为HID类型设备,这样可以省去比较复杂的USB驱动程序的编写,直接利用Windows操作系统对标准的HID类型USB设备的支持。,-,28,(2)开发环境介绍,编译环境:VisualC+6.0参考资料:MSDN开发语言:C+,-,29,(2)开发环境介绍,作为Windows默认支持的HID设备,开发人员可以直接调用Win32API函数进行HID设备通信应用程序的开发。开发HID设备用到的动态链接库有Hid.dll(用于设置获取HID设备属性信息)Setupapi.dll(用于查找识别设备)Kernal32.dll(用于打开关闭设备,实现数据传输),-,30,(2)开发环境介绍,搭建开发环境新建工程,-,31,(2)开发环境介绍,搭建开发环境添加API函数库(静态调用),-,32,(2)开发环境介绍,链接知识:USBHID调试工具介绍USBLyzerBusHoundUsbView,-,33,(3)指定HID设备查找,设计思路:根据HID设备厂商提供的VID和PID,在已枚举的所有HID设备中进行筛选,找到目标设备,-,34,(3)指定HID设备查找,链接知识:GUID在计算机领域有很多东西需要不重复的唯一标识的东西,例如设备的类型,类,接口标识,目录名等等。需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。GUID理论上能产生全球唯一的值,对于以后的数据导入很方便。GUID的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个x是0-9或a-f范围内的一个十六进制的数字。例如:4D1E55B2-F16F-11CF-88CB-001111000030即为HID类的GUID值(Hidclass.h),HID设备的GUID也可以用API函数HidD_GetHidGuid获得。,-,35,(3)指定HID设备查找,软件流程:调用函数HidD_GetHidGuid获得USBHID类设备的GUID;调用函数SetupDiGetClassDevs,传入上一步取得的HID类的GUID,返回一个包含全部HID信息的结构数组的指针;调用函数SetupDiEnumDeviceInterfaces,传入上一步获得的指向所有HID类的指针,获取SP_DEVICE_INTERFACE_DATA结构的设备接口数据,该数据用于识别一个HID设备接口;调用函数SetupDiGetDeviceInterfaceDetail,传入上一步的接口,获得一个指向该设备接口详细信息,里面包含设备的路径;调用函数CreateFile,传入上一部的设备路径,获得设备句柄;调用函数HidD_GetAttributes,传入上一步的设备句柄,获得HIDD_ATTRIBUTES结构的数据项,该结构包含设备的厂商ID、产品ID和产品序列号,比照这些数值确定该设备是否是查找的设备。,-,36,(3)指定HID设备查找,-,37,(3)指定HID设备查找,4D1E55B2-F16F-11CF-88CB-001111000030typedefstruct_GUID/sizeis16DWORDData1;/4D1E55B2WORDData2;/F16FWORDData3;/11CFBYTEData48;/88CB-001111000030GUID;,-,38,(3)指定HID设备查找,void_stdcallHidD_GetHidGuid(OUTLPGUIDHidGuid);,-,39,(3)指定HID设备查找,/Definetypeforreferencetodeviceinformationset/typedefPVOIDHDEVINFO;,-,40,(3)指定HID设备查找,/Flagscontrollingwhatisincludedinthedeviceinformationsetbuilt/bySetupDiGetClassDevs/#defineDIGCF_DEFAULT0 x00000001/只返回与系统默认设备相关的设备#defineDIGCF_PRESENT0 x00000002/只返回当前存在的设备#defineDIGCF_ALLCLASSES0 x00000004/返回所有已安装的设备。如果这个标志设置了,ClassGuid参数将被忽略#defineDIGCF_PROFILE0 x00000008/只返回当前硬件配置文件中的设备#defineDIGCF_DEVICEINTERFACE0 x00000010/返回所有支持的设备,-,41,(3)指定HID设备查找,关键代码分析/获取HID类的GUIDGUIDGuid;HidD_GetHidGuid(/没有找到HID类设备,退出,-,42,(3)指定HID设备查找,typedefstruct_SP_DEVICE_INTERFACE_DATADWORDcbSize;GUIDInterfaceClassGuid;DWORDFlags;DWORDReserved;SP_DEVICE_INTERFACE_DATA,*PSP_DEVICE_INTERFACE_DATA;,-,43,(3)指定HID设备查找,WINSETUPAPIBOOLWINAPISetupDiEnumDeviceInterfaces(INHDEVINFODeviceInfoSet,INPSP_DEVINFO_DATADeviceInfoData,OPTIONALINLPGUIDInterfaceClassGuid,INDWORDMemberIndex,/逐一枚举的设备集中的索引号,如果该值超出设备集范围,改函数将返回FALSE,/并通过GetLastError返回错误值:ERROR_NO_MORE_ITEMSOUTPSP_DEVICE_INTERFACE_DATADeviceInterfaceData);,-,44,(3)指定HID设备查找,关键代码分析/枚举所有HID类设备,逐一查找指定设备SP_INTERFACE_DEVICE_DATAifData;ifData.cbSize=sizeof(ifData);for(inti=0;SetupDiEnumDeviceInterfaces(info,NULL,+i)/获取接口详细信息,-,45,(3)指定HID设备查找,WINSETUPAPIBOOLWINAPISetupDiGetDeviceInterfaceDetailA(INHDEVINFODeviceInfoSet,/目标设备集指针INPSP_DEVICE_INTERFACE_DATADeviceInterfaceData,OUTPSP_DEVICE_INTERFACE_DETAIL_DATA_ADeviceInterfaceDetailData,OPTIONALINDWORDDeviceInterfaceDetailDataSize,OUTPDWORDRequiredSize,OPTIONALOUTPSP_DEVINFO_DATADeviceInfoDataOPTIONAL);,-,46,(3)指定HID设备查找,typedefstruct_SP_DEVICE_INTERFACE_DETAIL_DATA_ADWORDcbSize;CHARDevicePathANYSIZE_ARRAY;SP_DEVICE_INTERFACE_DETAIL_DATA_A,*PSP_DEVICE_INTERFACE_DETAIL_DATA_A;,-,47,(3)指定HID设备查找,/获取接口详细信息DWORDneeded;SetupDiGetDeviceInterfaceDetail(info,/设备路径,-,48,(3)指定HID设备查找,typedefstruct_SECURITY_ATTRIBUTESDWORDnLength;/结构体的大小,可用SIZEOF取得LPVOIDlpSecurityDescriptor;/安全描述符/安全描述符包含和被保护对象相关联的安全信息的数据结构。/安全描述符包括谁拥有对象,以何种方式访问以及何种审查访问类型等信息。BOOLbInheritHandle;/安全描述的对象能否被新创建的进程继承SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*LPSECURITY_ATTRIBUTES;,-,49,(3)指定HID设备查找,WINBASEAPIHANDLEWINAPICreateFileA(LPCSTRlpFileName,/要打开的文件的名或设备名DWORDdwDesiredAccess,/指定类型的访问对象。如:GENERIC_READ,GENERIC_WRITEDWORDdwShareMode,/共享方式LPSECURITY_ATTRIBUTESlpSecurityAttributes,/安全特性DWORDdwCreationDisposition,/建立方式。如:CREATE_NEW,OPEN_EXISTING,OPEN_ALWAYSDWORDdwFlagsAndAttributes,/属性。如:FILE_ATTRIBUTE_HIDDEN,FILE_ATTRIBUTE_READONLYHANDLEhTemplateFile/模板文件句柄,可为空);,-,50,(3)指定HID设备查找,/获取设备句柄DeviceHandle=CreateFile(detail-DevicePath,0,FILE_SHARE_READ|FILE_SHARE_WRITE,(LPSECURITY_ATTRIBUTES)NULL,OPEN_EXISTING,0NULL);,-,51,(3)指定HID设备查找,typedefstruct_HIDD_ATTRIBUTESULONGSize;/=sizeof(struct_HIDD_ATTRIBUTES)USHORTVendorID;USHORTProductID;USHORTVersionNumber;HIDD_ATTRIBUTES,*PHIDD_ATTRIBUTES;,-,52,(3)指定HID设备查找,BOOLEAN_stdcallHidD_GetAttributes(INHANDLEHidDeviceObject,OUTPHIDD_ATTRIBUTESAttributes);,-,53,(3)指定HID设备查找,HIDD_ATTRIBUTESAttributes;Attributes.Size=sizeof(Attributes);Result=HidD_GetAttributes(DeviceHandle,If(Attributes.VendorID=VendorID),-,55,(3)指定HID设备查找,关键代码分析/记得释放资源SetupDiDestroyDeviceInfoList(info);,-,56,(4)HID设备通讯,设计思路:1.查找指定HID设备2.调用CreateFile,获取设备句柄(用于获取设备属性)写句柄(用于向设备发送数据)读句柄(用于从设备接收数据)3.调用WriteFile,ReadFile进行数据传输,-,57,(4)HID设备通讯,Windows驱动采用File(文件)方式进行数据交互,-,58,(4)HID设备通讯,关键代码分析/发送USB数据(写文件)Result=WriteFile(WriteHandle,/写文件句柄,在查找HID时建立DataSendBuff,/将要发送的数据填入此数组Capabilities.OutputReportByteLength,/输出长度,在查找HID时建立,-,59,(4)HID设备通讯,外链知识:OVERLAPPED是一个包含了用于异步输入输出的信息的结构体。I/O设备处理必然让主程序停下来干等I/O的完成,解决这个问题,可以使用OVERLAPPED。OVERLAPPEDI/O是WIN32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来I/O完成OVERLAPPEDI/O。你可以获得线程的所有利益,而不需付出什么痛苦的代价。也就是说,OVERLAPPED主要是设置异步I/O操作,异步I/O操作是指应用程序可以在后台读或者写数据,而在前台做其他事情。,-,60,(4)HID设备通讯,WINBASEAPIBOOLWINAPIReadFile(HANDLEhFile,LPVOIDlpBuffer,DWORDnNumberOfBytesToRead,LPDWORDlpNumberOfBytesRead,LPOVERLAPPEDlpOverlapped);,-,61,(4)HID设备通讯,关键代码分析Result=ReadFile(ReadHandle,/读文件句柄,在查找HID设备时返回InputReport,/用来接收HID数据的缓冲区Capabilities.InputReportByteLength,/输入长度,-,62,USBHID通讯程序例程,ZD100系列读写器服务终端双界面读卡器,-,63,目录,1、RFID读写器硬件电路设计2、RFID读写器通讯设计3、RFID读写器固件设计,-,64,RFID读写器概述,本RFID读写器是基于STM32开发,采用USB和电脑端通讯。RFID射频芯片是恩智浦的MFRC500,所以读写器的驱动代码是基于STM32F103RBT6单片机对MFRC500射频芯片操作的编写。编写本读写器用到的软件工具和关键技术:KeilMDK代码编译工具STM32F103RBT6单片机使用MFRC500射频芯片关键寄存器介绍与配置SPI接口介绍STM32单片机代码烧录STM32单片机控制MFRC500对M1卡的简单操作,-,65,STM32开发工具keilMDK介绍,Keil是德国知名软件公司Keil(现已并入ARM公司)开发的微控制器软件开发平台,是目前ARM内核单片机开发的主流工具。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器在内的完整开发方案,通过一个集成开发环境(uVision)将这些功能组合在一起。它的界面和常用的微软VC+的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。使用Keil来开发嵌入式软件,开发周期和其他的平台软件开发周期是差不多的,大致有以下几个步骤:1.创建一个工程,选择一块目标芯片,并且做一些必要的工程配置。2.编写C或者汇编源文件。3.编译应用程序。4.修改源程序中的错误。5.联机调试。,-,66,STM32开发工具keilMDK介绍,MDK具有良好的界面风格,下图是主界面窗口。,-,67,STM32F103RBT6单片机使用,本RFID读写器的主控单片机是STM32,固件代码用C语言编写。STM32系列是基于ARMCortex-M内核专为要求高性能、低成本、低功耗的嵌入式应用而设计,使用STM32外设功能时可用以直接操作寄存器方法或调用ARM微控制器固件函数库。寄存器:STM32和其他单片机原理一样,也是有自己的寄存器,作为一款ARM内核的芯片,功能非常丰富,寄存器自然也很多,STM32的手册有一千多页。操作配置某个外设的时都要去查阅数据手册才能驱动起来。STM32中文参考手册固件函数库:该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例。通过使用本固件函数库,无需深入掌握细节,用户也可以轻松应用每一个外设。因此,使用本固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。STM32固件库使用手册,-,68,STM32F103RBT6单片机使用,STM32配置GPIO口操作寄存器版本和调用固件函数库版本C代码举例如下。寄存器:固件函数库:,-,69,MFRC500关键寄存器介绍与配置,MFRC500的控制主要是通过读写MFRC500的寄存器来实现的,RC500共有64个寄存器,单简单应用的话只用到其中的几个,用的最多的是FIFODATA(数据堆栈),COMMAND(命令),FIFOLENGTH(堆栈长度),PRIMARYSTATU(标记)等。MFRC500主要是通过写通讯命令、参数、数据到FIFODATA,再通过写命令到COMMAND实现与M1卡的通讯。MFRC500通讯主要分为4步一、寻卡,写通讯命令26H或52H到FIFODATA,成功后得到卡类型。二、选择,写通讯命令93H到FIFODATA,成功后得到卡号。三、认证(密码校验),通过LOADKEY写KEY到KEY缓存,写参数命令60(认证A密码)或61H(认证B密码)+块地址+卡号到FIFODATA,写命令0CH到COMMAND,此操作卡不返回数据,通过读取标记判断是否成功四、直接对卡进行读写增减值操作,也就是通过在FIFODATA上写入命令参数及数据。,-,70,SPI接口介绍,SPI(SerialPeripheralInterface-串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。SPI接口一般使用4条线:MISO主设备数据输入,从设备数据输出。MOSI主设备数据输出,从设备数据输入。SCLK时钟信号,由主设备产生。CS从设备片选信号,由主设备控制。其中CS是控制芯片是否被选中的,只有片选信号为使能信号时对此芯片的操作才有效。这就允许在同一总线上可以连接多个SPI设备。,-,71,SPI接口介绍,SPI总线四种工作方式SPI模块为了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论