Arduino UNO & RFID-RC522 - Communication Failure

Hi, this is my first post, and I'm having a problem connecting the Arduino to the RC522. I used the MFRC522 library from GithubCommunity. I was trying to use the DumpInfo example:

/*
 * --------------------------------------------------------------------------------------------------------------------
 * Example sketch/program showing how to read data from a PICC to serial.
 * --------------------------------------------------------------------------------------------------------------------
 * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid
 * 
 * Example sketch/program showing how to read data from a PICC (that is: a RFID Tag or Card) using a MFRC522 based RFID
 * Reader on the Arduino SPI interface.
 * 
 * When the Arduino and the MFRC522 module are connected (see the pin layout below), load this sketch into Arduino IDE
 * then verify/compile and upload it. To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M). When
 * you present a PICC (that is: a RFID Tag or Card) at reading distance of the MFRC522 Reader/PCD, the serial output
 * will show the ID/UID, type and any data blocks it can read. Note: you may see "Timeout in communication" messages
 * when removing the PICC from reading distance too early.
 * 
 * If your reader supports it, this sketch/program will read all the PICCs presented (that is: multiple tag reading).
 * So if you stack two or more PICCs on top of each other and present them to the reader, it will first output all
 * details of the first and then the next PICC. Note that this may take some time as all data blocks are dumped, so
 * keep the PICCs at reading distance until complete.
 * 
 * @license Released into the public domain.
 * 
 * Typical pin layout used:
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS      SDA(SS)      10            53        D10        10               10
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
 *
 * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout
 */

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

#define RST_PIN         9          // Configurable, see typical pin layout above
#define SS_PIN          10         // Configurable, see typical pin layout above

MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance

void setup() {
	Serial.begin(9600);		// Initialize serial communications with the PC
	while (!Serial);		// Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
	SPI.begin();			// Init SPI bus
	mfrc522.PCD_Init();		// Init MFRC522
	delay(4);				// Optional delay. Some board do need more time after init to be ready, see Readme
	mfrc522.PCD_DumpVersionToSerial();	// Show details of PCD - MFRC522 Card Reader details
	Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
}

void loop() {
	// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
	if ( ! mfrc522.PICC_IsNewCardPresent()) {
		return;
	}

	// Select one of the cards
	if ( ! mfrc522.PICC_ReadCardSerial()) {
		return;
	}

	// Dump debug info about the card; PICC_HaltA() is automatically called
	mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

It gave me the following error (This is from the FirmwareCheck but is the same):
***************************** MFRC522 Digital self test ***************************** Firmware Version: 0xFF = (unknown) WARNING: Communication failure, is the MFRC522 properly connected? ----------------------------- Only known versions supported ----------------------------- Performing test... ----------------------------- Result: DEFECT or UNKNOWN

This is the circuit:

If someone could help me or correct something I've done, I would really appreciate it. I'm just learning how to use Arduino and I'd like to master it properly.

Thank you for using code tags. However the photo is useless. Make a hand drawn wiring diagram of YOUR setup and take a readable labelled photo.

Also, make sure ALL the serial log is posted also in code tags.

I based the circuit on this image:


And I don't know what do you mean by your last response. Sorry, I'm still trying to figure out how to post correctly here :3

Please present as schematics.

Those RFID modules use a MFRC522 controller, which is a 3.3V device. It is not 5V tolerant. Your Uno is a 5V device and hence outputs 5V level signals. You need to do level shifting on all the output signal levels. Something like this:

1 Like

Oh thank you. I thought that using the 3.3V pin would make it work :3

You can also use resistors for this level shifting like this:-

Almost all the internet gets this circuit wrong. Without level shifting you will damage your Arduino pin or the RFID reader. Yet the idiots out there keep on perpetuating this myth that it is fine not to use any level shifting.

You might want to look at this How to get the best out of this forum before you proceed any further.

It will tell you how to post code on this forum.

The serial log is simply what is printed out on the serial monitor, when you run your code. Post this as if it were code, not as a picture.