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

在该项目中,我们将使用RC522 RFID读取器/写入模块学习如何将数据写入MIFARE 1K RFID卡。如果要在标记上存储像学生信息或员工详细信息等标记上的自定义数据,这非常有用。

写入数据到RFID卡 - 使用-RC522-Arduino

我们将使用Arduino作为主机控制器与RC522 RFID模块接口并将数据写入RFID卡。我已经提出了一个关于如何的教程接口RC522 RFID模块与Arduino。在进一步继续之前查看该教程,因为与RFID通信,MFRC522 IC,RC522 RFID模块等有一些基础。

简要介绍Mifare 1K标签的内存地图

如果上传“DumpInfo”示例并打开串行监视器,Arduino将在扫描正确扫描后打印串行显示器上的Mifare 1k RFID标签的所有内容。

了解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个街区组成。

了解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标签的情况下,该块包含4个字节UID(唯一ID)(以及来自NXP的Mifare 4K,Mifare Mini标签)。Mifare Plus,Mifare UltraLight等高级标签Mifare Desfire由7字节UID组成。

RC522-DumpInfo-Serial-3

每个扇区由三个数据块组成,可用于存储用户数据。每个扇区的最后一个块,即,在扇区0的情况下,框图3的框3,在扇区1等的情况下称为扇区拖车。

由于有16个部门,有16个扇区拖车。每个扇区拖车包括以下信息:

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

RC522-DumpInfo-Serial-4

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

笔记:所有扇区都有三个数据块和一个扇区预告片,除扇区0之外。它有一个块(框0)保留用于制造商数据。因此,扇区0有两个数据块和一个扇区预告片。

MIFARE-1K-SECTOR-TAILER

扇区预告片中的访问位决定了扇区的所有块的访问条件。需要为三个数据块和扇区预告片指定访问条件所需的3位。访问条件包括读取,写入,增量,递减,传输和恢复。

mifare-1k-sector-trailer-bits

通过所有这些信息,我们可以得出结论,您可以在Mifare 1K RFID数据中存储47字节的数据。现在让我们了解如何使用Arduino和RC522 RFID模块将数据写入RFID标记。

与Arduino接口RC522

尽管MFRC522 IC支持三种类型的串行通信UART,SPI和我2C,SPI接口是最快,最常见的。以下图像显示了RC522 RFID模块的引脚。

RC522-RFID-REVER-PINOUT

为了在Arduino和RC522之间的可靠通信,让我们使用硬件SPI引脚。下表显示了Arduino和RC522模块之间的连接。

RC522 RFID模块

Arduino Uno.

vcc.

3.3V.
RST.

7.

GND.

GND.
IRQ.

-

味噌

12.
莫斯

11.

SCK.

13.
SS.

10.

需要组件

  • Arduino Uno.
  • RC522 RFID阅读器/写入模块
  • Mifare 1K RFID标签
  • 连接电线

电路图

以下图像显示了Arduino和RC522 RFID模块之间的连接。

Arduino-RC522-RFID模块电路图

将数据写入RFID卡

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

代码

下面给出用于将数据写入Mifare 1K RFID标签的Arduino代码。我评论了代码,以便您可以轻松理解。

写入数据到RFID卡 - 使用-RC522-Serial

结论

使用RC522 RFID读取器/写模块和Arduino UNO将数据写入RFID卡的简单演示。您学习了Mifare Classic 1K RFID标签的内存布局,写入数据的内存位置,并将一些随机文本写入RFID卡。

2回复

  1. 嗨Ravi,感谢您的有用和信息性的文章。我尝试使用上面的程序。数据能够成功地写入块。但是,当从Datablock读取时,它状态为“认证失败,即读取:通信超时”。任何想法如何?再次感谢!

    1. 在读者可以与之通信之前,您可能会尽快取出RFID标签/卡。
      尽量不要删除RFID标签,直到读者可以从中读取。

发表评论

您的电子邮件地址不会被公开。必需的地方已做标记*