终于在CSDN开博客了!以后逐渐把发布在百度空间的文章给罗过来哈!首先来篇最近在研究的RFID的文章吧!
这两天在调试RFID程序,发觉市面的RFID程序大多都是在NXP官方的程序基础上修改而来,我在NXP官网上没有找到RC500的程序,不知道何缘故啊?
今天下午总算实现了RFID卡读写M1卡,顺便读了下自己的公交卡和市民卡(卡有加密,只读了几个扇区,不敢写啊,怕啊,哈哈!)
下面的
1 Mifareone射频卡的结构和工作原理转载自http://www.eechina.com/thread-47400-1-1.html,可以帮助大家深刻理解RFID的工作原理。
附一段程序:
void main (void){init () ;M500PcdConfig () ; //初始化RC500PcdReadE2 (8 ,4 , Snr-RC500) ; //读MF2RC500的系列号并存贮它 M500PcdMfOutSelect (mfout) ;For (count = 0 ;count < 100 ;count + + ) {status1 = M500PiccRequest ( PICC-REQALL ,tt1) ; //发送请求代码给卡,并等待应答if (status1 = = MI-OK)status1 = M500PiccAnticoll (0 , cardserialno) ; //读卡的系列号if (status1 = = MI-OK)status1 = M500PiccSelect (cardserialno ,sak1) ; //选择一指定的卡if (status1 = = MI-OK)status1 = M500PiccAuth (PICCAUTHENT1A , cardserialno , 1 , 4) ; //鉴定卡if (status1 = = MI-OK)status1 = M500PiccRead(4 , blockdata) ; //读卡for ( counter2 = 0 ;counter2 < 16 ;counter2 + + )blockdata[counter2 ] = counter ;if (status1 = = MI-OK)status1 = M500PiccWrite ( 4 , blockdata) ; //写卡}}
1 Mifareone射频卡的结构和工作原理1.1 工作原理射频卡的电气部分由天线、1个高速(106KB波特率)的RF接口、1个控制单元和1个8K位EEPROM组成。其工作原理如下:读写器向射频卡发一组固定频率的电磁波,卡片内有1个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有1个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可作为电源为其他电路提供工作电压,将卡内数据发射出去或接收读写器的数据。1.2 结构和组成每张卡有唯一的32位序列号,其工作频率为13.56MHz,存储量为1KB,分为16个扇区,每扇区一组密码,各扇区的存储区域相互独立,每区可作为不同用途(第0区一般不用),实现一卡多用。Mifare卡可擦写10万次以上,其密码验证机制严密,可保证存储存信息的安全可靠;同时该卡具有防冲突机制,可支持多卡同时操作。Mifareone卡有16个扇区,每个扇区又分为4块(块0、块1、块2和块3),每块16个字节,以块为存取单位。除第0扇区的块0(即绝对地址0块)已经固化,用于存放厂商代码,不可更改之外,其余每个扇区的块0、块1、块2为数据块,可用于存贮数据,块3为控制块,包括密码A(6字节)、存取控制(4字节)和密码B(6字节),其结构如图1所示。
图1Mifareone卡内部结构Mifareone卡每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制,存取控制决定各块的读写权限与密码验证。16扇区中的每块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的。2 系统硬件设计硬件主要包括MCU电路模块、基于RC500的基站模块、天线模块电路、通信接口模块、LED状态显示和蜂鸣器报警电路,系统原理图见图2。2.1 MCU部分单片机选用低功耗、高性能和支持ISP(in-systemprogrammable)功能的CMOS
8位单片机 AT89S52,该单片机与MCS-51系列兼容,同时片内带有防死锁的WATCHDOG,确保系统稳定运行。MCU单元的复位电路选用芯片X5045,带SPI接口的内部FLASH,能存储该读写模块的配置信息与模块ID.
图2MF-RC500读写模块原理图2.2 基站部分系统的基站单元采用PHILIPS公司的MF-RC500芯片。MF-RC500是与射频IC卡实现无线通信的核心部件,也是读写器读写Mifare卡的关键接口芯片,该芯片为目前用于13.56MHz频段非接触通信的主流读卡IC.MF-RC500芯片采用先进的调制和解调技术,支持13.56MHz频段所有被动非接触式通信方式和协议,并支持ISO14443A中所有的层。RC500芯片内的发送器部分在不增加外接有源电路时可直接驱动的天线操作距离为100mm,接收器部分则提供一个稳健可靠的解调/解码电路,用于ISO14443A兼容的应答信号。RC500芯片的基带部分包括ISO14443A帧处理、CRC校验和快速CRYPTO1加密算法,同时该芯片提供的并行接口可直接与8位微处理器连接,给读卡器/终端的设计提供了极大的灵活性。2.3 天线部分天线设计中,最重要的是计算出天线线圈的电感值,从而确定天线旁路电容和电阻值。对天线线圈电感量一般采用经验公式进行估算,假定天线设计成常用的环形或矩形,则
式中:I1为导体环一圈的长度;D1为导线的直径或者PCB导体的宽度;K为天线形状因素(对环形天线K=1.07,对矩形天线K=1.47);N1为圈数。2.4 通信部分为了使所设计的射频卡读写模块能方便地嵌入到各种应用系统中(如门禁、公交收费、考勤),该读写模块可通过3种方式通信:RS232、TTL串口和自定义两线制通信模式。通信方式的选择,可在模块中通过跳线来实现。如图2所示,当连接跳线1时,可选择的通信方式为TTL电平串口和二线制通信方式。当采用TTL电平串口方式时,读写模块的串口与外面应用系统串口直接相连;而当采用二线制通信方式时,读写模块内单片机的串口当作普通I/O口使用,方便与应用系统I/O口连接,以实现二线制通信方式,该通信模式主要用于外接应用系统串口被占用的情况。在连接跳线2时,所选择的是RS232串口通信方式,此时,读写模块可直接与PC通信,电路中MAX232芯片的作用是实现RS232电平到TTL电平之间的转换。3系统软件设计系统软件主要分为2个模块:卡操作模块与接口通信模块。卡操作模块主要包括卡识别、卡选择、读/写卡、修改密码、增/减值、卡激活和卡休眠等;接口通信模块主要完成接收外部指令并输出指令结果,在系统的通信软件设计中采用了两次握手的通信协议,以保证通信的可靠和有效。3.1卡操作模块软件设计
图3为基本卡操作流程图复位应答(Answertorequest):M1射频卡的通讯协议和通讯波特率预先定义好,当有卡片进入读写器的操作范围时,读写器以特定的协议与它通讯,从而确定该卡是否为M1射频卡,即验证卡片的卡型。防冲突机制(AnticollisionLoop):当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的则处于空闲模式,等待下一次选卡,该过程会返回被选卡的序列号。选择卡片(SelectTag):选择被选中的卡的序列号,并同时返回卡的容量代码。3次互相确认(3PassAuthentication):选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验,在3次相互认证之后就可以通过加密流进行通讯。为实现基于RC500芯片的IC卡操作的基本操作,需要对RC500芯片内部64个字节的寄存器进行复杂的配置,并对90个寄存器标志位进行分析和判断。为方便用户对IC卡产品的开发应用,该读/写模块设计对用户屏蔽了复杂的RC500的编程和配置,用户的应用接口是3类简单的高级读/写命令,用户通过这些简单的命令操作该读写模块,容易实现对卡的操作。3类读写操作命令包括:模块操作命令、基础命令集、高级命令。模块操作命令集提供对模块本身的操作,如模块初始化、读取模块设备号、读取模块控制软件版本号、控制模块指示灯及蜂鸣器动作。基础命令集提供了对Mifare卡的最基本底层读写和控制操作,如卡呼叫、读取卡片序列号、卡激活、卡认证、读/写卡数据块、加电子钱包、减电子钱包和卡睡眠。高级命令是基础命令的集成,它是为方便用户系统使用特别提供的。用高级命令可极大地提高用户系统的开发速度。该类命令包括读卡类型、读卡序列号、密码认证方式、加载密码A、加载密码B、修改卡片密码、读/写数据块、读/写电子钱包内容和加/减电子钱包内容。以读卡为例说明所提供指令的基本操作格式,该命令用于读取某序列号的卡片中的1个数据块中的数据,指令格式如下:
3.2 通信接口及通信协议的软件设计目前可以实现各种嵌入应用模块的接口技术很多,如I2C总线和串口通信等。该读写模块设计除提供基本的串口通信方式外,还包括一种不占用应用系统串口资源的二线制通信方式。实际应用证明:这种自定义的二线制通信方式占用系统资源少,通信快速可靠,可应用于应用系统中串口已被占用的情况下。3.2.1 线制通信模式使用二线制通信,用户可以利用应用系统中MCU的任意2根I/O线与该读/写模块进行通信,将2条通信线分别定义为时钟线SCK和数据线SDA,在通信过程中,用户设备为主控方。在通信空闲时,主控方将SCK和SDA置成高电平;通信开始时,主控方将SDA置低,先发送起始位,接着发送8位数据,最后发送停止位,数据在SCK的下降沿被发送;读/写模块在通信过程中始终查询SDA的状态,若检测到低电平,则开始接收数据。主控方发送完毕后,将SCK和SDA上拉成高电平。在发送起始位时,SCK的低电平宽度为55μs,在发送其他位时,时钟低电平宽度为16μs,高电平宽度典型值为40μs,模块和应用系统通信的典型时序见图4,能数说明见表1。
图4模块通信时序图
3.2.2 两次握手通信协议应用系统和该射频卡读/写模块的通信可采用标准RS232或自定义二线制通信模式,系统设计为该2种通信模式设计了基于两次握手的通信协议,该协议简单,可靠性高。假定A代表主控板或应用系统,B代表读/写模块,通讯字符为16进制,图5给出了设计的基于两次握手通信协议流程,其关键点描述如下:(1)A方与B方通过握手字符进行连接,在发送命令和接收数据时设计有两次握手。第1次的握手字符分别是23H和45H,即A方在发送命令序列前,先发送23H;B方接收到23H后对A方应答45H,A方接收到45H认为第一次握手成功,然后给B方发送命令序列;第二次的握手字符分别为67H和89H,即B方接收完A方的命令序列并进行相应的处理,将结果数据发送给A方前,B方先发送67H,A方接收到67H后给B方回应的89H,B方接收到89H认为是第2次握手成功,然后给A方发送数据序列。(2)A方发送的命令序列的格式为
其中:命令块长度等于命令块中字节的个数;校验码A是命令码、命令块长度和命令块中的所有字节进行异或而生成的校验码。(3)B方发送的数据序列的格式为
其中:数据块长等于数据块中字节的个数,校验码B是返回码、数据块长度和数据块中的所有字节进行异或而生成的校验码。
图5基于二次握手的通信协议流程4 结束语介绍了一种基于PHILIPS公司RC500芯片的通用射频卡读/写模块,该模块的主要特点如下:(1)可以通过3种通信方式,包括二线通信模式和应用系统接口,方便嵌入到应用系统中;(2)该模块为用户提供了简单高级读/写指令,极大地简化了应用系统对射频卡的操作;(3)应用系统和读/写模块的通信是基于二次握手的通信协议,保证了通信可靠性。通用读/写模块设计完成后,已成功用于多个应用系统中,包括某移动基站门禁监控系统中,实际应用表明:该读写模块具有响应速度快、使用简便、读卡距离远和通信稳定可靠的显著特点。
转载自:http://www.21ic.com/app/rf/200504/7061.htm
基于MF RC500的射频识别读写器设计
摘要:主要介绍一种基于Philips公司的MF RC500的射频识别读写器的设计:首先介绍系统的组成以及MF RC500的特性,接着给出天线的设计规范,最后给出MCU 89C52与MF RC500的接口原理图、对Mifare卡操作流程以及及读卡的程序。该系统选用Mifare卡作为系统的应答器(PICC),电路稳定,系统运行正常。
关键词:射频识别技术 应答器PICC 读写器PCD Mifare卡 MF RC500
与传统的接触式IC卡、磁卡相比较,利用射频识别技术(radio frequncy identification)开发的非接触式IC识别器,在系统寿命、防监听、防解密等性能上具有很大的优势。利用MCU 89C52、MF RC500、、Mifare卡等构建非接触式IC读写器,并在该读写器基础上能很容易地开发出适用于各方面的自动识别系统。
1 MF RC500介绍
MF RC500是应用于13.56MHz非接触式通信中高集成读卡IC系列中的一员。该读卡IC系列利用先进的调制和解调概念,完全集成了在13.56MHz下所有类型的被动非接触式通信方式和协议。MF RC500支持ISO14443A所有的层,内部的发送器部分不需要增加有源电路就能够直接驱动近操作距离的天线(可达100mm);接收器部分提供一个坚固而有效的解调和解码电路,用于ISO14443兼容的应答器信号;数字部分处理ISO14443A帧和错误检测(奇偶&CRC)。此外,它还支持快速CRYPTO1加密算法,用于验证Mifare系列产品。方便的并行接口可直接连接到任何8位微处理器,给读卡器/终端的设计提供了极大的灵活性。
2 系统组成
从图1可以看出,系统主要由MCU、时钟芯片、MFRC500、液晶屏、看门狗以及485通信模块组成。系统的工作方式主要是,先由MCU控制MF RC500驱动天线对Mifare卡,也就是应答器(PICC),进行读写操作。然后,根据所得的数据对其它接口器件,如液晶屏、EEPROM、时钟芯片等,进行响应操作。最后,与PC机之间进行通信,把数据传给上位机。
MCU采用89C52,是因为89C52开发简单,运行稳定。EEPROM采用24C256,用于存储系统的数据。24C256是串口操作方式,是一种性价比较高的存储芯片。液晶屏采用带字库的ST7920,是因为它是并口操作方式的,操作方便。时钟芯片采用DS12C887。DS12C887是Dallas公司生产的新型产品,内置电池,可连续使用10年,可以方便记录事件的发生时间。为了防止系统“死机”,使用x5045作为看门狗。X5045是串口工作方式,内置EEPROM,可用来存储一些系统参数。与上位机的通信采用RS-485通信模块,通信距离可以达到1000m左右。
整个系统由24V电源供电,再由稳压模块7805稳压成5V的电源。由于7805的工作热量很高,故在7805上安置一个散热片。
3 系统工作原理
系统数据存储在无源Mifare卡,也就是PICC中。从图2可以看出,PCD的主要任务是传输能量给PICC,并建立与之的通信。PICC是由一个电子数据作载体,通常由单个微型芯片以及用作天线的大面积线圈等组成;而PCD产生高频的强电磁场,这种磁场穿过线圈横截面和线圈周围的空间。因为MF RC500提供的频率为13.56MHz,所以其波长比PCD的天线和PICC之间的距离大好多倍,可以把PICC到天线之间的电磁场当作简单的交变磁场来对待。PCD天线线圈发射磁场的一小部分磁力线穿过PICC的天线线圈,接着PICC的天线线圈和电容器C构成振荡回路,调频到PCD的发射频率。回路的谐振使PICC线圈的电压达到最大值,将其整流后作为数据载体(微型芯片)的电源。PICC启动之后
,可与PCD之间进行数据通信。
如上所述可以看出,PCD的性能与天线的参数有着直接的关系。在对天线的性能进行优化之后,PCD的读卡距离可以达到10cm。
4 PCD的天线设计
由于MF RC500的频率是13.56MHz,属于短波段,因此可以采用小环天线。小环天线有方型、圆形、椭圆型、三角型等,本系统采用方型天线。天线的最大几何尺寸同工作波长之间没有一个严格的界限,一般定义为:
L/λ≤1/(2π) (1)
式(1)中,L是天线的最大尺寸,λ是工作波长。对于13.6MHz的系统来说,天线的最大尺寸在50cm左右。
在天线设计中,品质因数Q是一个非常重要的参数。对于电感耦合式射频识别系统的PCD天线来说,较高品质因数的值会使天线线圈中的电流强度大些,由此改善对PICC的功率传送。品质因数的计算公式为:
Q=(2πf0·Lcoil)/Rcoil (2)
式(2)中的f0是工作频率,Lcoil是天线的尺寸,Rcoil是天线的半径。通过品质因数可以很容易计算出天线的带宽:
B=f0/Q (3)
从式(3)中可以看出,天线的传输带宽与品质因数成反比关系。因此,过高的品质因数会导致带宽缩小。从而减弱PCD的调制边带,会导致PCD无法与卡通信。一般系统的最佳品质因数为10~30,最大值不能超过60。
5 MF RC500与MCU 89C52的部分接口电路
图3为MF RC500与MCU的接口原理。由图3可以看出,本系统采用中断(INT1)工作模式,即MCU利用MFRC500提供中断信息对其进行控制。另外,根据系统的需要,可以采用查询方式对MF RC500进行操作。
6 对Mifarel卡操作流程
整个系统的工作由对Mifare卡操作和系统后台处理两大部分组成。由于篇幅有限,本文只介绍对Mifare卡操作流程。Mifare卡的操作可以分为以下几项。
(1)复位请求
当一张Mifare卡片处在卡处读写器的天线的工作范围之内时,程序员控制读写器向卡片发出REQUEST all(或REQUEST std)命令。卡片的ATR将启动,将卡片Block 0中的卡片类型(TagType)号共2个字节传送给读写器,建立卡片与读写器的第一步通信联络。
如果不进行得位请求操作,读写器对卡片的其它操作将不会进行。
(2)反碰撞操作
如果有多张Mifare卡片处在卡片读写器的天线的工作范围之内时,PCD将首先与每一张卡片进行通信,取得每一张卡片的系列号。由于每一张Mifare卡片都具有其唯一的序列号,决不会相同,因此PCD根据卡片的序列号来保证一次只对一张卡操作。该操作PCD得到PICC的返回值为卡的序列号。
(3)卡选择操作
完成了上述二个步骤之后,PCD必须对卡片进行选择操作。执行操作后,返回卡上的SIZE字节。
(4)认证操作
经过上述三个步骤,在确认已经选择了一张卡片时,PCD在对卡进行读写操作之前,必须对卡片上已经设置的密码进行认证。如果匹配,才允许进一步的读写操作。
(5)读写操作
对卡的最后操作是读、写、增值、减值、存储和传送等操作。
7 读卡程序
根据上面的流程,采用基于Keil C的C语言进行编程,程序如下:
char M500Reset(void)
{ char status;
RC500RST=0; //RC500在RSTPD脚由高变低的时候复位
delay_1ms(25); //注意延时的长度,本系统的晶振频率是11.0592MHz
RC500RST=1;
delay_50us(200);
RC500RST=0;
delay_50us(50);
.
.
.
return status;
}
char M500Config(void)//对RC500的寄存器进行初始化
char M500PiccCommonRequest(unsigned char req_code,unsigned char *atq)
图3 //RC500发送请求。req_code是请求模式,一共有request all和Request std两种模式。Request all指令是非连续性的读卡指令,只读一次。但有个例外,当某一次Request all指令读卡片失败时,例如,卡片没能通过密码认证或其它原因而出错时,Request all指令将连续地读卡,直到读卡成功才进入非连续性的读卡模式。Request std指令的使用和Request all指令刚巧相反。Request
std指令是连续性的读卡指令。当某一张卡片在MCM之天线的有效的工作范围(距离)内,Request std指令在成功地读取这一张卡片之后,进入MCM对卡片的其它操作。如果其它操作完成之后 ,程序员又将MCM进入Request std指令操作,则Request std指令将连续地再次进行读卡操作,而不管这些片卡是否被拿卡。只要有一张卡片进入MCM之天线的有效的工作范围(范围)内,Request std指令将始终连续地再次进行读卡操作。对于Mifare1卡,该函数反回值为0004H。
char M500PiccCascAnticoll(unsigned char bcnt,unsigned
char *snr) //反碰撞函数,得到一张卡的序列号
//存入snr中
char M500PiccCascSelect(unsigned char *snr,unsigned char *sak) //选中snr指定的卡,对于Mifarel卡返回值为0008H,值存入sak中
char M500PiccAuthKey(unsigned char auth_mode,unsigned char *snr,unsigned char *keys,unsigned char block)
//这是三轮认证函数,整个过程包括:先将所要访问的区密码加密(如区0的初始密码为6个FFH),再将加密后的密码通过Loadkey存入MF RC500的Key缓存中,接着进行认证。
Char M500PiccRead(unsigned char addr,unsigned char *_data) //最后读卡,读到的数据存入_data中
结语
本文主要介绍一种基于MF RC500的射频识别读写器的设计方法。试验证明系统运行稳定,在此读写器的基础上,只要稍加屐就能开发成不同的射频识别应用系统,如考勤系统、门禁 系统、公交车收费系统等。