IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> RC522 - NFC刷卡模块 -> 正文阅读

[嵌入式]RC522 - NFC刷卡模块

RC522 - NFC刷卡模块

芯片介绍/引脚介绍

MF RC522 是应用于 13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员。是 NXP 公司针对“三表”应用推出的一款低电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携式手持设备研发的较好选择。

非接触式 IC 卡又称射频卡,由 IC 芯片、感应天线组成,封装在一个标准的 PVC 卡片内,芯片及天线无任何外露部分。是世界上最近几年发展起来的一项新技术,它成功的将射频识别技术和 IC 卡技术结合起来,结束了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破。卡片在一定距离范围(通常为 5—10cm)靠近读写器表面,通过无线电波的传递来完成数据的读写操作。

RC522-引脚图

其可以由SPI,I2C,UART驱动,本笔记采用较为常用的SPI通信。

关于SPI通信相关内容,详见协议使用笔记SPI章节。

M1卡介绍

M1 卡分为 16 个扇区,每个扇区由 4 块(块 0、块 1、块 2、块 3)组成,(我们也将 16 个扇区的 64 个块按绝对地址编号为 0~63,存贮结构(其它扇区依此类推)如下图所示:

  • 注意:由于扇区0用于存放厂商代码,已经固化,不可更改,因此我们不使用该扇区。

RC522-M1卡介绍

  • 每个扇区的块 0、块 1、块 2 为数据块,可用于存贮数据。数据块可作两种应用:

    1、用作一般的数据保存,可以进行操作。

    2、用作数据值,可以进行初始化值、加值、减值、读值操作。

M1卡工作原理

  • 名词解释

(Read):读一个块;

**(**Write):写一个块;

(Increment):对数值块进行加值;

(Decrement):对数值块进行减值;

存储(Restore):将块中的内容存到数据寄存器中;

传输(Transfer):将数据寄存器中的内容写入块中;

中止(Halt):将卡置于暂停工作状态。

  • 每个扇区的块 3 为控制块,包括了密码 A、存取控制、密码 B。具体结构如下:

RC522-M1扇区控制

  • 每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为 4 个字节,共 32 位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控制位,定义如下:
块0块1块2块3
C1_0C1_1C1_2C1_3
C2_0C2_1C2_2C2_3
C3_0C3_1C3_2C3_3

三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如进行减值操作必须验证 KEY A,进行加值操作必须验证 KEY B,等等)。三个控制位在存取控制字节中的位置,以块 0 为例:

76543210
字节6C2_0_bC1_0_b
字节7C1_0C3_0_b
字节8C3_0C2_0
字节9

其中C2_0_b表示C2_0取反

该四字节整体结构如下:

RC522-M1-密码结构

字节6-9位为上图控制块的存取控制,其中0和4代表块0的存取控制,1和5代表块1的存取控制,依此类推。

  • 其中块0-块2的存取控制形式如下:

| 控制块 | 访问条件 |

C1_XC2_XC3_XReadWriteIncrementDecrement/Transfer/Restore
000A/BA/BA/BA/B
010A/BNNN
100A/BBNN
110A/BBBA/B
001A/BNNA/B
011BBNN
101BNNN
111NNNN

(注意:访问条件中填入的内容表示可访问项,其中 A/B 表示 密码A和密码B,A表示密码A,B表示密码B,N表示都不可访问)

例如:当块 x 的存取控制位 C1_x C2_x C3_x = 0 0 1 时,表示:

? 1、通过密码A或密码B可读取块x中数据,但两个密码都不可写数据

? 2、通过密码A或密码B都不能使块x中数据增加,但两个密码都可以使块x中数据减少、传送和恢复

  • 块3与其它块不同,其访问形式如下:

| 控制块 | 密码A | 存取控制 | 密码B |

C1_3C2_3C3_3ReadWriteReadWriteReadWrite
000NA/BA/BNA/BA/B
010NNA/BNA/BN
100NBA/BNNB
110NNA/BNNN
001NA/BA/BA/BA/BA/B
011NBA/BBNB
101NNA/BBNN
111NNA/BNNN

(注意:密码A、存取控制、密码B填入读写性质,其中 A/B 表示 密码A和密码B,A表示密码A,B表示密码B,N表示都不可访问)

例如:当块 3 的存取控制位 C1_3 C2_3 C3_3 = 0 0 1 时,表示:

? 1、密码 A:不可读,验证 KEYA 或 KEYB 正确后,可写(更改)

? 2、存取控制:验证 KEYA 或 KEYB 正确后,可读、可写

? 3、密码 B:验证 KEYA 或 KEYB 正确后,可读、可写

数据读写流程

RC522-数据读写流程

  • 复位应答

M1 射频卡的通讯协议和通讯波特率是定义好的,当有卡片进入读写器的操作范围时,读写器以特定的协议与它通讯,从而确定该卡是否为 M1 射频卡,即验证卡片的卡型。

  • 防冲撞机制

当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作,未选中的则处于空闲模式等待下一次选卡,该过程会返回被选卡的序列号。

  • 选择卡片

选择被选中的卡的序列号,并同时返回卡的容量代码。

  • 三次互相确认

选定要处理的卡片之后,读写器就确定要访问的扇区号,并对该扇区密码进行密码校验,在三次相互认证之后就可以通过加密流进行通讯。(在选择另一扇区时,则必须进行另一扇区密码校验)

示例代码移植

如无示例代码,可以点此下载

  • 该代码为80C52的示例代码,使用着仅需将引脚设置为自己使用的引脚,调用自己的初始化函数,再解决几个类型不匹配的错误即可使用,移植过程过于简单,此处不再赘述。

示例函数调用说明

部分函数说明

void InitializeSystem(void);		//引脚初始化
void PcdReset(void);			    //硬件置位
void PcdAntennaOff(void);			//关闭天线
void PcdAntennaOn(void);			//开启天线
char PcdRequest(unsigned char req_code,unsigned char *pTagType)		//寻卡
char PcdAnticoll(unsigned char *pSnr)							  //防冲撞
char PcdSelect(unsigned char *pSnr)								  //选卡
char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)
    															//验证扇区密码
char PcdWrite(unsigned char addr,unsigned char *pData)				//写块
char PcdRead(unsigned char addr,unsigned char *pData)				//读块
char PcdBakValue(unsigned char sourceaddr, unsigned char goaladdr)	 //块备份
//具体流程参考示例代码
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章           查看所有文章
加:2022-08-19 19:22:30  更:2022-08-19 19:26:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 17:01:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计