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 внутри него) в режим эмуляции карты вы должны сделать следующее:

  1. ReadRegister:

    > FF000000 08 D406 6305 630D 6338
    < D507 xx yy zz 9000
    
  2. Обновить значения регистра:

    xx = xx | 0x004;  // CIU_TxAuto |= InitialRFOn
    yy = yy & 0x0EF;  // CIU_ManualRCV &= ~ParityDisable
    zz = zz & 0x0F7;  // CIU_Status2 &= ~MFCrypto1On
    
  3. WriteRegister:

    > FF000000 11 D408 6302 80 6303 80 6305 xx 630D yy 6338 zz
    < D509 9000
    
  4. SetParameters:

    > FF000000 03 D412 30
    < D513 9000
    
  5. TgInitAsTarget

    > FF000000 27 D48C 05 0400 123456 20 000000000000000000000000000000000000 00000000000000000000 00 00
    < D58D xx ... 9000
    

    куда xx должно быть равно 0x08.

  6. Общайтесь, используя последовательность команд 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 и купите то, что они рекомендуют!

Другие вопросы по тегам