在本课题中,我们将学习如何使用RC522 RFID读写器模块将数据写入MIFARE 1K RFID卡。如果您想在标签上存储自定义数据,如学生信息或员工详细信息,这是非常有用的。
我们将使用Arduino作为主控制器与RC522 RFID Module进行接口,并将数据写入RFID卡。我已经做了一个教程接口带Arduino的射频识别模块RC522.在进一步学习之前,请查看该教程,因为其中有一些与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)。每个扇区由4个block组成。
理解MIFARE 1K标签的内存映射
例如,扇区0有块0、1、2和3。第1区有4、5、6和7区等等,最后第15区有60、61、62和63区。每个块可以存储16字节的数据。
注意:这个编号只是为了理解内存布局。
因此,16个扇区* 4个块* 16个字节= 1024字节= 1K
0扇区的0块预留用于存放制造商数据。通常,在MIFARE 1K标签的情况下(以及MIFARE 4K, NXP的MIFARE Mini标签),该块包含4字节UID(唯一ID)。先进的标签,如MIFARE Plus, MIFARE超轻,MIFARE DESFire由一个7字节的UID。
每个扇区由三个数据块组成,用于存储用户数据。每个扇区的最后一块,即0扇区的第3块,1扇区的第7块,以此类推称为扇区拖车。
因为有16个部门,有16个部门拖车。每个部门拖车包含以下信息:
- 一个强制性的6字节密钥A。
- 4字节用于访问位。
- 可选6字节键B(如果不使用,可以存储数据)。
注意:“访问位”区域中的字节9可用于用户数据。
注意:所有扇区有三个数据块和一个扇区拖车除了扇区0。它有一个块(块0)保留给制造商数据。0区有两个数据块和一个扇区拖车。
扇区拖车中的访问位决定了扇区所有块的访问条件。需要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 Module之间的连接。
写入数据到RFID卡
我写了一个简单的程序,我写数据到1块(块2),并完全填满它。这意味着,数据的长度应该是16字节。
代码
将数据写入MIFARE 1K RFID Tag的Arduino代码如下。我对代码进行了注释,以便您能容易地理解它。
结论
一个简单的演示如何使用RC522 RFID读写模块和Arduino UNO写入数据到RFID卡。您了解了MIFARE Classic 1K RFID Tags的内存布局,内存位置可以写入数据,也可以将一些随机文本写入RFID卡。
2反应
嗨,拉维,谢谢你的有用和信息丰富的文章。我尝试使用上述程序。数据能够成功写入块。但是,当从datablock中读取数据时,它会显示为“authentication fail for read: Timeout in communication”。知道为什么吗?再次感谢!
您可能在读取器与RFID标签/卡通信之前过早地取出了它。
在读取器能够读取之前,尽量不要移除RFID标签。