版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#5MFRC522的功能实现为了通过编程实现MFRC522的读写卡功能,我们的第一步就是把要用的命令字和地址进行定义。我们通过查找芯片手册,得到详尽的MFRC522命令字、MifareOne卡片命令字以及MFRC522各寄存器的功能与定义。接下来,打开KeiluVision4并在工程中添加rc522.h文件,用这个文件定义所有射频识别过程中可能用到的命令字与地址:IProiErt.•需IINCLUDt.H1^].jnain.cLSfllO&H角ZIJMO.h•JRCJJJ.HH-aTarget1白令SourreGroup1IProiErt.•需IINCLUDt.H1^].jnain.cLSfllO&H角ZIJMO.h•JRCJJJ.HH-aTarget1白令SourreGroup1•生STASTUP.A51£■国byt由“1]main.t±-固^532.:<indud^.hJksKK.h:Tc522.b:■JZlWOh•』main.h://///////////////////////Eifai=_Cn-卡F命令字D[H[.tifndEf_r-=£22_h_DQ2idelire_rc522_h_D03—一J/EFS22的令字toeiiz:=ECD_ID^EGsDD"取消当imtoefire凯fdJTHEH:OxDE"基证童铝iderireECDjrc;ErTSCXDE*defirePC3_TFA5Sin7tderiL^PC”THAN5CEI吒OKOC“宣蚩井按收数拒*defir:E凯2)[EE:託理眩5EOxOFtdellilEPCDCALCCECOKD3//CRC计篡ideiir=PIC2_KE-3IDL0x26"寻超区由亲进人茹眠眞tdeiizePICC~EE^aiI3x52人寻瑶玉内全凱卡ideriLEEiccj^moLLL0X93MelirePICC^TTICOLI2氷95卄新冲撞idem?pi(x_auTHEFnia0K6d"垦证n密窑Meii-ePICE3UTHER71B0x51"呈证£密罚ideluzePIOZREAECK3DMelireFICC^KITEQxADX写块idefirBPICt:"DE2BEkZ?n-OkCO"碱Idefiz=PltE^EHCREEZnOxCLA■充洼idelirePICC~R£SrCRZ.•.讦戢揺兰瓷丰瓷iriFfirrPTrrTRSiWHEW通过上图大家可以看到,整个522.h文件中基本全都是#define我们只需要将芯片手册中的信息仔细录入,并写好注释。而且,为了便于管理,rc522.h里的语句被我分成了四类,分别是:①MFRC522命令字②MifareOne卡片命令字③MFRC522寄存器④MF522通讯错误的处理代码接下来,我们就要开始编程实现MFRC522的一些具体功能了。在工程中新建rc522.c文件,在该文件中编写MFRC5222读写卡过程中需要的指令。RC522完整的读写卡流程框图:
RC522完整的读写卡流程框图:N是否有卡YNYN扇区改变?Y能否通过密码验证防冲撞,选卡读卡或写卡寻卡N是否有卡YNYN扇区改变?Y能否通过密码验证防冲撞,选卡读卡或写卡寻卡根据上面的读写卡流程框图,我们按照每个框的内容编写与之相对应的程序。•寻卡请求读写卡模块向外发射激励信号,一旦有Mifare卡进入读写器天线工作范围,读写模块发送命令°Mifare卡收到命令后会将卡上的储存单元中的卡片类型号(TagType)信息即2个字节数据发给读写器。从而建立Mifare卡与RC522通信的第一步。寻卡请求函数:charPcdRequest(unsignedcharreq_code,unsignedchar*pTagType)说明:req_code[IN]:寻卡方式0x52=寻感应区内所有符合14443A标准的卡0x26=寻未进入休眠状态的卡pTagType[OUT]:卡片类型代码0x4400=Mifare_UltraLight0x0400=Mifare_One(S50)0x0200=Mifare_One(S70)0x0800=Mifare_Pro(X)0x4403=Mifare_DESFire操作成功返回值为0即完成整个的寻卡请求。•防冲撞+选定Mifare卡由于RC522在同一时间内只能与一个Mifare卡进行通信,因此在完成寻卡请求之后,为了防止有多个Mifare卡同时处于读写卡模块天线工作范围而造成冲撞,需进行防冲撞操作,即读写卡模块与一张Mifare卡建立联络,取得其全球唯一的序列号。防冲撞函数:charPcdAnticoll(unsignedchar*pSnr)说明:pSnr[OUT]:用于卡片序列号,4字节操作成功时函数返回值为0.在获得Mifare卡的序列号之后,我们需要做的就是对指定的序列号的Mifare卡进行选定,只有被选中的卡才能与RC522建立进一步的通信,其它的Mifare卡将全部回到初始状态。选定Mifar卡函数:charPcdSelect(unsignedchar*pSnr)说明:pSnr[IN]:之前防冲撞操作中获得的Mifare卡序列号,4字节操作成功时函数返回值为0.•验证Mifare密码为了访问Mifare卡中的某个扇区里存放的数据,必须进行密码的验证。用户首先要通过编程将已经设定好的密钥存入RC522内部的密钥存储区中,然后再比对Mifare卡中存放的密钥与RC522密钥存储区中的密钥是否相同,只有确认二者相同之后才可以对当前Mifare卡的这个扇区进行下一步操作。密码验证函数:charPcdAuthState(unsignedcharauth_mode,unsignedcharaddr,unsignedchar*pKey,unsignedchar*pSnr)说明:auth_mode[IN]:密码验证模式0x60=验证A密钥0x61=验证B密钥addr[IN]:块地址pKey[IN]:密码pSnr[IN]:卡片序列号,4字节操作正确时返回0.•读操作完成了密码认证,我们就可以从Mifare卡中的扇区中读出数据,每次读出数据的大小为16字节。读操作函数:charPcdRead(unsignedcharaddr,unsignedchar*pData)说明:addr[IN]:块地址,取值范围0—63pData[OUT]:从Mifare卡中读出的数据,16字节操作成功返回0.•本次设计中使用的程序:voidctrlprocess(void){unsignedcharii;charstatus;status二PcdRequest(PICC_REQIDL,&RevBuffer[O]);//寻天线区内未进入休眠状态的卡,返回卡片类型2字节if(status!=MI_OK){return;}status二PcdAnticoll(&RevBuffer[2]);//防冲撞,返回卡的序列号,4字节的序列号被存放在RevBuffer[2]中if(status!=MI_OK){return;}memcpy(MLastSelectedSnr,&RevBuffer[2],4);//将RevBuffer[2]中存放的4字节的序列号复制到MLastSelectedSnr变量中存储for(ii=0;ii<4;ii++){Show816(0,5+2*ii,(MLastSelectedSnr[ii]>>4)&0x0f);Show816(0,6+2*ii,MLastSelectedSnr[ii]&0x0f);}//将4个字节序列号分别存放到MLastSelectedSnr[O]到MLastSelectedSnr[3],方便后续的显示与发送2MifareOne卡①Mifare卡的激励首先,通信系统中的读卡器始终都在通过天线向周围发射一组频率固定的电磁波,这组电磁波即激励信号。接下来,一旦非接触式Mifare卡进入读写器工作范围内,即会被读写器的激励限号信号所激励。受到激励信号的影响,Mifare卡内部的谐振电路就会产生共振,从而使卡的内部电容中内产生了电荷。而在这个电容的另一端,我们通过一个单向导通的电子泵,就可以将电容内储存的电荷转移到另一个电容内储存。然后,整个共振和电荷转移的过程周而复始,当电容中存储的电压达到2V时,此电容就成为Mifare卡的电源,并开始为卡内的其他电路提供工作电压,从而帮助Mifare卡完成应答、存储、通信等一系列功能。ATR模块的启动:AnswerToRequest(“应答读写器发出的请求”)当非接触式Mifare卡进入读写器的工作范围内时,我们就可以控制读写器向Mifare卡发出Requestall(或Requeststd)指令,收到指令后的Mifare卡将启动ATR模块。这时,Mifare卡的内部芯片就会将卡的类型号(TagType传送给读写器,从而建立Mifare卡与读写器的联络。注意,如果不进行ATR的启动,读写器对卡的进一步操作(读/写操作等)将不会进行。所以,我们可以将ATR启动理解为Mifare卡与读写器之间通信的第一步。AntiCollision模块:Mifare卡防冲突当有多张Mifare卡处在读写器的天线工作范围内时,AntiCollision模块,即防冲突功能将被启动。这时,读写器首先将逐一地与每一张Mifare卡进行通信,从而读取每一张Mifare卡序列号(SerialNumber)。由于每一张Mifare卡都的序列号都是独一无二的,因此我们就可以借助读写器中的AntiCollision防重叠模块以及Mifare卡上的防重叠模块,通过Mifare卡唯一的序列号来选定多张Mifare卡中的一张。被选中的卡就可以畅通无阻地与读写器进行数据交换,而那些未被选中的卡则处于待命状态,准备随时与读写器进行通信联络。④SelectApplication模块:选中并锁定Mifare卡片当Mifare卡与读写器完成了上面的两个步骤之后,若读写器要想对卡进行读/写操作,还须对已经完成了ATR启动的Mifare卡进行“Select”操作,从而使卡真正地被选中。被选中并锁定的Mifare卡会将卡片上存储的“Size"字节传送给读写器。只有当读写器收到这一字节之后,才可对卡进行下一步的操作。Authentication&AccessControl模块:认证及存取控制模块以上的三个步骤完成后,我们还必须要对卡上已经设置了的密码进行认证,只有密码匹配,我们才能被允许进一步的读/写操作。Mifare卡上有16个扇区,每个扇区都能够独立设置各自的密码,各个扇区之间互不干涉,因此我们必须逐一地分别加以认证,才能对密码匹配的扇区进行下一步的操作。这种设计的优点是每个扇区都可以独立开来,应用于一个特定的场合,从而让一张Mifare卡实现多种功能,我们校内的“一^通”就是一个典型的例子。Mifare卡的密码的认证采用了三次相互的认证的方法,安全性极佳。试图靠猜测密码打开卡某个扇区几乎不可能。Control&ArithmeticUnit:控制及算术运算单元该单元主要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽省蚌埠市怀远县2026年初三冲刺3月训练卷(四)化学试题含解析
- 2026年海外仓产品责任风险转移机制与保险配置方案
- 游戏产业策划总监面试要点详实
- 快递网点店长面试常见问题及应对
- 跨国公司员工海外派遣培训规划书
- 体育产业赛事策划的职责与招聘要求解析
- 大宗货物装卸策略:以青岛港为例的工作计划解析
- 家具制造厂长生产计划与成本控制管理
- 企业人事经理及助理专业人士的招聘面试指南
- 科技企业CFO的领导力培养与提升
- 2026年九江职业大学单招职业技能考试题库附参考答案详解(预热题)
- 生物质资源转化与利用-第一章
- 2024年四川省成都市锦江区中考物理二诊试卷+答案解析
- 安全生产隐患内部举报奖惩制度
- 2026中国中煤陕西公司煤化工二期项目招聘54人笔试参考题库及答案解析
- 北京2025年北京市木樨园体育运动技术学校(北京市排球运动管理中心)第二次招聘笔试历年参考题库附带答案详解
- (正式版)DB12∕T 830-2018 《纸质档案数字化规范 》
- 承台墩身施工安全培训课件
- 烟花爆竹储存培训课件
- 静脉输液不良反应临床识别与应急处理标准化流程指南
- 无偿献血培训课件
评论
0/150
提交评论