RFID Sticker beschreiben - Name: Authentication failed: Timeout in communication

Hey,
ich bin Anfänger und habe diese NFC Sticker:

https://www.amazon.de/Sticker-selbstklebend-kompatibel-Lesegeräten-Aufkleber-Weiß/dp/B06XH2R5ZP/ref=sr_1_5?__mk_de_DE=ÅMÅŽÕÑ&crid=VK9B7MV66Z26&keywords=rfid+sticker+nfc&qid=1706090048&sprefix=rfid+sticker+nfc%2Caps%2C125&sr=8-5

und diesen reader:

https://www.amazon.de/ARCELI-RFID-RC-522-Modul(Schwarz)-Proximity-Modul-kompatibel/dp/B0CM9M5BGM/ref=sr_1_3?__mk_de_DE=ÅMÅŽÕÑ&crid=3LY0M2BCOV0Y7&keywords=rfid+reader+mini&qid=1706090086&sprefix=rfid+reader+mini%2Caps%2C120&sr=8-3

Ich nutze einen Arduino Nano und möchte den Namen auf dem Sticker beschreiben und auslesen. Dafür habe ich den Beispielsketch rfid_read_personal_data genommen und bekomme beim lesen und schreiben diese Fehlermeldung:

Card Detected:

11:19:26.242 -> Card UID: 04 D9 DF 1A 94 11 90

11:19:26.274 -> Card SAK: 00

11:19:26.274 -> PICC type: MIFARE Ultralight or Ultralight C

11:19:26.340 -> Name: Authentication failed: Timeout in communication.

Hier noch der komplette sketch:

/*
 * Initial Author: ryand1011 (https://github.com/ryand1011)
 *
 * Reads data written by a program such as "rfid_write_personal_data.ino"
 *
 * See: https://github.com/miguelbalboa/rfid/tree/master/examples/rfid_write_personal_data
 *
 * Uses MIFARE RFID card using RFID-RC522 reader
 * Uses MFRC522 - Library
 * -----------------------------------------------------------------------------------------
 *             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
  SPI.begin();                                                  // Init SPI bus
  mfrc522.PCD_Init();                                              // Init MFRC522 card
  Serial.println(F("Read personal data on a MIFARE PICC:"));    //shows in serial that it is ready to read
}

//*****************************************************************************************//
void loop() {

  // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory.
  MFRC522::MIFARE_Key key;
  for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;

  //some variables we need
  byte block;
  byte len;
  MFRC522::StatusCode status;

  //-------------------------------------------

  // 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;
  }

  Serial.println(F("**Card Detected:**"));

  //-------------------------------------------

  mfrc522.PICC_DumpDetailsToSerial(&(mfrc522.uid)); //dump some details about the card

  //mfrc522.PICC_DumpToSerial(&(mfrc522.uid));      //uncomment this to see all blocks in hex

  //-------------------------------------------

  Serial.print(F("Name: "));

  byte buffer1[18];

  block = 4;
  len = 18;

  //------------------------------------------- GET FIRST NAME
  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(mfrc522.uid)); //line 834 of MFRC522.cpp file
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("Authentication failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  status = mfrc522.MIFARE_Read(block, buffer1, &len);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("Reading failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  //PRINT FIRST NAME
  for (uint8_t i = 0; i < 16; i++)
  {
    if (buffer1[i] != 32)
    {
      Serial.write(buffer1[i]);
    }
  }
  Serial.print(" ");

  //---------------------------------------- GET LAST NAME

  byte buffer2[18];
  block = 1;

  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &key, &(mfrc522.uid)); //line 834
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("Authentication failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  status = mfrc522.MIFARE_Read(block, buffer2, &len);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("Reading failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  //PRINT LAST NAME
  for (uint8_t i = 0; i < 16; i++) {
    Serial.write(buffer2[i] );
  }


  //----------------------------------------

  Serial.println(F("\n**End Reading**\n"));

  delay(1000); //change value if you want to read cards faster

  mfrc522.PICC_HaltA();
  mfrc522.PCD_StopCrypto1();
}
//*****************************************************************************************//

Eine der Amazon rezessionen sagt, dass das Beschreiben etwas kompliziert sei. Es aber eine Anleitung gebe und es irgendwie doch gehe.

Aber scheinbar gibt es da eine spezielle Smartphone app dafür.

Vermutlich lässt sich der Tag nicht mit deiner vorhandenen Hardware beschreiben.

Das ist ein NTAG - Chip.
Den habe ich mit deinen Reader noch nicht einmal gelesen bekommen.

Ich habe dann mich für DIESEN Reader entschieden.

https://www.amazon.de/ICQUANZX-Nahfeldkommunikationsleser-Modul-Kit-Schlüsselkarte-DIY-Smartphone-Android-Handy/dp/B07VT431QZ

Der via SPI bekommt die NTAGS gelesen.
Beachte aber das dein NTAG nur 4 Bytes pro Seite hat.
Und das du die Spezielle NTAG-Routine zum Lesen aufrufen must, bei den PN532

Den Code für das Rote Teil kann ich dir notfalls geben. Ist aber auch in den Beispielen der PN532 Libs drin.

Achja, dein Reader funktioniert perfekt mit MiFare Chips.
Aber Warnung : Beschreibe NIEMALS einen Block KLEINER 4.
Anders gesagt, der erste Block für Daten hat die Nr. 4

Oder das Teil ist möglicherweise Defekt.

Gruß

Pucki
1 Like

An alle.

Sollte es eine Code geben der mit den MFRC522 Modul NTAG 2** lesen kann, würde nicht nur der TO sich über Code und Libs freuen.

Ich habe mit den blauen Reader es 2 Tage versucht und dann den Roten (s.o.) gekauft.

Wäre fein, wenn ich mein Blauen MFRC522 nicht in den Grabelkiste verbannen müsste.

Gruß

Pucki
1 Like

Kleiner Tipp am Rande.

Zum Testen und so : Falls du ein Android-Handy hast empfehle ich dir die NFC-Tools (oranges Logo mit einen Handy mit N in der Mitte).

Damit kannst du die Teile auch Formatieren etc.

Gruß

Pucki
1 Like

Hey,
also hatte mit meinem am Anfang auch schwierigkeiten, die Lösung war den RST Pin an 5V anzuschließen.

Mit den Blocks habe ich nicht so verstanden, aber danke für den Tipp xD

Das habe ich jetzt auch geschafft und das war ganz hilfreich. Habe mit der App einen Text darauf gespeichert und konnte ihn auslesen. Das war alles, was ich wollte, chatgpt hat mir da geholfen. Deswegen ist es vielleicht auch nicht ganz professionell, funktioniert bei mir aber.

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

#define RST_PIN 9
#define SS_PIN 10

MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  Serial.println("Scan for an NFC card...");
}

void loop() {
  if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
    for (byte block = 0; block < 3; block++) {
      readTextFromNFC(block);
    }
    mfrc522.PICC_HaltA();
  }
}

void readTextFromNFC(byte block) {
  byte sector = 1;  // Modify the sector based on your card's structure

  byte buffer[32];
  byte bufferSize = sizeof(buffer);

  if (mfrc522.MIFARE_Read(sector * 4 + block, buffer, &bufferSize) == MFRC522::STATUS_OK) {
    String content = "";

    // Convert HEX to ASCII
    for (byte i = 0; i < bufferSize; i++) {
      char c = (char) buffer[i];
      content += c;
    }

    Serial.print("Text on the card (Block ");
    Serial.print(block);
    Serial.print("): ");
    Serial.println(content);
  } else {
    Serial.println("Error reading block.");
  }
}

Der richtige Block war der 2. es wurden auch maximal 4 angezeigt.

Hier ein Auszug aus der Beispiel für die PN532 . Ist aber unabhängig vom Reader das es sich um NTAG-Eigenschaften handelt.

// We probably have an NTAG2xx card (though it could be Ultralight as well)
      Serial.println("Seems to be an NTAG2xx tag (7 byte UID)");

      // NTAG2x3 cards have 39*4 bytes of user pages (156 user bytes),
      // starting at page 4 ... larger cards just add pages to the end of
      // this range:

      // See: http://www.nxp.com/documents/short_data_sheet/NTAG203_SDS.pdf

      // TAG Type       PAGES   USER START    USER STOP
      // --------       -----   ----------    ---------
      // NTAG 203       42      4             39
      // NTAG 213       45      4             39
      // NTAG 215       135     4             129
      // NTAG 216       231     4             225

Im Prinzip bestimmt die Speichergrösse der Chips die Anzahl der Pages.

Wenn du in der von mir empfohlenen App auf "Speicher lesen" gehst siehst du die Pages unter den Begriff "Sectors". Und den möglichen Text darin in HEX.

Gruß

Pucki
1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.