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

在此项目中,我们将学习如何使用RC522 RFID读取器 /作者模块将数据写入Mifare 1K RFID卡。如果您想将自定义数据存储在标签上,例如学生信息或员工详细信息,这很有用。

写入data-to-rfid-card使用RC522-Arduino

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

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

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

了解RFID标签的内存布局非常重要,因为我们将知道每个内存位置的重要性,保留哪些内存位置以及免费用于存储用户数据的位置。

以下图像是“ doldinfo”示例的串行监视器输出的屏幕截图。现在让我们分析这个。

RC522-DUMPINFO-SERIAL-1

分析串行监视器输出

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

在这种情况下,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  - 内存映射

扇区0的0块保留用于存储制造商数据。通常,此块包含4个字节UID(唯一ID),如果有Mifare 1K标签(以及Mifare 4K,来自NXP的mifare mini标签)。Mifare Plus,Mifare Ultralight,Mifare Desfire等高级标签由7个字节UID组成。

RC522-Dumpinfo-Serial-3

每个扇区都由三个数据块组成,可用于存储用户数据。每个扇区的最后一个块,即在扇区0的情况下,第3个块第7块,如果是扇区1等,则称为部门拖车。

由于有16个领域,因此有16个部门拖车。每个部门拖车都包含以下信息:

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

RC522-DUMPINFO-SERIAL-4

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

笔记:所有扇区都有三个数据块和一个扇区拖车,除了扇区0。它的制造商数据保留了一个块(块0)。因此,扇区0具有两个数据块和一个扇区拖车。

Mifare-1K扇区拖车

扇区拖车中的访问位确定了扇区所有块的访问条件。为了指定三个数据块和扇区预告片的访问条件,需要3位。访问条件包括读,写,增量,减少,转移和还原。

mifare-1k扇区拖车范围

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

将RC522与Arduino接口

即使MFRC522 IC支持三种类型的串行通信;uart,Spi和我2C,SPI接口是最快,最常见的。下图显示了RC522 RFID模块的引脚。

RC522-RFID-Reader-Pinout

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

RC522 RFID模块

Arduino Uno

VCC

3.3V

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代码。我对代码进行了评论,以便您可以轻松理解它。

写入data-to-rfid-card-using-rc522-serial

结论

关于如何使用RC522 RFID读取器 /写入模块和Arduino Uno将数据写入RFID卡的简单演示。您了解了Mifare Classic 1K RFID标签的内存布局,可行的存储位置,并将一些随机文本写入RFID卡。

8个回应

  1. 嗨,拉维,感谢您提供的有用且内容丰富的文章。我尝试使用上述程序。数据能够成功地写入块。但是,当从Datablock读取时,它将“读取失败:通信中的超时”表示为“验证失败”。关于为什么这样做的任何想法吗?再次感谢!

    1. 在读者可以与之交流之前,您可能会拿出RFID标签 /卡。
      尽量不要删除RFID标签,直到读者可以从中读取它为止。

  2. 在阅读过程中,我会暂停交流。我试图将代码实现到自己的代码中,所以我会做错什么?

  3. 当我以写作部分的评论运行此代码时,它将仅读取1次,然后陷入“ if(!mfrc522.picc_isnewcardpresent())”。我怎样才能解决这个问题?

  4. 嗨,拉维(Ravi),您的文章,我喜欢它,也帮助我完成了我正在做的个人项目。我对您的代码有问题,我注意到在写入和读取方法的“ mfrc522.pcd_authenticate”之后,arduino让arduino完成程序,但是不能让我在任何其他卡上写下任何其他卡,并且每次需要重置arduino。我试图评论该线路,确实以这种方式进行了进展,可以做更多的卡,但是没有它并没有真正在卡上写任何东西,只给每张卡提供了一个错误消息。我想问一下是否可以写在卡上,而不必重置我可以在第二张卡上写的arduino。您认为可能吗?先感谢您

  5. 嗨,这非常有帮助。例如,我想读/写入2个或更多块。如何修改上面的代码以实现这一目标?

  6. 你好。它说:“对于一系列字符阵列的初始化器 - 弦线太长[-fpermissive]”。第20行。如何解决此问题?

  7. 嗨,拉维..
    我不小心写信给0块或块3。现在我的标签不起作用。我可以做些什么来重置标签或修复此标签的东西?

    谢谢。

发表评论

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

电子豪华粉丝
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu
map