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

上传人:b****2 文档编号:14952582 上传时间:2022-10-26 格式:DOCX 页数:12 大小:249.40KB
下载 相关 举报
在C51单片机上对读写卡芯片MFRC522编程文档格式.docx_第1页
第1页 / 共12页
在C51单片机上对读写卡芯片MFRC522编程文档格式.docx_第2页
第2页 / 共12页
在C51单片机上对读写卡芯片MFRC522编程文档格式.docx_第3页
第3页 / 共12页
在C51单片机上对读写卡芯片MFRC522编程文档格式.docx_第4页
第4页 / 共12页
在C51单片机上对读写卡芯片MFRC522编程文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

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

《在C51单片机上对读写卡芯片MFRC522编程文档格式.docx》由会员分享,可在线阅读,更多相关《在C51单片机上对读写卡芯片MFRC522编程文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

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

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管脚进行处理。

名称

类型

功能

TX1,TX2

输出缓冲

天线驱动器

WMID

模拟

参考电压

RX

输入模拟

天线输入信号

此外,为了确保驱动模块的正常工作,MFRC522设计了单独电源专为驱动部分供电。

类型

TVDD

电源

发送器电源电压

TVSS

电源

发送器电源地

●模拟电源

MFRC522的模拟部分使用单独电源进行供电。

名称

AVDD

模拟部分电源电压

AVSS

电源

模拟部分电源地

●数字电源

MFRC522数字部分使用单独电源进行供电。

功能

DVDD

数字部分电源电压

DVSS

数字部分电源地

●振荡器

频率为27.12MHz的晶振通过一段缓冲区被连接到OSCIN管脚和OSCOUT管脚。

如果开发者需要采用外部晶振作为时钟,可从OSCIN引入外部时钟信号。

名称

类型

功能

OSCIN

输入

振荡器缓冲输入

OSCOUT

输出

振荡器缓冲输出

●电子标签接口

MFRC522为MIFARE®

有源天线的设计提供了相应的支持。

通过SIGIN和SIGOUT就可以对MIFARE的信号进行处理。

功能

SIGIN

带施密特触发器的输入

MIFARE接口输入

SIGOUT

MIFARE接口输出

AUX1/2

辅助输出:

用于测试

●串行接口

D1…D7

I/O

不同接口的数据线

(测试脚、I2C、SPI、UART)

SDA

串行数据线

I2C

I2C使能

EA

地址:

提供I2C的地址

由于本次设计中MFRC522与MCU之间最终选择了SPI接口,在此特将各引脚在SPI接口模式下的定义列出:

引脚名称

SPI方式

NSS

L

H

D7

MISO

D6

MOSI

D5

SCK

 

5MFRC522的功能实现

为了通过编程实现MFRC522的读写卡功能,我们的第一步就是把要用的命令字和地址进行定义。

我们通过查找芯片手册,得到详尽的MFRC522命令字、MifareOne卡片命令字以及MFRC522各寄存器的功能与定义。

接下来,打开KeiluVision4并在工程中添加rc522.h文件,用这个文件定义所有射频识别过程中可能用到的命令字与地址:

通过上图大家可以看到,整个522.h文件中基本全都是#define我们只需要将芯片手册中的信息仔细录入,并写好注释。

而且,为了便于管理,rc522.h里的语句被我分成了四类,分别是:

①MFRC522命令字

②MifareOne卡片命令字③MFRC522寄存器④MF522通讯错误的处理代码

接下来,我们就要开始编程实现MFRC522的一些具体功能了。

在工程中新建rc522.c文件,在该文件中编写MFRC5222读写卡过程中需要的指令。

RC522完整的读写卡流程框图:

根据上面的读写卡流程框图,我们按照每个框的容编写与之相对应的程序。

●寻卡请求

读写卡模块向外发射激励信号,一旦有Mifare卡进入读写器天线工作围,读写模块发送命令。

Mifare卡收到命令后会将卡上的储存单元中的卡片类型号(TagType)信息即2个字节数据发给读写器。

从而建立Mifare卡与RC522通信的第一步。

寻卡请求函数:

charPcdRequest(unsignedcharreq_code,unsignedchar*pTagType)

说明:

req_code[IN]:

寻卡方式

0x52=寻感应区所有符合14443A标准的卡

0x26=寻未进入休眠状态的卡

pTagType[OUT]:

卡片类型代码

0x4400=Mifare_UltraLight

0x0400=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字节

●验证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—63

pData[OUT]:

从Mifare卡中读出的数据,16字节

操作成功返回0.

●本次设计中使用的程序:

voidctrlprocess(void)

{

unsignedcharii;

charstatus;

status=PcdRequest(PICC_REQIDL,&

RevBuffer[0]);

//寻天线区未进入休眠状态的卡,返回卡片类型2字节

if(status!

=MI_OK)

{

return;

}

status=PcdAnticoll(&

RevBuffer[2]);

//防冲撞,返回卡的序列号,4字节的序列号被存放在RevBuffer[2]中

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]&

}//将4个字节序列号分别存放

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板

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

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