如何使用RC522 RFID和Arduino写数据到RFID卡?

在本课题中,我们将学习如何使用RC522 RFID读写器模块将数据写入MIFARE 1K RFID卡。如果您想在标签上存储自定义数据,如学生信息或员工详细信息,这是非常有用的。

Write-Data-to-RFID-Card-using-RC522-Arduino

我们将使用Arduino作为主控制器与RC522 RFID Module进行接口,并将数据写入RFID卡。我已经做了一个教程接口带Arduino的射频识别模块RC522.在进一步学习之前,请查看该教程,因为其中有一些与RFID通信、MFRC522 IC、RC522 RFID模块等相关的基础知识。

MIFARE 1K标签的内存映射

如果您上传“DumpInfo”示例并打开串行监视器,Arduino将在正确扫描后将MIFARE 1K RFID Tag的所有内容打印在串行监视器上。

理解RFID标签的内存布局是非常重要的,因为我们将知道每个内存位置的重要性,哪些内存位置被保留,哪些位置可以用来存储用户数据。

下面的图像是' DumpInfo '示例的串行监视器输出的屏幕截图。现在我们来分析一下。

RC522-DumpInfo-Serial-1

串行监视器输出分析

第一行显示了MFRC522 IC的固件版本,在这种情况下,结果是0x92。在这里,“9”表示MFRC522 IC,“2”表示软件版本2.0。扫描RFID卡后,我们得到了UID, SAK和RFID标签的类型。

在本例中,UID为' 6C 08 88 17 ', SAK为' 08 ',卡类型为MIFARE 1K。

RC522-DumpInfo-Serial-2

接下来,您可以看到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

MIFARE-1K-Memory-Map

0扇区的0块预留用于存放制造商数据。通常,在MIFARE 1K标签的情况下(以及MIFARE 4K, NXP的MIFARE Mini标签),该块包含4字节UID(唯一ID)。先进的标签,如MIFARE Plus, MIFARE超轻,MIFARE DESFire由一个7字节的UID。

RC522-DumpInfo-Serial-3

每个扇区由三个数据块组成,用于存储用户数据。每个扇区的最后一块,即0扇区的第3块,1扇区的第7块,以此类推称为扇区拖车。

因为有16个部门,有16个部门拖车。每个部门拖车包含以下信息:

  • 一个强制性的6字节密钥A。
  • 4字节用于访问位。
  • 可选6字节键B(如果不使用,可以存储数据)。

RC522-DumpInfo-Serial-4

注意:“访问位”区域中的字节9可用于用户数据。

注意:所有扇区有三个数据块和一个扇区拖车除了扇区0。它有一个块(块0)保留给制造商数据。0区有两个数据块和一个扇区拖车。

MIFARE-1K-Sector-Trailer

扇区拖车中的访问位决定了扇区所有块的访问条件。需要3位来指定三个数据块和扇区拖车的访问条件。访问条件包括读、写、增、减、传输和恢复。

MIFARE-1K-Sector-Trailer-Bits

有了这些信息,我们可以得出结论,你可以在MIFARE 1K RFID数据中存储47字节的数据。下面我们来看看如何使用Arduino和RC522 RFID模块将数据写入RFID标签。

接口RC522与Arduino

尽管MFRC522 IC支持三种类型的串行通信;UART, SPI和I2C, SPI接口是最快和最常见的。下图为RC522 RFID模块的引脚。

RC522-RFID-Reader-Pinout

为了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之间的连接。

Arduino-RC522-RFID-Module-Circuit-Diagram

写入数据到RFID卡

我写了一个简单的程序,我写数据到1块(块2),并完全填满它。这意味着,数据的长度应该是16字节。

代码

将数据写入MIFARE 1K RFID Tag的Arduino代码如下。我对代码进行了注释,以便您能容易地理解它。

Write-Data-to-RFID-Card-using-RC522-Serial

结论

一个简单的演示如何使用RC522 RFID读写模块和Arduino UNO写入数据到RFID卡。您了解了MIFARE Classic 1K RFID Tags的内存布局,内存位置可以写入数据,也可以将一些随机文本写入RFID卡。

2反应

  1. 嗨,拉维,谢谢你的有用和信息丰富的文章。我尝试使用上述程序。数据能够成功写入块。但是,当从datablock中读取数据时,它会显示为“authentication fail for read: Timeout in communication”。知道为什么吗?再次感谢!

    1. 您可能在读取器与RFID标签/卡通信之前过早地取出了它。
      在读取器能够读取之前,尽量不要移除RFID标签。

留下一个回复

您的电子邮件地址将不会被公布。必填字段已标记