在这个项目中,我们将学习如何使用RC522 RFID读写模块将数据写入MIFARE 1K RFID卡。如果您想在标签上存储自定义数据,比如学生信息或员工详细信息,这是非常有用的。
我们将使用Arduino作为主控制器与RC522 RFID模块接口,并将数据写入RFID卡。我已经做了一个教程接口RC522射频识别模块Arduino。在进一步进行之前,请检查该教程,因为有一些与RFID通信、MFRC522 IC、RC522 RFID模块等相关的基础知识。
MIFARE 1K标签的内存图简介
如果你上传' DumpInfo '的例子,打开串口显示器,Arduino会将MIFARE 1K RFID Tag的所有内容扫描正确后打印在串口显示器上。
了解RFID标签的内存布局是非常重要的,因为我们将知道每个内存位置的重要性,什么内存位置是保留的,什么位置是免费用于存储用户数据。
下图是' DumpInfo '示例的串行监视器输出的屏幕截图。现在我们来分析一下。
串行监视器输出分析
第一行显示了MFRC522 IC的固件版本,在本例中,结果是0x92。在这里,' 9 '代表MFRC522 IC, ' 2 '代表软件版本2.0。扫描RFID卡后,我们得到了UID, SAK和RFID标签的类型。
本例中,UID为' 6C 08 88 17 ', SAK为' 08 ',卡的类型为MIFARE 1K。
接下来,您可以看到MIFARE 1K标签的实际内存转储。一个典型的MIFARE 1K RFID标签有1K字节的内存组织成16个扇区(扇区0到扇区15)。每个block由4个block组成。
理解MIFARE 1K标签的内存映射
例如,扇区0包含块0、块1、块2和块3。1区有4、5、6、7等等,最后15区有60、61、62和63。每个Block可以存储16字节的数据。
注意:这个编号只是为了理解内存布局。
所以,16 Sectors * 4 Blocks * 16 Bytes = 1024 Bytes = 1K
0扇区中的0块用于保存“制造商数据”。通常,在MIFARE 1K标签的情况下,该块包含4字节UID(唯一ID)(也包括NXP的MIFARE 4K, MIFARE Mini标签)。高级标签,如MIFARE Plus, MIFARE Ultralight, MIFARE DESFire由一个7字节的UID组成。
每个扇区由3个数据块组成,可用于存储用户数据。每个扇区的最后一个扇区,即0扇区为3扇区,1扇区为7扇区,以此类推,称为扇区拖车。
因为有16个扇区,所以有16个扇区拖车。每个扇区拖车包括以下信息:
- 必选的6字节密钥A。
- 4字节访问位。
- 可选6字节密钥B(如果不使用,可以存储数据)。
注意:“访问位”区域中的字节9可用于用户数据。
注意:除扇区0外,所有扇区都有三个数据块和一个扇区尾部。它有一个块(块0)保留给制造商数据。0区有两个数据块和一个区拖车。
Sector Trailer中的Access Bits决定了一个扇区中所有块的访问条件,需要3位来指定三个数据块和扇区拖车的访问条件。访问条件包括:读、写、增、减、传输和恢复。
有了所有这些信息,我们可以得出结论,在MIFARE 1K RFID数据中可以存储47字节的数据。现在让我们看看如何使用Arduino和RC522 RFID模块将数据写入RFID标签。
将RC522与Arduino接口
即使MFRC522 IC支持三种类型的串行通信;UART, SPI和I2C, SPI接口是最快和最常见的。下图显示了RC522 RFID模块的引脚。
为了Arduino和RC522之间的可靠通信,让我们使用硬件SPI引脚。Arduino与RC522模块的连接如下表所示。
RC522射频识别模块 |
Arduino UNO |
VCC |
3.3 v |
RST | 7 |
接地 |
接地 |
硬中断请求优先级别 | - - - |
味噌 |
12 |
莫西人 | 11 |
SCK |
13 |
党卫军 | 10 |
组件的要求
- Arduino UNO
- RC522 RFID读写模块
- MIFARE 1K RFID标签
- 连接电线
线路图
下图显示了Arduino和RC522 RFID模块之间的连接。
向RFID卡写入数据
我写了一个简单的程序,我写数据到1块(块2),并完全填充它。这意味着,数据的长度应该是16字节。
代码
将数据写入MIFARE 1K RFID Tag的Arduino代码如下。我注释了代码,以便您能容易地理解它。
结论
一个简单的演示如何使用RC522 RFID读写模块和Arduino UNO写数据到RFID卡。您学习了MIFARE Classic 1K RFID Tags的内存布局,内存位置可用于写入数据,也可向RFID卡写入一些随机文本。