在C51单片机上对读写卡芯片MFRC522编程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在C51单片机上对读写卡芯片MFRC522编程
1 概述
在整个的射频识别系统中。读写卡模块负责建立单片机与电子标签之间的通信,起着非常重要的作用。而整个读写卡模块的核心,就是读写卡芯片MFRC522
MFRC522 是NXP 公司专为各种计量检测设备而设计、推出的一款低成本、低功耗的非接触式读写卡芯片。该芯片应用于13.56MHz 非接触通信,应用了较为先进的调制和解调概念,集成了众多的通信方式和协议,其内部强大的电路可直接驱动天线无需其他外接电路,通过其独特的加密算法,更使其具备可较强的安全性。
作为一款较为成功的读写卡芯片,MFRC522与主机间的通信采用的是连线较少的串行通信,而且可根据不同的用户需求,从SPI、I2C、串行UART三种总线模式中选择,这样的设计有利于减少连线数量,缩小PCB 板体积,降低成本。
目前MFRC522在很多的领域都得到了广泛应用,尤其适用于低成本、小尺寸、低功耗和单电源的非接触式通信的应用场合,是智能仪表、板上单元、便携式手持设备的极佳选择。目前,全国各大城市的公共交通终端以及非接触式公用电话应用的正是MFRC522
2 特性
1. 高度集成的模拟电路模块,应用新概念完成调制和解调。
2. 支持ISO 14443A与MIFARE通信协议
3. 驱动优化,采用少量外部器件就能输出驱动级到天线
4. 支持MIFARE的加密算法
5. 可自由选择多样的主机接口:
①10Mbit/s的SPI接口
②I2C接口,快速传输模式的速率为400kbit/s,
高速模式的速率为3400kbit/s
③串行UART,传输速率高达1228.8kbit/s,帧取决于RS232接口,电
压电平取决于提供的管脚电压
6. 灵活的中断模式
7. 64字节的发送接收缓冲区
8. 具备软件掉电、硬件掉电和发送器掉电三种低功耗模式,能够通过关闭
相应的模块或驱动器达到节电的目的。
9. 2.5~3.3V的低电源电压,低功耗设计
10. 内部振荡器,链接27.12HZ的晶体
11.可编程定时器
12.自由编程的I/O管脚
13.内置温度传感器,当芯片温度过高时会自动停止射频信号的发射
14. 体积小,仅有5mm╳5mm╳0.85mm
3 系统结构
MFRC522与MCU通过串口进行数据交换,其支持3种微控制器接口类型:SPI、I2C以及串行UART。且MFRC522 具备接口复位功能,能够自动检测当前执行了上电复位或硬复位的微控制器的接口类型。
MFRC522的数据处理模块负责执行数据的并行与串行之间的转换和奇偶校验,并且集成了多种协议,支持 ISO14443A 的所有层。
状态和控制模块通过对器件进行配置来达到适应环境和外部影响的目的,从而使芯片性能达到最佳状态。
CRYPTO1 流密码单元是保障MFRC522通信稳定、安全的关键,当芯片与MIFARE 电子标签建立通信时,高速CRYPTO1 流密码单元和非易失性密匙存储器将完成
密匙的校验。
模拟电路中包含了一个功能强大的驱动部分,负责信号的发送、检测合接收。
4 引脚配置
作者利用Protel绘制的原理图:
如上图所示,MFRC522芯片为 32 脚 HVQFN 封装。器件使用了 3 个独立的电源以实现在电磁兼容方面的要求。
●天线
MFRC522芯片通过TX1和TX2这两个管脚向外输出13.56MHz 的能量载波来驱动天线;当电子标签收到天线发出的激励信号后,就会发射出响应信号,天线接收到响应信号就会通过天线的外部电路将其送给RX管脚进行处理。
此外,为了确保驱动模块的正常工作,MF RC522设计了单独电源专为驱动部分供电。
●模拟电源
MFRC522 的模拟部分使用单独电源进行供电。
●数字电源
MFRC522 数字部分使用单独电源进行供电。
●振荡器
频率为27.12MHz 的晶振通过一段缓冲区被连接到OSCIN管脚和 OSCOUT管脚。如果开发者需要采用外部晶振作为时钟,可从 OSCIN 引入外部时钟信号。
●电子标签接口
MFRC522 为MIFARE®有源天线的设计提供了相应的支持。通过SIGIN 和SIGOUT就可以对MIFARE的信号进行处理。
●串行接口
由于本次设计中MFRC522
与MCU 之间最终选择了SPI 接口,在此特将各引脚在SPI 接口模式下的定义列出:
5 MFRC522的功能实现
为了通过编程实现MFRC522的读写卡功能,我们的第一步就是把要用的命令字和地址进行定义。我们通过查找芯片手册,得到详尽的MFRC522命令字、MifareOne 卡片命令字以及MFRC522各寄存器的功能与定义。
接下来,打开Keil uVision4并在工程中添加rc522.h 文件,用这个文件定义所有射频识别过程中可能用到的命令字与地址:
通过上图大家可以看到,整个522.h 文件中基本全都是#define 我们只需要将芯片手册中的信息仔细录入,并写好注释。而且,为了便于管理,rc522.h 里的语句被我分成了四类,分别是:①MFRC522命令字
②MifareOne 卡片命令字 ③ MFRC522寄存器 ④MF522通讯错误的处理代码
接下来,我们就要开始编程实现MFRC522的一些具体功能了。在工程中新建rc522.c 文件,在该文件中编写MFRC5222读写卡过程中需要的指令。
RC522完整的读写卡流程框图:
根据上面的读写卡流程框图,我们按照每个框的内容编写与之相对应的程序。
●寻卡请求
读写卡模块向外发射激励信号,一旦有Mifare卡进入读写器天线工作范围,读写模块发送命令。Mifare卡收到命令后会将卡上的储存单元中的卡片类型号(TagType)信息即2个字节数据发给读写器。从而建立Mifare卡与RC522通信的第一步。
寻卡请求函数:
char PcdRequest(unsigned char req_code,unsigned char *pTagType)
说明: