MIFARE 1卡读写控制.ppt_第1页
MIFARE 1卡读写控制.ppt_第2页
MIFARE 1卡读写控制.ppt_第3页
MIFARE 1卡读写控制.ppt_第4页
MIFARE 1卡读写控制.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

IC卡公交收费机设计(三)MIFARE1卡读写软件设计,电子与信息工程学院,课程目标,非接触式IC卡读写控制MIFARE1卡读写控制功能的实现,项目开发IC卡公交收费系统,系统需求分析:具备小额电子钱包功能,定额方式收费操作方便快捷工作距离50cm具备显示余额、异常报警(非法卡或余额不足)可将当班收款额上传总站数据库公交公司可调整定额额度卡遗失可挂失抗干扰能力强,项目设计之三软件实现,读写器与M1卡交换数据的过程:1)由读写器MCU(微控制器)发送指令给MCM,2)MCM执行指令并将其转换为射频信号发送给卡;3)卡接收到来自MCM的指令后,按指令完成其内部的各种处理,并回送应答信号/数据给MCM;4)MCM接收卡回送的射频信号并将其转换为数字信号输出给MCU,读写器MCU读取MCM接收到的应答/数据,即可完成与M1卡的数据交换。,MCM基本通信指令集,MCM内核特殊寄存器,MIFARE卡的读写操作步骤,激活MCMMCM软复位向MCM下载密码(LOADKEY),校验传输密码正确后可向MCM的KEY-RAM写入用户自己设定的密码,以上操作与卡无关。请求应答(ANSWERTOREQUEST):寻卡防冲突(ANTICOLLISION):选择唯一一张卡选择标记(SELECT):激活所选择的卡认证(AUTHENTICATION):安全性读写操作(读、写、加值、减值):交换数据(READ/WRITE/INCREAMENT/DECREMENT)停止(HALT):置卡为停止模式,防止重复操作。,SOR/LOADKEY,REQUEST,ANTICOLLISION,READ/WRITE/INC/DEC,HALT,MIFARE卡操作步骤,AUTHENTICATION,SELECT,卡应答:TAGTYPE(2B),卡应答:SN(4B)+校验码(1B),卡应答:SIZE(1B),卡应答:AE位,指令时序,每个指令由7个基本步骤组成,必须按此时序编程才能完成该指令:(1)初始化,设置各寄存器,特别是BCNTS和BCNTR。(2)送指令码到DATA,由MCM发送指令。(3)设置TOC,MCM准备接收来自卡的应答或数据。(4)检查DV标志,查询数据接收是否完成。DV标志为”1”表明MCM与MIFARE卡片之间的传输已经完成,并且主处理机可能已经从MCM中收到数据,可以进行下一步操作。而DV=0表示数据接收尚未完成或未能接收到数据,则程序循环检测DV标志直至DV=1。有一种情况例外,既当定时器溢出时,无论接收是否完成DV都将被设置为1,同样将进行下一步操作。(5)清零TOC。(6)检查出错标志,若有标志被设置,则进行相应的出错处理,例如设置出错标志等,并返回主程序;若没有标志被设置,表示接收正确,将进行下一步操作(7)MCU从DATA读出MCM接收到的应答或数据。,AnswertoRequest(请求应答)指令,Request指令将通知MCM在天线有效的工作范围(距离)内寻找MIFARE1卡。命令码:26H或52H。卡收到该指令将回送卡类型号作为卡应答:TAGTYPE(2个字节),Witha“requeststd”(26H)instructiononlycardswhicharenotsetintoa“HALT-mode”willrespondtothisrequest,oritmaybeexpandedtoallcardsinthefieldwitha“requestall”(52H)option.ThefirstoptionisneededtopreventtheMCMfromselectingonecardseveraltimes.,Differencebetween“requeststd”SENDCODEMOVR0,#00HMOVXR0,AMOVA,#addr;SENDBLOCKADDRMOVR0,#00HMOVXR0,A,MOVA,#0AH;SETTOC=1msMOVR0,#06HMOVXR0,AD_wait_value:;读STACON,判断DV=1?MOVR0,#01HMOVXA,R0JNBACC.7,D_wait_valueMOVR6,AMOVA,#00H;清零TOCMOVR0,#06HMOVXR0,AMOVA,R6;出错判断JBACC.6,DEC_TE_ERRJBACC.3,DEC_BE_ERRAJMPDEC_CONTIDEC_TE_ERR:;NOTAGERRMOVB,#01HAJMPDEC_EXITDEC_BE_ERR:MOVB,#02HAJMPDEC_EXIT,DEC_CONTI:MOVR0,#00H;读入ACK/NAK,MOVXA,R0ANLA,#0BH;仅检查0,1,3位CJNEA,#00H,D_N1MOVB,#07H;NOTAUTHERR(应答为00000000)SJMPDEC_NEXTD_N1:CJNEA,#0AH,D_N2;收到ACK应答(00000101),表示可以DECSJMPDEC_NEXTD_N2:MOVB,#03H;其他错误应答(00000011),CODEERAJMPWRITE_EXIT,WRITE_NEXT:;开始写数据MOVA,#32;SENDBCNTS=32bits(4BVALUE)MOVR0,#03HMOVXR0,AMOVA,#04H;SENDBCNTR=4bits(ACK/NAK)MOVR0,#04HMOVXR0,AMOVR5,#4;送4B值MOVR0,#00HMOVR1,#D_BUFDEC_VALUE:MOVA,R1MOVXR0,AINCR1DJNZR5,DEC_VALUE,MOVA,#0AH;SETTOC=1msMOVR0,#06HMOVXR0,ADEC_end:;DV=1?MOVR0,#01HMOVXA,R0JNBACC.7,DEC_endMOVA,#00H;清零TOCMOVR0,#06HMOVXR0,AJudge_answer:MOVR0,#01H;出错判断MOVXA,R0JNBACC.6,DEC_error_TEMOVB,#00HDEC_ANSWER:;读入ACK/NAKMOVR0,#00HMOVXA,R0ANLA,#0FHCJNEA,#04H,D_ERR1;(00000100为VALUEOVERFLOW)MOVB,#0FEHSJMPDEC_EXITD_ERR1:MOVB,#0FFH;其他错误DEC_EXIT:RET,TRANSFER入口:块地址T_addr出口:ACK/NAKTRANS:NOPNOPMOVA,#10H;SENDBCNTS(16bits:命令码+块地址)MOVR0,#03HMOVXR0,AMOVA,#04H;SENDBCNTR(4bits:ACK/NAK)MOVR0,#04HMOVXR0,AMOVA,#0B0H;SENDCODEMOVR0,#00HMOVXR0,AMOVA,#T_addr;SENDBLOCKADDRMOVR0,#00HMOVXR0,A,MOVA,#10H;SETTOC=1.5msMOVR0,#06HMOVXR0,AT_end:;DV=1?MOVR0,#01HMOVXA,R0JNBACC.7,T_endMOVA,#00H;清零TOCMOVR0,#06HMOVXR0,AJudge_answer:;出错判断MOVR0,#01HMOVXA,R0JBACC.3,T_error_BEJBACC.6,T_error_PEMOVB,#00HAJMPNEXT_TRANST_error_BE:;出错处理MOVB,#03HSJMPNEXT_TRANST_error_PE:MOVB,#05HSJMPNEXT_TRANS,NEXT_TRANS:MOVA,#95D;SETTOC=9msMOVR0,#06HMOVXR0,AT_Toc_end:;DV=1?(EEPROM写入结束否?)MOVR0,#01HMOVXA,R0JNBACC.7,T_Toc_endMOVR6,AMOVA,#00H;CLEARTOCMOVR0,#06HMOVXR0,AMOVA,R6;出错判断JBACC.6,T_TAG_ERRJBACC.3,T_BIT_ERRMOVB,00HSJMPNEXT_ANSWERT_TAG_ERR:;出错处理MOVB,#09HAJMPT_EXITT_BIT_ERR:MOVB,#0BHAJMPT_EXIT,NEXT_ANSWER:;读入ACK/NAKMOVR0,#00HMOVXA,R0ANLA,#0FHCJNEA,#0AH,T_ERR1;(00000101为ACK,TRANSFEROK)MOVB,#00HSJMPT_EXITT_ERR1:CJNEA,#04H,T_ERR2;(00000100为NAK)MOVB,#02HSJMPT_EXITT_ERR2:CJNEA,#05H,WRITE_EXIT;其他错误MOVB,#04HT_EXIT:RET,实训6非接触式IC卡的读写控制,实训程序将读写器MCU片内RAM中的16个数据写入卡的一个数据块,然后将该数据块中的数据读出并存入读写器MCU的片内RAM中。MCU采用查询方式与MCM通信。实训程序说明:mode选择密码集KEYSET0、1、2及密码A、Bsector_nr认证扇区号(015)R_H_BUF读入数据缓冲区首地址R_E_BUF读入数据暂存区首地址W_H_BUF写入数据区首地址R_addr被读取的块地址(063)W_addr被写入的块地址(063),实训步骤,用非接触式IC卡读写软件MWRF向MCM中下载密码,读出并记录MIFARE1卡的TAGTYPE、SN、SIZE,读出并记录卡中某数据块(如扇区1块0)的数据。用镊子取出非接触式IC卡开发板上的MCU芯片,将仿真头插入MCU的IC座。编译实训程序,设置断点。打开片内RAM及寄存器窗口,在写数据区(首地址为10H的16个单元)设置要写入卡中的数据。天线范围内无卡时运行程序,记录程序停在断点处的相关数据。说明是否能正确读/写卡,如不能,根据现象定位故障点。将卡置入天线范围内,运行程序,记录程序停在断点处的相关数据。说明是否能正确读/写卡,如不能,根据现象定位故障点。,实训程序:modeEQU00H;设置KEYSET=KEYSET0,使用密码Asector_nrEQU01H;设置认证扇区为扇区1R_H_BUFEQU40H;读入数据缓冲区R_E_BUFEQU50H;读入数据暂存区W_H_BUFEQU10H;写入数据区R_addrEQU04H;被读取的块地址(扇区1的块0)W_addrEQu05H;被写入的块地址(扇区1的块1),ORG0000HAJMPMAINORG0050HMAIN:MOVSP,#60H;重新设置堆栈CLREA;关闭所有中断CLRP3.4SETBP3.3;关闭MCM200NOPNOPCLRP3.3;激活MCM200NOPLCALLD500MSSTART:NOPNOPMOVA,#80H;SOR软件复位MOVR0,#01HMOVXR0,ANOPNOPLCALLD500MSCLRP3.3;再次激活MCM200CLRP3.3,MOVR2,#01H;选择REQUESTALL指令LCALLREQUEST;请求响应REQUESTSETBp3.4;断点,查看TAGTYPE(20H)(21H)LCALLANTICOLLISION;防冲突ANTICOLLISIONSETBP3.4;断点,查看SN(

温馨提示

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

评论

0/150

提交评论