ACR122 - Эмуляция карты
Как заставить бесконтактный считыватель NFC ACR122U вести себя как тег (режим эмуляции карты)? Проспект утверждает, что устройство может выполнять эмуляцию карты, но SDK, похоже, не предоставляет пример или документацию для этой функции.
Кто-нибудь знает, как это сделать? Требуется ли дополнительное программное обеспечение? Обратите внимание, что моей целевой платформой является MS Windows.
заранее спасибо
4 ответа
Для "Эмуляции карты" или, другими словами, "Настроить как цель и ждать инициаторов", пожалуйста, обратитесь сюда: http://code.google.com/p/nfcip-java/source/browse/trunk/nfcip-java/doc/ACR122_PN53x.txt
** Команда на PN532 ** 0xd4 0x8c Код инструкции TgInitAsTarget 0x00 Приемлемые режимы (0x00 = разрешить все, 0x01 = разрешить только инициализируется как пассивный, 0x02 = разрешить только DEP) _6 байт (_MIFARE_)_: 0x08 0x00 SENS_RES 0x12 0x34 0x56 NFCID1 0x40 SEL_RES _18 байт (_Felica_)_: 0x01 0xfe 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 NFCID2 0xc0 0xc1 0xc2 0xc3 0xc4 0xc5 0xc6 0xc7? 0xff 0xff Системные параметры? 0xaa 0x99 0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11 NFCID3 0x00? 0x00?
Это ответ, когда инициатор активировал эту цель:
** Ответ от PN532 ** 0xd5 0x8d TgInitAsTarget код ответа Режим 0x04 (0x04 = DEP, 106 кбит / с)
Дайте мне знать, если это работает!
Также вы можете попробовать отправить следующий ADPU в HEX, чтобы перевести считыватель в режим "Эмуляция карты":
FF 00 00 00 27 D4 8C 00 08 00 12 34 56 40 01 FE A2 A3 A4 A5 A6 A7 C0 C1 C2 C3 C4 C5 C6 C7 FF FF AA 99 88 77 66 55 44 33 22 11 00 00
Для перевода ACR122 (или, скорее, микросхемы контроллера NFC PN532 внутри него) в режим эмуляции карты вы должны сделать следующее:
ReadRegister:
> FF000000 08 D406 6305 630D 6338 < D507 xx yy zz 9000
Обновить значения регистра:
xx = xx | 0x004; // CIU_TxAuto |= InitialRFOn yy = yy & 0x0EF; // CIU_ManualRCV &= ~ParityDisable zz = zz & 0x0F7; // CIU_Status2 &= ~MFCrypto1On
WriteRegister:
> FF000000 11 D408 6302 80 6303 80 6305 xx 630D yy 6338 zz < D509 9000
SetParameters:
> FF000000 03 D412 30 < D513 9000
TgInitAsTarget
> FF000000 27 D48C 05 0400 123456 20 000000000000000000000000000000000000 00000000000000000000 00 00 < D58D xx ... 9000
куда
xx
должно быть равно 0x08.Общайтесь, используя последовательность команд TgGetData и TgSetData:
> FF000000 02 D486 < D587 xx <C-APDU> 9000
куда
xx
это код состояния (должен быть0x00
для успеха) и C-APDU это команда, отправленная от читателя.> FF000000 yy D48E <R-APDU> < D587 xx 9000
куда
yy
2 + длина R-APDU (ответ) иxx
это код состояния (должен быть0x00
для успеха).
Вы можете использовать LibNFC. У него есть пример кода для этого.
К сожалению, в Windows до сих пор это не работает должным образом. Вам, вероятно, придется скомпилировать libnfc для конкретных драйверов.
Кроме того, ACR122u, кажется, довольно плохо поддерживается многими библиотеками. Видимо, он не предназначен для этого использования. Есть определенные проблемы для эмуляции карты (например, время ожидания). Нам действительно всем нужно остановиться на ACR122u. Я только что купил то, что было популярно и легко получить, но теперь жалею об этом.
Для будущих браузеров / искателей, сталкивающихся с этим: пожалуйста, проверьте раздел совместимости на сайте libnfc и купите то, что они рекомендуют!