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

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

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

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


person chalad    schedule 14.04.2011    source источник
comment
Может быть, вы можете использовать модель p2p ACR122U, установите ее в качестве модели инициатора. Я видел ваш другой вопрос Android 2.3.3 Одноранговая связь NFC со считывателем NFC на базе ПК, вы хотите, чтобы Nexus общался с другим приложением на базе ПК. Вы реализовали это? Или вы используете ACR122U для его реализации?   -  person user556615    schedule 16.04.2011
comment
Привет, пользователь 556615, я пытался использовать p2p, чтобы заставить Nexus и ACR122U общаться, но пока ничего не получилось.   -  person chalad    schedule 18.04.2011
comment
Привет, я также пытаюсь использовать p2p для связи Nexus и acr122u, я хочу использовать libnfc для его реализации, но мне это не удалось. У нас такая же проблема. Если у вас есть что-то новое, не могли бы вы мне сказать? Моя электронная почта: [email protected]   -  person user556615    schedule 18.04.2011
comment
На мой взгляд, наша основная проблема заключается в реализации протокола LLCP, я нахожу некоторые полезные источники, которые могут оказаться полезными для вас code.google.com/p/nfc-tools   -  person user556615    schedule 18.04.2011


Ответы (4)


Для «Эмуляции карты» или, другими словами, «Настроить в качестве цели и дождаться инициаторов», см. здесь: 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)

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

person Marko    schedule 20.04.2011
comment
спасибо за ответ - пробовал, не помогло. Я попробую еще раз и дам вам знать о моем прогрессе - person chalad; 20.05.2011
comment
Это выглядит многообещающе. Кто-нибудь получил это, чтобы работать успешно? - person jim; 27.01.2013

Также вы можете попробовать отправить следующий 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

person Marko    schedule 20.04.2011
comment
Привет, Марко, я получил следующий ответ: D5 8D 26 1E D4 01 FE A2 A3 A4 A5 A6 A7 32 46 66 6D 01 01 10 03 02 01 04 01 96 90 - person chalad; 21.04.2011
comment
Я не уверен, что это значит, но мне так и не удалось получить идентификатор или прочитать сектора эмулируемой карты. - person chalad; 21.04.2011
comment
Кто-нибудь понял это? Я попробовал вышеописанное - получил тот же ответ, что и chalad (используя javax.smartcardio для ACR122U). Ответ приходит, когда вы кладете NEXUS S на считыватель ACR122U. В журналах NEXUS S он отображается как обнаружение цели P2P, но получает NFCSTATUS FAILED. Я предполагаю, что понимание компонентов TgInitAsTarget будет необходимо, чтобы двигаться дальше. - person gamozzii; 01.09.2011
comment
Я попробовал эту команду, но получил только ответ 63 / error. Есть идеи, что я сделал не так? Любые команды, которые я должен отправить в первую очередь? - person Momro; 28.02.2013

Чтобы перевести ACR122 (точнее, чип контроллера NFC PN532 внутри него) в режим эмуляции карты, вы должны сделать следующее:

  1. ЧитатьРегистрация:

    > 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. НаписатьРегистрация:

    > FF000000 11 D408 6302 80 6303 80 6305 xx 630D yy 6338 zz
    < D509 9000
    
  4. Установить параметры:

    > FF000000 03 D412 30
    < D513 9000
    
  5. Тгинитастаржет

    > 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).

person Michael Roland    schedule 21.04.2014
comment
Когда я отправляю TgInitAsTarget, я не получаю никакого ответа. Ответ пустой.. Вы знаете, в чем причина? Я посылаю это: {(byte)0xFF, 0x00, 0x00, 0x00 , 0x27 , (byte)0xD4, (byte)0x8C , 0x05 , 0x04, 0x00 , 0x12, 0x34, 0x56 , 0x20 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00} - person S.Pols; 16.07.2014
comment
Похоже, это работает только тогда, когда я кладу свой телефон на ридер. Любая идея? - person S.Pols; 16.07.2014

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

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

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

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

person Sam    schedule 25.05.2013