博主福利:100G+电子设计学习资源包!

​http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect​​ --------------------------------------------------------------------------------------------------------------------------

 

Radio Frequency Identification技术,即RFID技术又称为射频识别技术和无线射频识别技术,是一项应用非常广泛的、发展中的技术,发展至今,其历史已临近百年。随着其发展,人们对与系统的安全性,以及标签体积样式和存储容量等方面都有了更高的要求。本文以STM32F103RCT6微处理器为核心,配合CR95HF射频芯片构成符合ISO/IEC 14443标准的便携读卡器。

基于STM32的RFID监控系统设计_序列号

系统终端硬件包含两部分:基于STM32103RCT6处理器的控制单元和基于RC522的射频单元。控制单元是整个终端的控制枢纽;控制板集成了USB了接口、RS232接口LCD触摸屏接口,方便了系统调试和二次开发。射频单元以RC522为核心,配置了低通滤波器电路和功率放大器电路,能够满足ISO/IEC14443A协议的标签。

01

 RFID系统的构成 

RFID系统是由读写器、电子标签两大部分组成的。在本论文中,读写器是很重要的一部分。系统中电子标签的作用是存储设备的信息等,是整个RFID系统的信息载体组成,电子标签内的数据由用户用读写器自行写入。读写器是RFID系统的核心,能够由它来完成对电子标签信息的读写,读写器与电子标签的通信必须要按照统一的协议标准,否则无法实现对标签信息的读写。

阅读器由于使用的不一样的结构和技术能够分成读或者读/写装置,它是操控和处理RFID系统消息的重要部分。阅读器一般是由耦合模块、收发模块、控制模块和接口单元组合而来。阅读器和应答器之间通常使用半双工通信模式进行消息的互换,在这基础上阅读器利用耦合给无源应答器提供能量和时序。在正常使用过程中,能够更有效的利用Ethernet或WLAN等完成对物体识别信息的采集、处理及远程传送等管理功能。应答器承载着RFID系统的内部消息,应答器一般都是由耦合原件(线圈、微带天线等)和微芯片组成无源单元。

而电子标签分为两部分即电子芯片部分和天线部分,电子芯片主要用于存储数据,而天线主要作用为收发在标签和读取器之间的射频信号。RFID系统组成结构图如下图所示。

基于STM32的RFID监控系统设计_数据_02

02

 RFID读写器工作原理

RFID读写器的命令收发链路由发射机和接收机两部分组成,发射机部分主要功能是产生射频信号,让系统的前端天线发射出去。此部分主要由调制器、振荡器、上变频、带通滤波器和高频功率放大等组成。其结构图如图所示。

基于STM32的RFID监控系统设计_序列号_03

接收机部分的功能与发射机恰好相反。接收机主要是接收射频信号。天线接收标签向空间的反向散射信号,经过带通滤波器滤除高频信号后,然后低噪声放大器将接收到的信号进行放大,接着调制解调器对放大的信号进行解调,最后将射频信号变为数字基带信号。接收机的方框图如下图所示。

基于STM32的RFID监控系统设计_序列号_04

本设计采用ARM处理器和RFID射频处理单元相结合的方案。这种方案开发难度相对较低,开发周期较短,釆用ARM处理器能获得较高的性能和丰富的接口,很好满足功能需求。设计中将控制单元和射频单元分开,做成两个电路板。巡检终端结构如下图所示。

基于STM32的RFID监控系统设计_阅读器_05

03

 控制单元总体结构 

控制单元电路包括STM32F103RCT6处理器及其外部接口设计。重点包括GPRS接口电路设计,GPS电路接口设计,RFID接口电路设计。

STM32F103RCT6外部配置电路主要包括FLASH存储电路、SDRAM电路、RS232接口电路、触摸屏接口电路、USB接口电路,电源模块电路和JTAG调试接口电路等。控制单元硬件电路图如下图所示。

基于STM32的RFID监控系统设计_序列号_06

主处理器STM32F103RCT6:整个电路的控制中心,实现与RFID模块命令交和信息处理;串口、JTAG接口主要实现软件调试,为未来功能拓展预留调试接口;USB接口提供多种方式的信息传输;电源管理模块、FLASH存储模块是STM32F103RCT6正常工作的必要电路;LCD触摸屏和按键接口为整个终端提供了良好的人机接口,方便操作使用。

04

 编程的总体思路 

本RFID系统的目的是通过终端扫描设备标签的RFID编号,将设备的编号、记录时间及设备的状态信息传送到处理器中,总体的变成思路如图所示,所以本系统的编程需要两个部分,一个是阅读器判断标签是否注册的介绍,另一个是Key0判断卡片是否上锁的介绍。使用的是MDK5.10对STM32103RCT6进行编程,上位机用的是C#进行编程。

基于STM32的RFID监控系统设计_序列号_07

Stm32与M1卡通信的流程图如图所示:

基于STM32的RFID监控系统设计_阅读器_08

(1)寻卡

M1射频卡的通讯协议和通讯波特率是定义好的,当有卡片进入读写器的操作范围时,读写器以特定的协议与它通讯,从而确定该卡是否为M1射频卡,即验证卡片的卡型。调用的函数及参数解释如下所示:

参数说明: req_code[IN]:寻卡方式

0x52 = 寻感应区内所有符合14443A标准的卡

0x26 = 寻未进入休眠状态的卡

pTagType[OUT]:卡片类型代码

0x4400 = Mifare_UltraLight

0x0400 = Mifare_One(S50)

0x0200 = Mifare_One(S70)

0x0800 = Mifare_Pro(X)

0x4403 = Mifare_DESFire

返回: 成功返回MI_OK

char PcdRequest(u8 req_code,u8 *pTagType)

向 FIFO 中写入 PICC_REQIDL 命令,通过 PCD_TRANSCEIVE 命令将 FIFO 中数据通过天线发送出去,此时若有卡在天线作用范围内,将识别命令,并返回卡类型;由于本次采用的是M1卡,所以返回的值是0x0400,具体程序请参考附录。

(2)防冲突机制

当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的则处于空闲模式等待下一次选卡,该过程会返回被选卡的序列号。调用的函数及参数解释如下所示:

参数说明: pSnr[OUT]:卡片序列号,4字节

返回: 成功返回MI_OK

char PcdAnticoll(u8 *pSnr)

向 FIFO 中写入 PICC_ANTICOLL + 0x20 ,通过 PCD_TRANSCEIVE 命令将 FIFO 中数据通过天线发送出去,卡返回卡序列号由于是非接触式的,同一时间天线作用范围内可能不只一张卡时,即有多于一张的MIFARE 1 卡发回了卡序列号应答,则发生了冲突。此时,由于每张卡的卡序列号各不相同, MCM 接收到的信息 ( 即卡序列号 ) 至少有 1 位既是 0 又是 1( 即该位的前、后半部都有副载波调制 ) , MCM 找到第 1 个冲突位将其置 1( 排除该位为 0 的卡 ) ,然后查第 2 个,依次排除,最后不再有冲突的 SN 即为被选中的卡,具体程序请参考附录。

(3)选择卡片

选择被选中的卡的序列号,并同时返回卡的容量代码。调用的函数及参数解释如下所示:

参数说明: pSnr[IN]:卡片序列号,4字节

返回: 成功返回MI_OK

char PcdSelect(u8 *pSnr)

向 FIFO 中写入 PICC_SElECTTAG+0x70+卡序列号,通过 PCD_TRANSCEIVE 命令将 FIFO中数据通过天线发送出去,卡返回卡容量(对于 MIFARE 1 卡来说,可能为 88H 或08H ),具体程序请参考附录。

(4)三次互相确认(验证卡片密码)

选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验,在三次相互认证之后就可以通过加密流进行通讯。(在选择另一扇区时,则必须进行另一扇区密码校验),具体程序请参考附录。调用的函数及参数解释如下所示:

功能:验证卡片密码

参数说明: auth_mode[IN]: 密码验证模式

0x60 = 验证A密钥

0x61 = 验证B密钥

addr[IN]:块地址

pKey[IN]:密码

pSnr[IN]:卡片序列号,4字节

返回: 成功返回MI_OK

char PcdAuthState(u8 auth_mode,

u8 addr,u8 *pKey,u8 *pSnr)

(5)对数据块的操作

由于本程序只涉及到对M1卡的读数据应用,所以只介绍有关读数据函数的操作。调用的函数及参数解释如下所示:

功能:读取M1卡一块数据

参数说明: addr[IN]:块地址

p [OUT]:读出的数据,16字节

返回: 成功返回MI_OK

char PcdRead(u8   addr,u8 *p )

向 FIFO 中写入 PICC_READ+块地址,通过 PCD_TRANSCEIVE 命令将 FIFO 中数据通过天线发送出去,具体程序参考附录。