Чтение/запись Ntag215 с RC522

Я заказал Ntag215 на Aliexpress. Теги идентифицируются просто отлично, но у меня есть проблемы с их записью/чтением из-за неудачной аутентификации. Я использую модуль Arduino Uno + RFID-RC522. Это мой код ниже:

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

#define RST_PIN 9  //
#define SS_PIN 10  //

MFRC522 mfrc522(SS_PIN, RST_PIN);  // Создаем экземпляр MFRC522

void setup() {
  Serial.begin(9600);  // Инициализируем последовательную связь с ПК
  while (!Serial)
    ;                  // Ничего не делать, если последовательный порт не открыт (добавлено для Arduino на базе ATMEGA32U4)
  SPI.begin();         // Инициируем шину SPI
  mfrc522.PCD_Init();  // Инициализация MFRC522
  Serial.println(F("Scan PICC to see UID, type, and data blocks..."));
}

void loop() {
  // Сбросить цикл, если на датчике/считывателе нет новой карты. Это сохраняет весь процесс при простое.
  if (!mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Выбираем одну из карт
  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);
    }
}

И это результат, который я получаю.

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.

Всегда получайте тайм-аут в общении. С метками Mifare 1KB это не проблема. Есть идеи?

, 👍2

Обсуждение

время ожидания истекает через 32 мс ... возможно, время ожидания слишком мало, @jsotola


1 ответ


1

Хорошо, после дополнительных проб и ошибок и исследований я сделал возможным запись и чтение в Ntag215. Вот фрагменты кода для записи и чтения. Не требовалось проходить аутентификацию для записи данных в тег.

Написание: на самом деле это довольно просто. Главное правило состоит в том, что запись может начинаться с 4-й страницы. И bufferSize должен быть равен 4. Вот пример, когда просто пишется "A" символ в тег.

    char charToProgram = "A";
    byte data = charToProgram;       // Данные для записи (символ ASCII "A")
    byte blockAddr = 4;  // Адрес блока для записи

    // Записываем данные в тег
    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();
    }

Чтение:

    int blockAddr = 4;  // Адрес блока для чтения
    byte data[18];
    byte size = 18;
    // Записываем данные в тег
    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();
    }
,