2

I ordered Ntag215 from Aliexpress. The tags are identified just fine, yet I have issues writing/reading to them because of failed authentication. I am using Arduino Uno + RFID-RC522 module. This is my code below:

#include <SPI.h> #include <MFRC522.h> #define RST_PIN 9 // #define SS_PIN 10 // 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 Serial.println(F("Scan PICC to see UID, 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; } Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("PICC type: ")); MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); MFRC522::MIFARE_Key key = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; MFRC522::StatusCode status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &key, &(mfrc522.uid)); Serial.println(mfrc522.GetStatusCodeName(status)); } void dump_byte_array(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); } } 

And this is the output I get.

01:27:26.704 -> Scan PICC to see UID, type, and data blocks... 01:27:30.357 -> Card UID: 04 CB 4A 57 19 61 80 01:27:30.390 -> PICC type: MIFARE Ultralight or Ultralight C 01:27:30.422 -> Timeout in communication. 

Always get Timeout in communication. With Mifare 1KB tags this is not an issue. Any idea?

1
  • it times out after 32 ms ... maybe the timeout setting is too short Commented Apr 5, 2023 at 0:39

1 Answer 1

1

Ok after more trial and error and research I have made it possible to Write and Read to Ntag215. Here are code snippets for writing and reading. It was not required to Authenticate to write the data the tag.

Writing: It is actually quite simple. The main rule is that the writing can start from the page 4. And the bufferSize has to be 4. Here is example just writing "A" character to the tag.

 char charToProgram = "A"; byte data = charToProgram; // Data to write (ASCII character "A") byte blockAddr = 4; // Block address to write to // Write the data to the tag MFRC522::StatusCode status = reader.MIFARE_Ultralight_Write(4, &data, 4); if (status == MFRC522::StatusCode::STATUS_OK) { Serial.println("SUCCESS! Wrote to card!"); reader.PICC_HaltA(); } 

Reading:

 int blockAddr = 4; // Block address to read from byte data[18]; byte size = 18; // Write the data to the tag MFRC522::StatusCode status = reader.MIFARE_Read(blockAddr, data, &size); if (status == MFRC522::StatusCode::STATUS_OK) { Serial.print("Read character: "); Serial.println((char) data[0]); reader.PICC_HaltA(); } 

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.