RFID-модуль RC522: подключение к Arduino, чтение и запись меток

RFID-модуль RC522: подключение к Arduino, чтение и запись меток

RC522 — считыватель RFID-меток на 13,56 МГц с интерфейсом SPI. Разбираем выводы, подключение к Arduino и работу с библиотекой MFRC522: UID, дамп памяти, запись.

Коротко о технологии RFID

RFID — это бесконтактная идентификация объектов по радиоканалу. У каждой электронной метки есть уникальный идентификатор. Считыватель (ридер) излучает электромагнитные волны определённой частоты, а метка в ответ передаёт свой номер, содержимое памяти и другие данные. Ридеры умеют не только читать метки, но и записывать в них информацию.

К достоинствам технологии относят отсутствие контакта, высокую скорость считывания, возможность скрытой установки меток и работы во вредных средах, а также защищённость от подделки. Метки бывают активными и пассивными; у пассивных нет собственного источника энергии, они питаются током, который наводит в антенне сигнал ридера. Рабочие частоты делятся на диапазоны LF (125–134 кГц), HF (13,56 МГц) и UHF (860–960 МГц).

Модуль RFID-RC522

В проектах на Arduino роль считывателя чаще всего выполняет модуль RFID-RC522. Он построен на микросхеме MFRC522 компании NXP и работает с метками диапазона HF. В комплекте с модулем идут две метки: карта и брелок.

RFID-модуль RC522
Напряжение питания3,3 В
Потребляемый ток13–26 мА
Рабочая частота13,56 МГц
Дальность считывания0–60 мм
ИнтерфейсSPI
Максимальная скорость передачи10 Мбит/с
Размер40 × 60 мм

Интерфейс и выводы

Сама микросхема MFRC522 поддерживает SPI, UART и I2C; интерфейс выбирается логическими уровнями на определённых её выводах. На модуле RC522 выбран SPI.

Назначение выводов модуля RC522
  • SDA — выбор ведомого устройства
  • SCK — сигнал синхронизации
  • MOSI — данные от ведущего к ведомому
  • MISO — данные от ведомого к ведущему
  • RST — сброс
  • IRQ — прерывание
  • GND — земля
  • Vcc — питание 3,3 В

Сигнал RST приходит с цифрового выхода контроллера: низкий уровень перезагружает считыватель. Низкий уровень на этом выводе означает также режим сна; чтобы вывести модуль из него, на RST подают HIGH.

Подключение к Arduino

Для сборки потребуются Arduino Uno, макетная плата, модуль RFID-RC522, метки на 13,56 МГц и провода. Линии SPI можно брать не только с цифровых выводов платы, но и с разъёма ICSP, на который выведен тот же интерфейс. В примерах вывод сброса модуля подключён к выводу 9, а выбор ведомого — к выводу 10.

Схема подключения RC522 к Arduino Uno
Распиновка разъёма ICSP Arduino для интерфейса SPI

Чтение UID и типа метки

Для работы с модулем применяется Arduino-библиотека MFRC522, вместе с ней подключается стандартная SPI. Первый скетч запускает последовательный порт на 9600, шину SPI и инициализирует считыватель вызовом PCD_Init(). В цикле программа ждёт появления новой метки, считывает её и выводит в монитор порта UID в шестнадцатеричном виде и название типа метки, после чего делает паузу в одну секунду. Проверять можно на карте и брелоке из комплекта, а также на наклеиваемых метках Ultralight C.

Дамп памяти и запись данных

Содержимое памяти метки выводит второй скетч: после обнаружения и чтения карты достаточно одного вызова rider.PICC_DumpToSerial(&(rider.uid)), где rider — созданный в программе объект MFRC522. Объём памяти у разных меток различается; у Ultralight C он составляет всего 64 байта.

Чтение и запись ведутся поблочно, и размер блока зависит от типа метки: у Ultralight C блок занимает 4 байта. Третий скетч принимает через последовательный порт номер страницы и число, раскладывает число на старший и младший байты и записывает их в первые два байта выбранного блока функцией MIFARE_Ultralight_Write. Команда в порт должна начинаться символом * и содержать поля, разделённые точкой с запятой, а завершается ввод символом #. Номер страницы программа ограничивает диапазоном от 7 до 15, значение — не более 1000. После записи в порт выводятся статус операции и свежий дамп памяти, по которому видно, что данные сохранились.

Если метка не читается

Причин обычно две: ошибка в подключении модуля либо метка, которую этот считыватель не поддерживает.

← Все статьи