1

So I have an Arduino Uno and an MFRC-522 reader, using a breadboard I've wired it up according to the example sketch which is the mfrc522 DumpInfo sketch.

/*Typical pin layout used:
 * 
 *             MFRC522      Arduino 
 *             Reader/PCD   Uno/101
 * Signal      Pin          Pin     
 * -------------------------------
 * RST/Reset   RST          9          
 * SPI SS      SDA(SS)      10         
 * SPI MOSI    MOSI         11 / ICSP-4
 * SPI MISO    MISO         12 / ICSP-1
 * SPI SCK     SCK          13 / ICSP-3
 */

I've checked the wiring hundreds of times. The console shows Firmware Version: 0x92 = v2.0 Scan PICC to see UID, SAK, type, and data blocks...

but getting a card near the chip, will not scan or dump any info no other information appears on the serial monitor.

I've tried with mifare classic 1k cards a Nexus 6 and a Samsung Galaxy S7

Edit: Everything

    /*
    * ------------------------------------------------------------------------------------------------------------------
    * 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
 */

#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
    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() {
    // Look for new cards
    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));
}

datasheet Nxp website /documents/data_sheet/MFRC522.pdf

When arduino starts and nothing changes when card is tapped

5
  • Phones mosly use NFC which is at a higher freaquency then RFID. Are you sure they are even compatible?
    – Dat Ha
    Dec 31, 2016 at 20:23
  • Pretty positive, But I also used many MiFare Classic cards which this reader is explicitly stated to be compatible with. with absolutely no results
    – Greeley
    Dec 31, 2016 at 20:25
  • Can you post the whole post please?
    – Dat Ha
    Dec 31, 2016 at 21:05
  • Edited main post
    – Greeley
    Dec 31, 2016 at 21:23
  • Have you read MFRC522.h? It seems the 1K tags have a specific type of authentication. Also, be sure that the device has adequate power, during transmit it may suddenly use a lot more power. You may ultimately try another reader or card, to exclude any possible hardware defects in the antenna circuitry.
    – Paul
    Apr 1, 2017 at 7:40

7 Answers 7

1

your breadboard can be buggy. In addition, are you connected VCC to 3V or 5V?
As I remember, you need to connect it to 3V.

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

void setup() {
  Serial.begin(9600);
  SPI.begin();
  RFID.PCD_Init();      // MFRC522
}
#define SS_PIN 10
#define RST_PIN 9

MFRC522 RFID(SS_PIN, RST_PIN);

void loop() {
  if (!RFID.PICC_IsNewCardPresent() || !RFID.PICC_ReadCardSerial())
    return;

  String buffer;
  for (byte byte = 0 ; byte < RFID.uid.size ; byte++)
    buffer += String(RFID.uid.uidByte[byte] < 0x10 ? " 0" : " ") + String(RFID.uid.uidByte[byte], HEX);
  Serial.println("NUID: " + buffer);

  RFID.PICC_HaltA();
  RFID.PCD_StopCrypto1();
}
1

I had a similar problem. I used I2C to check if the board can see the reader. If I2C Bus doesn't detect your reader, then one of your soldering must be faulty... check with a meter and carefully re-solder the erring pin.

1
  • The OP says "the console shows Firmware Version: 0x92 = v2.0". This effectively means that there is a working connection with the reader. So any advice on resoldering doesn't seem useful at all.
    – hypers
    Feb 15, 2020 at 15:53
1

I have several of this board with this condition. As I checked ,they all return the same thing as you send in SPI . I think all of them have hardware problem. Common thing for all of them is In past I supplied them with switching supply and I think this is why they got broken(this chip is very sensitive with supply voltage and YOU MUST NOT CONNECT THEM TO MORE THAN 3.3V EVEN FOR VERY SHORT TIME) . I highly recommend use of Linear regulator for them

1

Same problem as above. Three card readers. Two worked. One didn't. All three readers had two pins bridged on the reader chip. The bridged pins were close to the pin 1 corner. I left the bridge alone as all three readers had the same bridge and one of the pins did not have a trace to it. The faulty card reader also had two pins bridged with solder in a different location. Both pins had separate traces. I removed the solder bridge and the faulty card reader was no longer faulty.

1

I figured out that one get these kind of problems (reader get´s firmware version but can not read tags) are related to power consumption. I tried to power the reader with Heltec Lora 32 Dev board and it schowed exactly this behaviour. Now, connected to another 3,3V source everything works as it should :)

0

Maybe you need a function TO PRINT THE READINGS!!!

This is the loop and a function to print it:

void loop() {
  if ( ! rfid.PICC_IsNewCardPresent())
    return;
  if ( ! rfid.PICC_ReadCardSerial())
    return;

    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }

    Serial.println(F("The NUID tag is:"));
    Serial.print(F("In hex: "));
    printHex(rfid.uid.uidByte, rfid.uid.size);

  rfid.PICC_HaltA();
  rfid.PCD_StopCrypto1();
}

void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }

}
1
  • 1
    mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); Already prints to serial. It's almost like I actually know what I'm doing as far as code goes. in fact I already have my whole project written for this card. it just seems to not actually read anything.
    – Greeley
    Dec 31, 2016 at 22:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.