RFID-RC522 Невозможно прочитать с MIFARE Ultralight

Я испробовал много способов получить и распечатать UID и другие данные из MIFARE Ultralight, но это всегда заканчивалось ошибкой. Я использую считыватель RFID-RC522 с Arduino UNO и библиотекой MFRC522. Обычно я могу получить и напечатать чип типа PICC, но это единственное, что работает.

Вот как я подключил свой считыватель RC522:

<img src="https://i.ytimg.com/vi/23aMjljCLZI/maxresdef ault.jpg ">

Это мой код:

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

#define RST_PIN 9
#define SS_PIN 10

MFRC522 rfid(SS_PIN, RST_PIN);

unsigned long noSignal = 0;

bool lastState = true;
bool read = true;

void setup()
{
    pinMode(2, OUTPUT); //Красный светодиод
    pinMode(3, OUTPUT); //Зеленый светодиод

    Serial.begin(9600);
    SPI.begin();
    while (!Serial);

    rfid.PCD_Init();
    Serial.println("RFID ctecka byla uspesne spustena."); // Печатает «Считыватель RFID успешно запущен»;
    Serial.println();

    changeLed(true);
}

void changeLed(bool red) 
{
    digitalWrite(2, red);
    digitalWrite(3, !red);
}

void loop()
{
    if (millis() - noSignal >= 300) 
    {
        changeLed(true);
        read = true;
    }

    bool state = !rfid.PICC_IsNewCardPresent() && !rfid.PICC_ReadCardSerial();

    if (state != lastState)
        if (state)
            noSignal = millis();
        else if (read)
        {
            read = false;

            changeLed(false);
            noSignal = millis();

            Serial.println("---------Cip detekovan----------"); // Печатает «Обнаружен чип»;
            Serial.println();

            MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);

            Serial.print("Znacka cipu: ");//Выводит тип чипа
            Serial.println(rfid.PICC_GetTypeName(piccType));

            rfid.PICC_DumpToSerial(&rfid.uid); // Вот ошибка

            Serial.println();
            Serial.println("---------Cteni skoncilo----------");//выводит "Чтение завершено"
            Serial.println();

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

    lastState = state;
}

Снимок серийного монитора:

Возможно, важно то, что когда я вызываю PCD_DumpVersionToSerial(), я получаю:

Firmware Version: 0x12 = (unknown)

Где-то я читал, что мой Arduino не совместим с MIFARE Ultralight, и мне нужны карты MIFARE Classic. Это правда? Могу ли я решить эту проблему, используя другую библиотеку или аппаратную проблему? Спасибо

Кстати. Извините за мой английский, это не мой родной язык.

ИЗМЕНИТЬ: Я спросил своего друга, у которого тоже есть Arduino из того же магазина, что и я, может ли он читать карты MIFARE Ultralight. Он сказал, что у него это работает. Так что моя проблема, вероятно, будет на аппаратной стороне. У нас обоих есть неофициальные Arduino от aliexpress.

, 👍0


1 ответ


3

В первых строках кода есть две строки, которые говорят:

#define RST_PIN 9
#define SS_PIN 10

Они определяют контакт RESET на контакте D9, а SDA на контакте D10. Итак, у вас возникла ошибка подключения, попробуйте подключиться, как показано на рисунке, и все будет готово.

подключение по умолчанию

,

Извините, я ошибся. Я подключил контакты, как на вашей картинке. Я обновлю свой вопрос., @David Moškoř

@DavidMoškoř, вы пробовали оригинальный пример?, @Coder_fox

Да, тот же результат, @David Moškoř

Возможно ли, что мои карты используют шифрование «DES3», которое мой Arduino не может расшифровать?, @David Moškoř

@DavidMoškoř возможно, ваша карта использует другую частоту., @Coder_fox