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.

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 Reader | Arduino Uno | Note |
|---|---|---|
| 3V3 | 3V3 | |
| GND | GND | |
| SDA | D10 | through a level shifter to 3.3 V |
| SCK | D13 | through a level shifter to 3.3 V |
| MOSI | D11 | through a level shifter to 3.3 V |
| MISO | D12 | |
| RST | D2 | through 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.
// 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
This guide as plain Markdown. /components/rfid-rc522/arduino-uno.md