在C51单片机上对读写卡芯片MFRC522编程文档格式.docx
- 文档编号:14952582
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:12
- 大小:249.40KB
在C51单片机上对读写卡芯片MFRC522编程文档格式.docx
《在C51单片机上对读写卡芯片MFRC522编程文档格式.docx》由会员分享,可在线阅读,更多相关《在C51单片机上对读写卡芯片MFRC522编程文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 单片机 读写 芯片 MFRC522 编程