ACR122 - Эмуляция карты - PullRequest
       75

ACR122 - Эмуляция карты

11 голосов
/ 14 апреля 2011

Как заставить бесконтактный считыватель NFC ACR122U вести себя как тег (режим эмуляции карты)?В проспекте утверждается, что устройство может выполнять эмуляцию карты, но SDK, по-видимому, не предоставляет пример или документацию для этой функции.

Кто-нибудь знает, как это сделать?Требуется ли дополнительное программное обеспечение?Обратите внимание, что моей целевой платформой является MS Windows.

Заранее спасибо

Ответы [ 4 ]

5 голосов
/ 20 апреля 2011

Для «Эмуляции карты» или, другими словами, «Настроить как цель и ждать инициаторов», пожалуйста, обратитесь сюда: http://code.google.com/p/nfcip-java/source/browse/trunk/nfcip-java/doc/ACR122_PN53x.txt

** Command to PN532 **
0xd4 0x8c TgInitAsTarget instruction code
0x00 Acceptable modes
(0x00 = allow all, 0x01 = only allow to be
initialized as passive, 0x02 = allow DEP only)

_6 bytes (_MIFARE_)_:
0x08 0x00 SENS_RES
0x12 0x34 0x56 NFCID1
0x40 SEL_RES

_18 bytes (_Felica_)_:
0x01 0xfe 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7
NFCID2
0xc0 0xc1 0xc2 0xc3 0xc4 0xc5 0xc6 0xc7
?
0xff 0xff System parameters?
0xaa 0x99 0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11
NFCID3
0x00 ?
0x00 ?

Это ответ, когда инициатор активировал эту цель:

** Response from PN532 **
0xd5 0x8d TgInitAsTarget response code
0x04 Mode
(0x04 = DEP, 106kbps)

Дайте мне знать, если это работает!

1 голос
/ 21 апреля 2014

Чтобы перевести 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 для успеха).

1 голос
/ 20 апреля 2011

Также вы можете попробовать отправить следующий ADPU в HEX, чтобы перевести считыватель в режим «Эмуляция карты»:

FF 00 00 00 27 D4 8C 00 08 00 12 34 56 40 01 FE A2 A3 A4 A5 A6 A6 A7 C0 C1 C2 C3 C4 C5 C6 C7 FF FF AA 99 88 77 66 55 44 33 22 11 00 00

0 голосов
/ 25 мая 2013

Вы можете использовать LibNFC. У него есть пример кода для этого.

К сожалению, я до сих пор так и не заработал в Windows. Возможно, вам придется скомпилировать libnfc для конкретных драйверов.

Кроме того, ACR122u, кажется, довольно плохо поддерживается многими библиотеками. Видимо, он не предназначен для этого использования. Есть определенные проблемы для эмуляции карты (например, время ожидания). Нам действительно всем нужно остановиться на ACR122u. Я только что купил то, что было популярно и легко досталось, но теперь жалею об этом.

Для будущих браузеров / искателей, сталкивающихся с этим: пожалуйста, проверьте раздел совместимости на сайте libnfc и купите то, что они рекомендуют!

...