Главная → Связь

Обзор: RFID-модуль RC522 — карты и метки в самоделке

27 сентября 2026 · Связь

Что это такое

MFRC522 — микросхема NXP, законченный считыватель-писатель для бесконтактных карт на частоте 13,56 МГц. Поддерживает стандарт ISO/IEC 14443 A: MIFARE Classic 1K/4K, Mini, Ultralight, NTAG. На плате модуля уже стоит антенна — четыре витка дорожек, настроенные в резонанс, поэтому никаких внешних цепей не требуется. Именно такой модуль продаётся за копейки и приходит в наборах «стартовый комплект Arduino».

Карта пассивная: собственного аккумулятора у неё нет, она берёт энергию из поля считывателя и отвечает изменением нагрузки на антенне. Поэтому «приложить и подержать» — правильный жест, а расстояние считывания небольшое.

Характеристики по datasheet NXP (MFRC522 Rev. 3.9)

Параметр Значение
Несущая частота 13,56 МГц (кварц 27,12 МГц)
Стандарт ISO/IEC 14443 A / MIFARE, NTAG
Питание VDD (VDDA=VDDD=VDD(TVDD)) 2,5–3,6 В, типовое 3,3 В
Интерфейсы хоста SPI до 10 Мбит/с; I²C до 3,4 Мбит/с (High-speed); UART до 1228,8 кБод
FIFO-буфер 64 байта
Дальность чтения до 50 мм (зависит от антенны)
Общий ток в типовой работе менее 100 мА (все цепи суммарно)
Внутренние режимы экономии hard power-down, soft power-down, программируемый таймер

Честное ограничение — секретность

Для контроля доступа «свой/чужой» по UID модуль подходит отлично. Для защиты данных — нет: у MIFARE Classic защита построена на шифре Crypto-1, который взломан ещё в 2008 году. Если метка нужна «ключ-карта во дворе» — нормально; хранить в секторах что-то настоящее — не стоит. DESFire с AES читается этим чипом аппаратно, но библиотеки Arduino с ней работают плохо.

Подключение

Основной интерфейс — SPI: SDA (это SS), SCK, MOSI, MISO, плюс RST. Вывод IRQ не обязателен. Внимание на питание: у модуля нет своего стабилизатора, питать нужно строго 3,3 В.

Arduino Uno

RC522 Uno
SDA (SS) D10
SCK D13
MOSI D11
MISO D12
RST D9
3.3V 3V3
GND GND
IRQ не подключается

У платы Uno логика 5-вольтовая, а входы модуля — нет. Линии SCK и MOSI, приходящие с Uno, стоит занизить делителями (например 1 кОм сверху / 2 кОм снизу, даст около 3,3 В); на практике многие подключают напрямую и модуль переживает, но это за пределами паспорта. 3,3 В и MISO соединять напрямую можно: 3,3 В Uno воспринимает как HIGH.

ESP32

Логика ESP32 — 3,3 В, поэтому подключение прямое, без делителей: SDA→GPIO5 (SS), SCK→GPIO18, MOSI→GPIO23, MISO→GPIO19, RST→GPIO4. Выводы 3V3 и GND — по питанию.

Рабочий код (чтение UID)

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

MFRC522 rfid(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  Serial.println("Приложите карту...");
}

void loop() {
  if (!rfid.PICC_IsNewCardPresent()) return;
  if (!rfid.PICC_ReadCardSerial()) 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();
}

Библиотека — MFRC522 (в менеджере библиотек Arduino IDE ищется по этому имени). Для записи блоков памяти метки используются Authenticate и MIFARE_Write; ключ по умолчанию для новых меток — шесть байт 0xFF.

Частые ошибки

  1. Питание 5 В вместо 3,3 В. Без стабилизатора на плате модуль выгорает быстро и молча. Диагноз такой ошибки — перестал отвечать навсегда, при этом PCD_Init возвращает ok, а чтения нет.
  2. Читают один и тот же UID, потом «не работает». UID считывается второй раз, а потом — больше никогда. Причина: после первого чтения нужно вызвать rfid.PICC_HaltA(), иначе библиотека считает, что это та же карта, и не отдаёт её как новую.
  3. Запись в блок 0. Нулевой блок первого сектора хранит UID метки и защищён от записи. Попытки MIFARE_Write туда дают отказ, «библиотека не работает» — а она честно говорит, что так нельзя.
  4. Перепутан порядок пинов SPI. На разных платах модуля SDA/MISO/SCK лежат в разном порядке — сверяйтесь с шелкографией на своей конкретной плате, не по чужой схеме.
  5. Слишком тонкое питание. В момент излучения модуль тянет заметный ток (суммарно до 100 мА); от тонких макетных дорожек 3,3 В просядет — дальность считывания падает, а модуль «перезагружается». Ставьте конденсатор 100 мкФ рядом с питанием.

Что дальше с этим делать

Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.

Читайте дальше

Датчики

Ультразвуковой дальномер HC-SR04: обзор и подключение

Для чего он нужен HC-SR04 — ультразвуковой дальномер, с которого начинается почти каждый проект про роботов и умные вещи. Два «глаза» на…

Читать обзор →
Готовые проекты

Автоматическая дверца курятника по датчику освещённости: проект на ESP32 и сервоприводе

Зачем курятнику дверца на автомате Куры встают с рассветом и сами выходят во двор, вечером возвращаются домой. Хозяину остаётся открывать дверцу утром…

Читать обзор →
Готовые проекты

Автономная метеостанция на ESP32: собираем из трёх модулей

Соберём законченное устройство: комнатная метеостанция, которая показывает температуру, влажность и давление на экране и работает от аккумулятора. Все три модуля мы уже…

Читать обзор →