RC522 - NFC刷卡模块

2023-11-16

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_0 C1_1 C1_2 C1_3
C2_0 C2_1 C2_2 C2_3
C3_0 C3_1 C3_2 C3_3

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

7 6 5 4 3 2 1 0
字节6 C2_0_b C1_0_b
字节7 C1_0 C3_0_b
字节8 C3_0 C2_0
字节9

其中C2_0_b表示C2_0取反

该四字节整体结构如下:

RC522-M1-密码结构

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

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

| 控制块 | 访问条件 |

C1_X C2_X C3_X Read Write Increment Decrement/Transfer/Restore
0 0 0 A/B A/B A/B A/B
0 1 0 A/B N N N
1 0 0 A/B B N N
1 1 0 A/B B B A/B
0 0 1 A/B N N A/B
0 1 1 B B N N
1 0 1 B N N N
1 1 1 N N N N

(注意:访问条件中填入的内容表示可访问项,其中 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_3 C2_3 C3_3 Read Write Read Write Read Write
0 0 0 N A/B A/B N A/B A/B
0 1 0 N N A/B N A/B N
1 0 0 N B A/B N N B
1 1 0 N N A/B N N N
0 0 1 N A/B A/B A/B A/B A/B
0 1 1 N B A/B B N B
1 0 1 N N A/B B N N
1 1 1 N N A/B N N N

(注意:密码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)	 //块备份
//具体流程参考示例代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RC522 - NFC刷卡模块 的相关文章

随机推荐

  • 如何在MAC上使用VOSviewer和Pajek

    因为要写文献综述的原因 在看其他文献的时候被安利了VOSviewer和Pajek 在Window上操作是非常简单的 但是因为是MAC系统的原因 而这两个APP其实都是Window系统上的 在安装和绘图的时候出现了很多困难 在这里记录一下也方
  • 蛇形矩阵(Java)

    题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形 输入 本题有多组数据 每组数据由一个正整数N组成 N不大于100 输出 对于每一组数据 输出一个N行的蛇形矩阵 两组输出之间不要额外的空行 矩阵三角中同一行的数字用一个空格分
  • stm32 NVIC中断优先级管理

    对于中断这个概念 我喜欢用经常发生在CPU中的多线程抢占执行现象来类比 每个中断 或者说中断服务 就像是一个线程 它们根据事先定义好的运行规则运作着 所以这就引出了如何管理中断 我们应如何确定哪个中断先执行 哪个后执行 1 NVIC中断优先
  • Deepin如何添加阿里源

    进入阿里开源镜像站 https opsx alibaba com mirror 找到deepin 点击右侧的帮助 出现如下图所示界面 打开终端 输入 sudo vim etc apt sources list 点击键盘上的 insert键
  • 浅谈 vue组件传值

    一般有三种传值方式 1 父传子 2 子传父 3 兄弟组件之间通信 1 父组件向子组件传值 一般会在子组件里面定义props来做接收 这是比较常见的情况 这是父组件
  • MybatisPlus 3.5.1 代码生成器 自定义Service层

  • 使用RabbitMQ定时发送消息

    如何使用消息队列去发一个定时消息 1 背景 在日常开发中 有时需要我们去定时发送消息 例如定时发送邮箱 定时发送短信等业务 此时需要我们去定制一个定时任务 可以确保在某一个时间节点上自动操作 而不用手动去设置 然后 在有些场景下 发送的消息
  • OPPO芯片公司哲库全员解散的后续...

    昨天的文章提到了OPPO的自研芯片公司哲库宣布解散 三千名员工领取了N 3的赔偿开始各奔东西 对于这背后的三千个家庭来说 无疑是坏消息 想要短时间内解决这么多人的就业问题 不是件轻松的事情 目前看来 无论是公司主体 还是员工本人 都在努力的
  • Visual Studio 2010必为程序员提供更多新机遇

    Visual Studio 2010必为程序员提供更多新机遇 今天天气太冷了 实在太冷了 外边下起大雪来 是2009年的第一场大雪 自己一个人坐在办公室实在无聊 看着外边的大雪 自己情不自禁想动起手来 想挑个话题又不知道写点什么好 最后斟酌
  • 利用几行python代码爬取全国疫情数据,全方位地图分析疫情地区分布

    爬取全国疫情数据 所用的网页连接 https api inews qq com newsqa v1 automation foreign country ranklist 可视化用到的模块 gt 戳这里下载 也可以看最后 或私信我 如果没有
  • C#访问postgresql数据库

    1 为了访问PostgreSQL数据库 需要从pgfoundry网站 下载Npgsql Net Data Provider for Postgresql的组件 https download csdn net download starhuh
  • SSE2 Intrinsics各函数介绍

    SIMD相关头文件包括 include
  • PowerDesigner设计数据库表

    1 说明 使用PowerDesigner设计数据库表 然后将表设计导出为Word文档 以及MySQL数据库对应的DDL刷库脚本 2 创建模型 首先创建概念数据模型 File gt New Model gt 选择左边的Model types
  • [Swift]错误提示:Method does not override any method from its superclass

    微信公众号 山青咏芝 shanqingyongzhi 博客园地址 山青咏芝 https www cnblogs com strengthen GitHub地址 https github com strengthen LeetCode 原文地
  • Vue 入门教程

    vue 入门 常用指令 生命周期 业务 使用 Vue 简化查询 业务 vue 实现新增 vue 核心 MVVM Model View ViewModel 实现数据的双向绑定 把编程的关注点放在数据上 入门 引入 js 文件 在 JS 代码区
  • 由《羊了个羊》想到的高并发架构之路

    前言 要说最近一段时间最火的话题是什么 那必定是 羊了个羊 频频冲上微博热搜第一 因访问量骤增 大量玩家涌入进来 高并发流量导致游戏服务器被接连击穿 羊了个羊 服务器几天内就出现了多次异常 无法登录游戏 问题思考 我想这其中多次崩溃的原因可
  • jackson-databind 简介、中文文档、中英对照文档 下载

    jackson databind 文档 下载链接 含jar包 源码 pom 组件名称 中文 文档 下载链接 中英对照 文档 下载链接 jackson databind 2 10 0 jar jackson databind 2 10 0 A
  • 修改手机屏幕刷新率_手机屏幕刷新率那点事儿!

    屏幕刷新率是指电子束对屏幕上的图像重新扫描的次数 刷新率越高 显示的画面稳定性就会越好 眼睛也就不会累 屏幕有刷新率 我们的眼睛也有刷新率 所谓的人眼刷新率就是我们眼睛一秒看到的图像数量 到目前为止我们眼睛刷新率极限还没有确定的数字 一般飞
  • 华为OD机试真题-分奖金【2023.Q1】

    题目内容 公司老板做了一笔大生意 想要给每位员工分配一些奖金 想通过游戏的方式来决定每个人分多少钱 按照员工的工号顺序 每个人随机抽取一个数字 按照工号的顺序往后排列 遇到第一个数字比自己数字大的 那么 前面的员工就可以获得 距离数字差值
  • RC522 - NFC刷卡模块

    RC522 NFC刷卡模块 芯片介绍 引脚介绍 MF RC522 是应用于 13 56MHz 非接触式通信中高集成度读写卡系列芯片中的一员 是 NXP 公司针对 三表 应用推出的一款低电压 低成本 体积小的非接触式读写卡芯片 是智能仪表和便