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

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

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

我们将使用Arduino作为主控制器与RC522 RFID模块接口,并将数据写入RFID卡。我已经做了一个教程接口RC522射频识别模块Arduino。在进一步进行之前,请检查该教程,因为有一些与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)。每个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

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

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

因为有16个扇区,所以有16个扇区拖车。每个扇区拖车包括以下信息:

  • 必选的6字节密钥A。
  • 4字节访问位。
  • 可选6字节密钥B(如果不使用,可以存储数据)。

RC522-DumpInfo-Serial-4

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

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

MIFARE-1K-Sector-Trailer

Sector Trailer中的Access Bits决定了一个扇区中所有块的访问条件,需要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模块之间的连接。

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卡写入一些随机文本。

留下一个回复

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