Чтение/запись 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 это не проблема. Есть идеи?
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();
}
- Использование прерываний с RC522
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- rfid_default_keys проверить с помощью RC522
- MFRC522: прошивка неизвестна
- MFRC522 не сканируется карта
- RFID-RC522 не работает, горит красный светодиод
- Считывание одновременно RFID-МЕТКИ с помощью нескольких RFID-считывателей [MFRC522]
- Arduino Uno - Как записать персональные данные в NTAG213 с помощью RFID-RC522
время ожидания истекает через 32 мс ... возможно, время ожидания слишком мало, @jsotola