Эмуляция стандартного периферийного USB-устройства Mifare с помощью RFID-RC522

Оборудование

Плата: Arduino Nano V3.0

Модуль: RFID-RC522 13,56 МГц

Кабель: USB A — мини-USB B


Конфигурация

Физический

Код

/*
* -------------------------------------------------- -------------------------------------------------- ------------------
* Пример скетча/программы, показывающий, как считывать данные с PICC в последовательный порт.
* -------------------------------------------------- -------------------------------------------------- ------------------
* Это пример библиотеки MFRC522; для получения дополнительной информации и других примеров см.: https://github.com/miguelbalboa/rfid
*
* Пример скетча/программы, показывающий, как считывать данные с PICC (то есть с RFID-метки или карты) с использованием RFID на основе MFRC522.
* Считыватель на интерфейсе Arduino SPI.
*
* Когда Arduino и модуль MFRC522 подключены (см. раскладку контактов ниже), загрузите этот скетч в Arduino IDE.
* затем проверьте/скомпилируйте и загрузите его. Чтобы увидеть вывод: используйте Tools, Serial Monitor IDE (нажмите Ctrl+Shft+M). Когда
* вы предъявляете PICC (т. е. RFID-метку или карту) на расстоянии считывания считывателя/PCD MFRC522, последовательный выход
* покажет ID/UID, тип и любые блоки данных, которые он может прочитать. Примечание. Вы можете увидеть сообщения «Тайм-аут связи».
* при слишком раннем удалении PICC с расстояния чтения.
*
* Если ваш ридер поддерживает это, этот скетч/программа будет читать все представленные PICC (то есть: чтение нескольких тегов).
* Таким образом, если вы поставите две или более PICC друг на друга и представите их считывателю, он сначала выведет все
* подробности первого, а затем следующего PICC. Обратите внимание, что это может занять некоторое время, так как все блоки данных сбрасываются, поэтому
* Держите PICC на расстоянии чтения до завершения.
*
* @license Выпущено в общественное достояние.
*
* Используемое типичное расположение выводов:
 * -----------------------------------------------------------------------------------------
 *             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
 */

#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
    mfrc522.PCD_DumpVersionToSerial();  // Показать сведения о PCD — сведения о считывателе карт MFRC522
    Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));
}

void loop() {
    // Ищем новые карты
    if ( ! mfrc522.PICC_IsNewCardPresent()) {
        return;
    }

    // Выбираем одну из карт
    if ( ! mfrc522.PICC_ReadCardSerial()) {
        return;
    }

    // Дамп отладочной информации о карте; PICC_HaltA() вызывается автоматически
    mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

См.: https://github.com/miguelbalboa/rfid/tree/master. /примеры


Цель

Универсальное USB-совместимое устройство чтения/записи Mifare NFC

Таким образом, вы можете получить эти устройства, которые просто подключаются непосредственно к вашему обычному компьютеру через USB и в основном функционируют как обычное HID или периферийное устройство. У меня есть несколько отличных от тех, когда я исследовал последствия для безопасности, связанные с CRYPTO-1 & Карты контроля доступа MiFare Classic. Все они в основном работают одинаково и выдают один и тот же стандартный вывод.

Дело в том, что у меня мало опыта работы с Arduino и разработкой оборудования в целом. USB-порт Arduino, очевидно, используется для последовательной связи с IDE для программирования MEGA328P, и я могу использовать последовательный интерфейс IDE, плоттер и т. д. Но, похоже, он не хочет играть ни с одним из других приложений (MiFare Classic). Universal tooKit и т. д.), которые «просто работают» с (неаффилированными) коммерческими/приобретенными в магазине устройствами.

, 👍3

Обсуждение

Я предполагаю, что коммерческие продукты предоставляют другой интерфейс для USB-хоста (ПК). На Uno/Nano есть дополнительный чип, который предоставляет виртуальный последовательный интерфейс через USB. В Uno можно перепрограммировать этот чип на интерфейс USB, что вы ему скажете (на Nano может быть невозможно подключиться к правильным контактам из-за размера. Никогда этого не делал). Или вы используете Arduino/чип, который уже имеет встроенную поддержку USB, например Leonardo. Хотя я не знаю, сможете ли вы имитировать интерфейс Mifare., @chrisl


1 ответ


3

Вы должны использовать Arduino Mini и библиотеку Keyboard.h, которая поставляется с arduino IDE. Arduino Nano не имеет процессора с поддержкой HID.

Попробуйте это с мини:

#include <Keyboard.h>

void setup() {
 // делаем вывод 2 входом и включаем
  // подтягивающий резистор, чтобы он стал высоким, если только
 // подключен к земле:
 pinMode(2, INPUT_PULLUP);
 Keyboard.begin();
}

void loop() {
 //если кнопка нажата отправить сообщение
   if (digitalRead(2) == LOW) {

     Keyboard.print("Hello!");

   }
}

Сейчас я соберу то же самое, только что протестировал Arduino Mini и добавлю к нему rc522.

,

ты пробовал? как дела?, @voices