1、 射频卡公交收费机设计(三)射频卡公交收费机设计(三)MIFARE 1MIFARE 1卡读写软件卡读写软件设计设计课 程 目 标q 非接触式非接触式ICIC卡读写控制卡读写控制 q MIFARE 1MIFARE 1卡读写控制功能的实现卡读写控制功能的实现项目开发射频卡公交收费系统q系统需求分析:1.具备小额电子钱包功能,定额方式收费2.操作方便快捷3.工作距离50cm4.具备显示余额、异常报警(非法卡或余额不足)5.可将当班收款额上传总站数据库6.公交公司可调整定额额度7.卡遗失可挂失8.抗干扰能力强项目设计之三软件设计q读写器与读写器与 M1M1卡交换数据的过程:卡交换数据的过程:1.读写器
2、MCU(微控制器)发送指令发送指令给MIFARE读写模块;2.MIFARE读写模块执行指令并将其转换为射频信号发送射频信号发送给卡;3.卡接收到来自MIFARE读写模块的指令后,按指令完成其内部的各种处理,并回送应答回送应答信号/数据给MIFARE读写模块;4.MIFARE读写模块接收卡回送的射频信号并将其转换为数字信号输出给MCU,MCU接收接收来自MIFARE读写模块的卡应答卡应答。MIFARE卡的读写操作步骤 q 激活MCMq MCM软复位q 向MCM下载密码(LOAD KEY),校验传输密码正确后可向MCM的KEY-RAM写入用户自己设定的密码,以上操作与卡无关。q 请求应答(ANSW
3、ER TO REQUEST):寻卡 q 防冲突(ANTICOLLISION):选择唯一一张卡 q 选择标记(SELECT):激活所选择的卡 q 认证(AUTHENTICATION):安全性q 读写操作(读、写、加值、减值):交换数据(READ/WRITE/INCREAMENT/DECREMENT)q 停止(HALT):置卡为停止模式,防止重复操作。每一个指令的执行包含以下独立的步骤,必须由程序员按时序编程来执行这些步骤才能完成相应的指令功能:q 初始化,设置各寄存器。q 送指令码到FIFOData,由MCM发送指令。q 检查是否接收完来自卡的应答,否则返回无卡(应答)错误标志;是则进入下一步q
4、 读入错误标志(寄存器0X0A),若有标志被设置,则返回出错标志;若没有标志被设置,表示接收正确,将进行下一步操作q 读入FIFOData字节数(寄存器0X04),出错则返回字节数错误标志;否则进入下一步操作q MCU从FIFOData 读出MCM接收到的应答或数据,返回操作正确标志。实训 非接触式IC卡读写控制程序设计与调试 第一阶段:第一阶段:实现1张卡的公交收费扣款。用WRITE函数编写扣款程序,调试程序,查看操作流程中各操作步骤的卡应答。第二阶段:第二阶段:实现2张及以上卡同时扣费。防冲突与防止重复扣款的编程实现与调试。第三阶段:第三阶段:用INCREMENT/DECREMENT函数编
5、写充值/扣款程序。调试程序,查看操作流程中各操作步骤的卡应答。void main(void)uchar Status;uchar xdata tmp16;SYSCLK_Init();/Initialize Oscillator PORT_Init();/Initialize Port I/O UART0_Init();/UART init SPI0_Init();/SPI init Init_RC632();/MCM initMIFARE卡读写范例程序 while(1)tmpMODE=RF_CMD_REQUEST_STD;/设置防冲突命令码 Status=Request(tmpMODE);/R
6、equest standard请求应答,寻卡/14443 A卡返回 tagtype2=0 x04,0 x00 if(Status=MI_OK)Status=AntiColl();/Anticollision防冲突,在多张卡中选择一张/卡返回UID5 if(Status=RC632_OK)Status=Select_Card();/Select application选择应用,激活选中的卡/卡返回SIZE字节cardtype=0 x08/0 x88/0 x18/0 x04/0 x28/0 x53 Answer to Request(请求应答)操作 q Request 指令功能:通知读写模块在天线
7、有效的工作范围(距离)内寻找MIFARE 1卡。q 函数:uchar Request(uchar mode)/request code(命令码):RF_CMD_REQUEST_ALL=0 x52 RF_CMD_REQUEST_STD=0 x26/answer to request:卡类型号tagtype(2个字节)14443 A卡的tagtype2=0 x04,0 x00/返回值:正常则返回0(MI_OK),否则返回错误代码q 编程调用:tmpMODE=RF_CMD_REQUEST_STD;Status=Request(tmpMODE);初始化与防冲突(AntiCollion)q如果有2张或2
8、张以上的IC卡进入读写器的工作范围,称之为冲突(或碰撞Collion),此时就需要解决如何对多张IC卡逐一处理的问题防冲突 AntiCollion。q防冲突方案:位帧防冲突(Bit AntiCollision)动态时隙-ALOHA法(Slotted-ALOHA法)qMifare防冲突方案:利用每张卡全球唯一的SN实现二进制树状搜索防冲突算法AntiCollision 防冲突q 如果有多于一张的Mifare 1卡处在MCM天线的有效工作范围(距离)内,则发生了冲突。AntiCollision操作使MCM能在多张Mifare 1卡中选择某一张卡。q AntiCollision操作由一个AntiCo
9、llision Loop(防冲突循环,内部处理)来实现。MCM发送AntiCollision命令(93H+20H),每张天线范围内的MIFARE 1卡接收AntiCollision命令后,都将回送自己的SN作为应答。q 由于每张卡的SN各不相同,MCM接收到的信息(即SN)至少有1位即是0又是1(即该位的前、后半部都有负载波调制),防冲突循环找到第1个冲突位将其置1(排除该位为0的卡),然后查第2个,依次排除,最后不再有冲突的SN即为最后读取的SN。防冲突(AntiCollision)操作q Anticollision命令功能:启动防冲突循环,卡收到命令后回送SN作为应答,防冲突循环将在收到的
10、所有SN中选择某一个SN作为应答。q 函数:uchar AntiColl(void);返回状态q 编程if(Status=MI_OK)Status=AntiColl();/Anticollision 选择应用(Select)操作q Select命令功能:将选中的SN发送给卡,与之相同SN的卡被选择,进入ACTIVE状态,而其他卡留在IDLE状态。q 函数 uchar Select_Card(void)返回状态q 编程 if(Status=MI_OK)Status=uchar Select_Card();if(Status=RC632_OK)Buffer4=1;/Buffer4为要认证的扇区号0
11、15,扇区1Buffer3=0;/Buffer3为要认证的密码类型,0-密码A,非0-密码B Status=Authentication1(UID,Buffer4,Buffer3);/密码认证 blkaddr=4;/块地址063,扇区1块0if(Status=RC632_OK)Status=MIF_Read(&blockdata,blkaddr);/读块数据blockdata0=blockdata0-3;/在块的第0个字节修改数据if(Status=RC632_OK)Status=MIF_Write(&blockdata,blkaddr);/写入修改后的块数据 if(Status=RC632_
12、OK)Status=MIF_Halt();/暂停 认证(Authentication)操作 q Authentication功能:MIFARE读写模块中设有专用的密码存储器,用于存储3个密码集KEYSET0,KEYSET1,KEYSET2,每一个KEYSET又包含了各个扇区的KEY A 及KEY B。Authentication操作就是将密码存储器中的密码与卡中对应的密码进行三次相互认证。q 函数uchar Authentication1(uchar*UID,uchar SecNR,uchar mode)/返回值:卡应答以AE位给出;AE=1/0,密码出错/正确,未能通过/通过认证;STATU
13、S=1/0q 编程:if(Status=RC6322_OK)Buffer4=1;/Buffer4为要认证的扇区号015,扇区1 Buffer3=0;/Buffer3为要认证的密码类型,0-密码A,非0-密码B Status=Authentication1(UID,Buffer4,Buffer3);/密码认证 READ/WRITE操作q READ/WRITE均需整块操作。q READ:uchar MIF_Read(uchar xdata*buff,uchar Block_Adr)q WRITE:uchar MIF_Write(uchar xdata*buff,uchar Block_Adr)/x
14、data*buff:块数据/Block_Adr:块地址063调用:blkaddr=4;/块地址063,扇区1块0if(Status=RC632_OK)Status=MIF_Read(&blockdata,blkaddr);/读块数据blockdata0=blockdata0-3;/在块的第0个字节修改数据if(Status=RC632_OK)Status=MIF_Write(&blockdata,blkaddr/写入修改后的块数据 HALT操作qset card into “HALT-mode”,to prevent the MCM from selecting one card severa
15、l times.q函数 uchar MIF_Halt(void)第一阶段实训步骤q 打开并运行RF TYPEA工程,用RF应用软件读出并记录2张MIFARE1卡的TAGTYPE、SN、SIZE,在卡中某数据块(如扇区1块0)分别写入公交卡金额(模拟充值)。q 建立公交收费工程并编译运行,设置断点及观察窗,分别对1#、2#卡进行读写操作,查看并记录卡应答TAGTYPE、SN、SIZE、blockdata。故障现象:不能扣款,原因?1.查看authentication应答,若非MI_OK则密码认证未通过。原因:密码错误,密码块地址设置错误,该块被设置为不可写,该扇区被损坏2.能读不能写:该块被设置
16、为不可写,写块地址设置错误(设置到另一扇区中)第二阶段实训步骤q 将2张卡同时置入天线工作范围内,运行程序进行读写操作,查看应答,判断是否能完成逐一对2张卡扣费一次。q 故障现象:重复对其中一张卡扣费,而另一张未扣费,原因?qWith a“request std”instruction only cards which are not set into a“HALT-mode”will respond to this request,or it may be expanded to all cards in the field with a“request all”option.The fir
17、st option is needed to prevent the MCM from selecting one card several times.Difference between “request std”&“request all”第二阶段实训步骤q 故障现象:重复对其中一张卡扣费,而另一张未扣费,原因?1.未正确使用request std与halt函数对2.循环时重复复位MIFARE读写模块导致halt状态失效 第三阶段实训步骤q 打开并运行RF TYPEA工程,用RF应用软件对卡中某数据块(如扇区1块0)初始化为值块(模拟充值)。q 修改程序,用INCREMENT/DECRE
18、MENT实现充值/扣款在调试芯片中下载自行编写的上述程序,运行并查看并记录卡应答TAGTYPE、SN、SIZE、blockdata。Value Operate 值操作qMIFARE卡专门为公交/地铁等行业的定额收费系统设有值操作命令,包括INCREAMENT/DECREAMENT/TRANSFER/RESTOREq对某块进行值操作的前提是该块已被初始化为“值块”(Value Block)并且Access Bits允许值操作。初始化“值块”的方法是用WRITE操作按规定的“值块”格式写入初始数据。Increment/Decrement/TransferqIncrement:adds the sp
19、ecified value to the memory valueqDecrement:subtracts the specified value from the memory valueqTransfer:Each Increment or Decrement instruction manipulating a standard value block has to be followed by a Transfer intruction which actually stores the calculated result in the card memory.Until then,t
20、he result is kept in an internal value buffer resgister.Increment/Decrement/Transferq函数 uchar MIF_Increment(uchar xdata*buff,uchar idata Block_Adr);/加值uchar MIF_Decrement(uchar xdata*buff,uchar Block_Adr);/减值uchar MIF_Restore(uchar Block_Adr);/重储uchar MIF_Transfer(uchar Block_Adr);/传送/xdata*buff:值数据/Block_Adr:0 63值块地址Q&Aq如何实现公交车分段收费?q如何实现公交卡挂失功能?q除了使用非接触式IC卡,还可以采用什么方式实现公交收费?
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。