Перейти к содержанию

ODRFID-N и ODRFID-M: работа со сторонними приложениями

Как подключить ODRFID к NFC Tools, Cardpeek, libnfc и другим программам в Linux: включение CCID, настройка драйвера и чтение MIFARE Classic.

С ODRFID-N и ODRFID-M можно просматривать память MIFARE Classic в NFC Tools и Cardpeek, сохранять дампы через libnfc и читать карты из своих программ на Python, Node.js и C. Для этого включите интерфейс CCID в конфигураторе считывателя и настройте драйвер на компьютере.

CCID доступен в прошивке 3.14. Подходящую сборку для вашей модели уточните в технической поддержке. Руководство описывает чтение MIFARE Classic 1K в Linux. Для других карт, записи NDEF и подключения в Windows и macOS уточните совместимость в поддержке.

Если выбираете считыватель для программы под ACR122U, прочитайте обзор совместимости ODRFID с приложениями и командами ACR122U. Для ввода UID в Excel или 1С достаточно режима клавиатуры HID, а для работы через COM-порт есть ODRFIDKit Web и AT-команды.

Как связаны CCID, PC/SC и libnfc

CCID — USB-интерфейс считывателя смарт-карт. PC/SC позволяет приложению найти считыватель и отправить ему команды через операционную систему. В Linux за подключение отвечают служба pcscd из pcsc-lite и драйвер libccid.

Одни программы обращаются к PC/SC напрямую, другие используют библиотеку libnfc. От этого зависит подготовка рабочего места:

Приложения и библиотекиЧто установить и настроить
NFC Tools, Cardpeek, pcsc-tools, nfc-pcsc, pyscardCCID-профиль считывателя, pcsc-lite и libccid
Утилиты libnfc, mfoc, libfreefare, mfterm, mfoc-hardnestedТо же самое и наш форк libnfc-odrfid

Для работы через libnfc нужна сборка с поддержкой ODRFID. Исходники доступны в нашем форке libnfc-odrfid. Подготовка исходников и сборка описаны во вкладке libnfc.

Что нужно для чтения карты

Подготовьте MIFARE Classic 1K и ключи к её секторам. UID — идентификатор карты — можно получить без ключа. Чтобы прочитать защищённую память, нужен ключ A или B от сектора, если чтение разрешено его битами доступа.

В командах ниже используется стандартный ключ FFFFFFFFFFFF. Если ключи вашей карты изменены, подставьте свои. ATR, который показывают PC/SC-программы, — это ответ активации карты, а не её UID.

Подготовка считывателя и Linux

Включите CCID в конфигураторе

Откройте ODRFIDConfig, включите интерфейс CCID и выберите составной USB-профиль. Сохраните настройки и перезапустите считыватель.

ПрофильИнтерфейсы
0 — штатныйCDC, клавиатура HID, служебный HID
1 — составнойCCID, CDC, клавиатура HID, служебный HID
2 — только CCIDТолько интерфейс смарт-карт; COM-порт CDC и клавиатура HID в этом профиле не используются

Для начала выберите профиль 1: в нём остаётся COM-порт CDC для настройки устройства. CCID есть у моделей M и N; ODRFID-E работает на 125 кГц и этот интерфейс не поддерживает.

Включение через AT-команды

Переключить профиль можно и через CDC-терминал. Закройте конфигуратор и другие программы, использующие считыватель, затем запросите текущий профиль:

AT+USBMODE?

В ответе +USBMODE=<сохранённый>,<активный> первое число — профиль в настройках, второе — профиль текущего подключения. Для включения CCID выполните:

AT+USBMODE=1
AT+P
AT+Q

AT+P сохраняет настройку, AT+Q перезапускает считыватель и закрывает открытые соединения. После подключения снова отправьте AT+USBMODE?. Ответ +USBMODE=1,1 означает, что составной профиль сохранён и включён. Если считыватель не отвечает на эту команду, обратитесь в поддержку за прошивкой с поддержкой CCID.

Для возврата из профиля 1 в штатный режим повторите команды, заменив первую на AT+USBMODE=0.

Настройте драйвер в Linux

Установите pcsc-lite, libccid и pcsc-tools средствами своего дистрибутива. Затем добавьте ODRFID в список устройств драйвера libccid:

  1. Найдите файл Info.plist. Обычно он находится по пути /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist; в вашем дистрибутиве путь может отличаться. Сохраните копию перед правкой.
  2. Добавьте по одной строке в массивы ifdVendorID, ifdProductID и ifdFriendlyName: 0x0483, 0xA26A и ODRFID CCID соответственно. Позиции новых элементов в трёх массивах должны совпадать.
  3. Чтобы libnfc могла отправлять считывателю служебные (Escape) команды, в том числе без карты, задайте в том же файле ifdDriverOptions = 0x0001.
  4. Перезапустите службу и запустите поиск считывателей:
sudo systemctl restart pcscd
pcsc_scan

В списке должен появиться ODRFID CCID. Поднесите карту: программа покажет Card inserted и строку ATR. Обновление пакета libccid может заменить Info.plist исходным файлом. Если после обновления ODRFID пропал из списка, добавьте строки из шага 2 повторно.

Перед запуском другой программы

Закройте текущее приложение, чтобы освободить считыватель. Если после libnfc программа с прямым доступом к PC/SC не видит карту, перезапустите считыватель командой AT+Q через CDC и откройте программу заново.

Выберите программу

NFC Tools и Cardpeek показывают карту в окне приложения. pcsc-tools помогает проверить подключение. libnfc, mfoc, mfterm и mfoc-hardnested пригодятся для работы в терминале, а nfc-pcsc, pyscard и libfreefare — для собственного ПО.

Нажмите на скриншот, чтобы открыть его в полном размере. Для консольных программ показан фрагмент вывода в терминале.

NFC Tools Desktop 2.7

NFC Tools Desktop показывает сведения о MIFARE Classic 1K и её память. Программа подключается к ODRFID через PC/SC; собирать её из исходников или устанавливать libnfc не требуется.

  1. Настройте CCID и убедитесь, что pcsc_scan видит карту.
  2. Запустите NFC Tools Desktop и выберите ODRFID.
  3. Откройте Information, чтобы посмотреть UID, ATR и тип карты.
  4. Перейдите в Memory для просмотра 64 блоков памяти Classic 1K.
NFC Tools Desktop 2.7: UID, ATR и тип MIFARE Classic 1K во вкладке Information
Information: UID, тип карты и объём памяти.
NFC Tools Desktop 2.7: прочитанная память MIFARE Classic во вкладке Memory
Memory: содержимое блоков карты после чтения.

Подключение по HID/CDC и обновление прошивки описаны в инструкции ODRFID-M/N/E.