ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:275.58KB ,
资源ID:7627537      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7627537.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(在C51单片机上对读写卡芯片MFRC522编程.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

在C51单片机上对读写卡芯片MFRC522编程.docx

1、在C51单片机上对读写卡芯片MFRC522编程 在C51单片机上对读写卡芯片MFRC522编程1 概述在整个的射频识别系统中。读写卡模块负责建立单片机与电子标签之间的通信,起着非常重要的作用。而整个读写卡模块的核心,就是读写卡芯片MFRC522MFRC522 是NXP 公司专为各种计量检测设备而设计、推出的一款低成本、低功耗的非接触式读写卡芯片。该芯片应用于 13.56MHz 非接触通信,应用了较为先进的调制和解调概念,集成了众多的通信方式和协议,其内部强大的电路可直接驱动天线无需其他外接电路,通过其独特的加密算法,更使其具备可较强的安全性。作为一款较为成功的读写卡芯片,MFRC522与主机间

2、的通信采用的是连线较少的串行通信,而且可根据不同的用户需求,从 SPI、I2C、串行 UART三种总线模式中选择,这样的设计有利于减少连线数量,缩小 PCB 板体积,降低成本。目前MFRC522在很多的领域都得到了广泛应用,尤其适用于低成本、小尺寸、低功耗和单电源的非接触式通信的应用场合,是智能仪表、板上单元、便携式手持设备的极佳选择。 目前,全国各大城市的公共交通终端以及非接触式公用电话应用的正是MFRC5222 特性1. 高度集成的模拟电路模块,应用新概念完成调制和解调。2. 支持ISO 14443A与MIFARE通信协议3. 驱动优化,采用少量外部器件就能输出驱动级到天线4. 支持MIF

3、ARE的加密算法5. 可自由选择多样的主机接口:10Mbit/s的SPI接口I2C接口,快速传输模式的速率为400kbit/s,高速模式的速率为3400kbit/s串行UART,传输速率高达1228.8kbit/s,帧取决于RS232接口,电压电平取决于提供的管脚电压6. 灵活的中断模式7. 64字节的发送接收缓冲区8. 具备软件掉电、硬件掉电和发送器掉电三种低功耗模式,能够通过关闭相应的模块或驱动器达到节电的目的。9. 2.53.3V的低电源电压,低功耗设计10. 内部振荡器,链接27.12HZ的晶体11可编程定时器 12自由编程的I/O管脚13内置温度传感器,当芯片温度过高时会自动停止射频

4、信号的发射14. 体积小,仅有5mm5mm0.85mm3 系统结构MFRC522与MCU通过串口进行数据交换,其支持3种微控制器接口类型:SPI、I2C以及串行UART。且MFRC522 具备接口复位功能,能够自动检测当前执行了上电复位或硬复位的微控制器的接口类型。 MFRC522的数据处理模块负责执行数据的并行与串行之间的转换和奇偶校验,并且集成了多种协议,支持 ISO14443A 的所有层。状态和控制模块通过对器件进行配置来达到适应环境和外部影响的目的,从而使芯片性能达到最佳状态。 CRYPTO1 流密码单元是保障MFRC522通信稳定、安全的关键,当芯片与MIFARE电子标签建立通信时,

5、高速CRYPTO1 流密码单元和非易失性密匙存储器将完成密匙的校验。 模拟电路中包含了一个功能强大的驱动部分,负责信号的发送、检测合接收。4 引脚配置 作者利用Protel绘制的原理图:如上图所示,MFRC522芯片为 32 脚 HVQFN 封装。器件使用了 3 个独立的电源以实现在电磁兼容方面的要求。天线 MFRC522芯片通过TX1和TX2这两个管脚向外输出13.56MHz 的能量载波来驱动天线;当电子标签收到天线发出的激励信号后,就会发射出响应信号,天线接收到响应信号就会通过天线的外部电路将其送给RX管脚进行处理。名 称类 型功 能TX1, TX2输出缓冲天线驱动器WMID模拟参考电压R

6、X输入模拟天线输入信号此外,为了确保驱动模块的正常工作,MF RC522设计了单独电源专为驱动部分供电。 名 称 类 型功 能TVDD 电源发送器电源电压TVSS电源 发送器电源地模拟电源MFRC522 的模拟部分使用单独电源进行供电。 名 称 类 型功 能AVDD电源模拟部分电源电压AVSS 电源模拟部分电源地 数字电源MFRC522 数字部分使用单独电源进行供电。 名 称类 型功 能 DVDD电源数字部分电源电压 DVSS电源数字部分电源地 振荡器频率为27.12MHz 的晶振通过一段缓冲区被连接到OSCIN管脚和 OSCOUT管脚。如果开发者需要采用外部晶振作为时钟,可从 OSCIN 引

7、入外部时钟信号。 名称类型功能OSCIN输入振荡器缓冲输入OSCOUT输出振荡器缓冲输出电子标签接口MFRC522 为 MIFARE有源天线的设计提供了相应的支持。通过SIGIN 和SIGOUT就可以对MIFARE的信号进行处理。名称类型功能 SIGIN带施密特触发器的输入MIFARE 接口输入SIGOUT输出MIFARE 接口输出AUX1/2输出辅助输出:用于测试 串行接口名称类型功能D1 D7I/O不同接口的数据线 (测试脚、I2C、SPI、UART ) SDAI/O串行数据线I2C输入I2C使能EA输入地址:提供I2C的地址 由于本次设计中MFRC522与MCU之间最终选择了SPI接口,

8、在此特将各引脚在SPI接口模式下的定义列出:引脚名称SPI 方式 SDANSSI2CLEAHD7MISOD6MOSID5SCK5 MFRC522的功能实现为了通过编程实现MFRC522的读写卡功能,我们的第一步就是把要用的命令字和地址进行定义。我们通过查找芯片手册,得到详尽的MFRC522命令字、MifareOne卡片命令字以及MFRC522各寄存器的功能与定义。接下来,打开Keil uVision4并在工程中添加rc522.h文件,用这个文件定义所有射频识别过程中可能用到的命令字与地址:通过上图大家可以看到,整个522.h文件中基本全都是#define 我们只需要将芯片手册中的信息仔细录入,

9、并写好注释。而且,为了便于管理,rc522.h里的语句被我分成了四类,分别是:MFRC522命令字 MifareOne卡片命令字 MFRC522寄存器 MF522通讯错误的处理代码接下来,我们就要开始编程实现MFRC522的一些具体功能了。在工程中新建rc522.c文件,在该文件中编写MFRC5222读写卡过程中需要的指令。 RC522完整的读写卡流程框图: 根据上面的读写卡流程框图,我们按照每个框的内容编写与之相对应的程序。寻卡请求读写卡模块向外发射激励信号,一旦有Mifare卡进入读写器天线工作范围,读写模块发送命令。Mifare卡收到命令后会将卡上的储存单元中的卡片类型号(TagType

10、)信息即2个字节数据发给读写器。从而建立Mifare卡与RC522通信的第一步。寻卡请求函数:char PcdRequest(unsigned char req_code,unsigned char *pTagType)说明:req_codeIN:寻卡方式 0x52 = 寻感应区内所有符合14443A标准的卡 0x26 = 寻未进入休眠状态的卡 pTagTypeOUT:卡片类型代码 0x4400 = Mifare_UltraLight 0x0400 = Mifare_One(S50) 0x0200 = Mifare_One(S70) 0x0800 = Mifare_Pro(X) 0x4403

11、= Mifare_DESFire操作成功返回值为0 即完成整个的寻卡请求。防冲撞+选定Mifare卡由于RC522在同一时间内只能与一个Mifare卡进行通信,因此在完成寻卡请求之后,为了防止有多个Mifare卡同时处于读写卡模块天线工作范围而造成冲撞,需进行防冲撞操作,即读写卡模块与一张Mifare卡建立联络,取得其全球唯一的序列号。防冲撞函数:char PcdAnticoll(unsigned char *pSnr)说明: pSnrOUT:用于卡片序列号,4字节操作成功时函数返回值为0.在获得Mifare卡的序列号之后,我们需要做的就是对指定的序列号的Mifare卡进行选定,只有被选中的卡

12、才能与RC522建立进一步的通信,其它的Mifare卡将全部回到初始状态。选定Mifar卡函数:char PcdSelect(unsigned char *pSnr)说明:pSnrIN:之前防冲撞操作中获得的Mifare卡序列号,4字节操作成功时函数返回值为0.验证Mifare密码为了访问Mifare卡中的某个扇区里存放的数据,必须进行密码的验证。用户首先要通过编程将已经设定好的密钥存入RC522内部的密钥存储区中,然后再比对Mifare卡中存放的密钥与RC522密钥存储区中的密钥是否相同,只有确认二者相同之后才可以对当前Mifare卡的这个扇区进行下一步操作。密码验证函数:char PcdA

13、uthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)说明:auth_modeIN: 密码验证模式 0x60 = 验证A密钥 0x61 = 验证B密钥 addrIN:块地址 pKeyIN:密码 pSnrIN:卡片序列号,4字节操作正确时返回 0.读操作完成了密码认证,我们就可以从Mifare卡中的扇区中读出数据,每次读出数据的大小为16字节。读操作函数:char PcdRead(unsigned char addr,unsigned char *pData)说明:a

14、ddrIN:块地址,取值范围063pDataOUT:从Mifare卡中读出的数据,16字节操作成功返回0.本次设计中使用的程序:void ctrlprocess(void) unsigned char ii; char status; status=PcdRequest(PICC_REQIDL,&RevBuffer0);/寻天线区内未进入休眠状态的卡,返回卡片类型 2字节 if(status!=MI_OK) return; status=PcdAnticoll(&RevBuffer2);/防冲撞,返回卡的序列号, 4字节的序列号被存放在RevBuffer2中 if(status!=MI_OK)

15、 return; memcpy(MLastSelectedSnr,&RevBuffer2,4);/将RevBuffer2中存放的4字节的序列号复制到MLastSelectedSnr变量中存储for(ii=0;ii4)&0x0f); Show816(0,6+2*ii,MLastSelectedSnrii&0x0f); /将4个字节序列号分别存放到MLastSelectedSnr0到MLastSelectedSnr3,方便后续的显示与发送2 Mifare One卡1Mifare卡的激励首先,通信系统中的读卡器始终都在通过天线向周围发射一组频率固定的电磁波,这组电磁波即激励信号。接下来,一旦非接触式

16、Mifare卡进入读写器工作范围内,即会被读写器的激励限号信号所激励。受到激励信号的影响,Mifare卡内部的谐振电路就会产生共振,从而使卡的内部电容中内产生了电荷。而在这个电容的另一端,我们通过一个单向导通的电子泵,就可以将电容内储存的电荷转移到另一个电容内储存。然后,整个共振和电荷转移的过程周而复始,当电容中存储的电压达到2 V时,此电容就成为Mifare卡的电源,并开始为卡内的其他电路提供工作电压,从而帮助Mifare卡完成应答、存储、通信等一系列功能。2ATR模块的启动:Answer To Request(“应答读写器发出的请求”)当非接触式Mifare卡进入读写器的工作范围内时,我们

17、就可以控制读写器向Mifare卡发出Request all(或Request std)指令,收到指令后的Mifare卡将启动ATR模块。这时,Mifare卡的内部芯片就会将卡的类型号(TagType)传送给读写器,从而建立Mifare卡与读写器的联络。注意,如果不进行ATR的启动,读写器对卡的进一步操作(读/写操作等)将不会进行。所以,我们可以将ATR启动理解为Mifare卡与读写器之间通信的第一步。 3AntiCollision模块:Mifare卡防冲突 当有多张Mifare卡处在读写器的天线工作范围内时,AntiCollision模块,即防冲突功能将被启动。这时,读写器首先将逐一地与每一张

18、Mifare卡进行通信,从而读取每一张Mifare卡序列号(Serial Number)。由于每一张Mifare卡都的序列号都是独一无二的,因此我们就可以借助读写器中的AntiCollision防重叠模块以及Mifare卡上的防重叠模块,通过Mifare卡唯一的序列号来选定多张Mifare卡中的一张。被选中的卡就可以畅通无阻地与读写器进行数据交换,而那些未被选中的卡则处于待命状态,准备随时与读写器进行通信联络。4Select Application 模块:选中并锁定Mifare卡片当Mifare卡与读写器完成了上面的两个步骤之后,若读写器要想对卡进行读/写操作,还须对已经完成了ATR启动的Mi

19、fare卡进行“Select”操作,从而使卡真正地被选中。被选中并锁定的Mifare卡会将卡片上存储的“Size” 字节传送给读写器。只有当读写器收到这一字节之后,才可对卡进行下一步的操作。5Authentication & Access Control 模块:认证及存取控制模块以上的三个步骤完成后,我们还必须要对卡上已经设置了的密码进行认证,只有密码匹配,我们才能被允许进一步的读/写操作。 Mifare卡上有16个扇区,每个扇区都能够独立设置各自的密码,各个扇区之间互不干涉,因此我们必须逐一地分别加以认证,才能对密码匹配的扇区进行下一步的操作。这种设计的优点是每个扇区都可以独立开来,应用于一

20、个特定的场合,从而让一张Mifare卡实现多种功能,我们校内的“一卡通”就是一个典型的例子。Mifare卡的密码的认证采用了三次相互的认证的方法,安全性极佳。试图靠猜测密码打开卡某个扇区几乎不可能。6Control & Arithmetic Unit:控制及算术运算单元该单元主要由Mifare卡内部的中中央微处理器(MCU)构成,它是整个卡的“大脑”。它对卡的各个单元进行控制,同时它还需要完成对各种数据的运算处理。 7RAM/ROM:存储单元 Mifare卡内部的RAM主要起到配合控制及算术运算单元,将运算的结果进行暂时存储的功能。RAM中的数据在卡失掉电源后(卡片离开读写器天线的有效工作范围)将会丢失。 而ROM中则存储了一些已经固化了的Mifare卡运行所必须的程序指令,当需要调用时,由控制及算术运算单元直接从ROM中取出,从而通过指令对每个单元进行控制。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1