RFID RC522 射频卡读写模块详解
简介
RC522 是一款高度集成的 RFID(射频识别)读写芯片,工作频率为 13.56MHz,支持 ISO/IEC 14443 Type A 和 Type B 协议。它广泛应用于门禁系统、公交卡、校园卡、智能支付等场景。经常与 Arduino、树莓派等开发板配合使用,实现对 MIFARE 系列射频卡的读写操作。
硬件特性
- 工作电压:2.5V ~ 3.3V(切勿接 5V,否则可能烧毁)
- 通信接口:SPI(最高 10 Mbps)、I2C、UART
- 支持卡类型:MIFARE 1K/4K、MIFARE Ultralight、NTAG 系列等
- 读卡距离:约 0 ~ 60mm(取决于天线和卡片)
- 内部集成振荡器、调制解调器、CRC 校验等
引脚定义(以常见模块为例)
- SDA(片选):连接到主机的 SS 引脚
- SCK:SPI 时钟
- MOSI:主机输出,从机输入
- MISO:主机输入,从机输出
- IRQ:中断输出(通常不接)
- GND:地
- RST:复位
- 3.3V:电源正
与 Arduino 连接示例(SPI)
- RC522 SDA -> Arduino D10
- RC522 SCK -> Arduino D13
- RC522 MOSI -> Arduino D11
- RC522 MISO -> Arduino D12
- RC522 RST -> Arduino D9
- RC522 3.3V -> Arduino 3.3V
- RC522 GND -> Arduino GND
常用库与代码示例
使用 Arduino 时,常用库为 MFRC522(由 Github 用户 miguelbalboa 维护)。
`cpp
#include #include
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SSPIN, RSTPIN);
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
Serial.println("Ready to read RFID...");
}
void loop() {
if (!rfid.PICCIsNewCardPresent()) return;
if (!rfid.PICCReadCardSerial()) return;
Serial.print("UID:");
for (byte i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
rfid.PICC_HaltA();
delay(100);
}`
读卡流程
- 初始化 SPI 和 RC522
- 寻卡(Request)
- 防冲突(Anticollision)获取卡号(UID)
- 选卡(Select)
- 认证(Authentication)——知道密钥才能读写数据块
- 读取或写入数据块
- 停卡(Halt)
写卡注意事项
- 默认密钥通常为
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF(6 字节) - 每个扇区有 4 个块(MIFARE 1K 共 16 个扇区,64 块),其中第 3 块为控制块,存放密钥和访问控制位。
- 修改控制块可能导致卡片永久锁定或无法访问,请谨慎操作!
RFID 与 NFC 的区别与联系
- RFID 是广义概念,NFC 是 RFID 的一个子集,工作于 13.56MHz。
- NFC 通常添加了点对点通信和卡模拟功能。
- RC522 可以读 NFC 标签(如 NTAG213),但不支持 NFC 点对点模式。
应用场景
- 门禁一卡通
- 考勤系统
- 会员卡管理
- 物流追踪
- 互动装置与玩具
常见问题
- 无法读卡? 检查是否有 3.3V 供电、引脚连接、天线焊接。
- 串口打印乱码? 确认波特率一致(通常 9600)。
- 卡片无法写入? 可能未正确认证,或卡片被锁死。
- 与手机 NFC 通信? 用手机可读取 RC522 尚未支持的 TypeB 卡? RC522 主要支持 TypeA,对手机模拟卡有可能部分读取。
RC522 凭借低成本、易用性和完整文档,始终是入门 RFID 技术的首选模块。结合合适的开发板和库,读者可快速实现宠物识别、门禁打卡等趣味项目。
如若转载,请注明出处:http://www.jingduduihua.com/product/42.html
更新时间:2026-09-19 02:15:03