MFRC522 RFID Reader with an Arduino Uno

A 13.56 MHz contactless RFID reader/writer module built on NXP's MFRC522 IC, reading and writing ISO/IEC 14443A MIFARE cards over a 3.3V SPI bus.

MFRC522 RFID Reader, A 13.56 MHz contactless RFID reader/writer module built on NXP's MFRC522 IC, reading and writing ISO/IEC 14443A MIFARE cards over a 3.3V SPI bus.
In short

The RC522 is a 3.3 V part, so on an Arduino Uno its 3V3 pin goes to the Uno's 3.3V, never 5V, while it shares the Uno's hardware SPI on D11, D12 and D13 with SDA (its chip select) on D10 and RST on D2. NXP rates its inputs to the I/O supply plus 0.5 V, which the Uno's 5 V signals exceed.

Wiring the MFRC522 RFID Reader to the Arduino Uno

Pin by pin.

MFRC522 RFID ReaderArduino UnoNote
3V33V3
GNDGND
SDAD10through a level shifter to 3.3 V
SCKD13through a level shifter to 3.3 V
MOSID11through a level shifter to 3.3 V
MISOD12
RSTD2through a level shifter to 3.3 V
  • The MFRC522 is a 3.3 V chip whose inputs take no more than its supply plus 0.5 V: put a level shifter (a 74LVC245 or a BSS138 board) on SDA, SCK, MOSI and RST. MISO's 3.3 V reads as a high on the Uno, so it goes direct.

What to know on the Arduino Uno

  • The MFRC522 operates from 2.5 V to 3.6 V, so its supply comes from the Uno's 3.3V pin. Its inputs are rated to the I/O supply plus 0.5 V, about 3.8 V here; the Uno drives SCK, MOSI, SDA and RST at 5 V, so the page's wiring passes those four through a level shifter such as a 74LVC245 or a BSS138 board. Many hobby builds skip it, at the chip's expense.NXP MFRC522 data sheet Rev 3.9, pp. 2, 74
  • MISO comes back at 3.3 V, which the Uno reads as a high (0.6 × VCC, 3.0 V), so that line needs nothing.Microchip ATmega328P datasheet DS40002061B, DC characteristics
  • The RC522's SDA pin is its SPI chip select, not I2C: it goes to D10, the Uno's SS pin, which also keeps D10 an output as SPI master mode requires.Arduino UNO R3 datasheet, p. 10
  • The chip accepts SPI at up to 10 Mbit/s, above the Uno's 8 MHz maximum, so the Uno's default SPI settings work without tuning.NXP MFRC522 data sheet Rev 3.9, p. 1; Microchip ATmega328P datasheet DS40002061B, SPI section

MFRC522 RFID Reader code for the Arduino Uno

Compiled for arduino:avr:uno on 2026-10-30.

Libraries: miguelbalboa/MFRC522
// MFRC522 RFID Reader on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/rfid-rc522/arduino-uno
#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN  10
#define RST_PIN 2
MFRC522 rfid(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  Serial.println("Scan a card...");
}

void loop() {
  if (!rfid.PICC_IsNewCardPresent() || !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 RFID Reader on the Arduino Uno: questions

Can I connect the RC522 to the Arduino Uno's 5V?

No. The MFRC522 runs from 2.5 V to 3.6 V (NXP data sheet, p. 2): power its 3V3 pin from the Uno's 3.3V.

Does the RC522 need a level shifter on an Arduino Uno?

For in-spec operation, yes, on SCK, MOSI, SDA and RST: NXP rates the inputs to the I/O supply plus 0.5 V (p. 74) and the Uno drives 5 V. MISO goes straight to D12.

Can the RC522 share the Uno's SPI bus with an SD card?

Yes with an SD board that releases MISO, each device on its own chip select. The common Catalex microSD module keeps MISO driven and cannot share it.

Keep going

For AI assistants

This guide as plain Markdown. /components/rfid-rc522/arduino-uno.md

What will you build with it?