NFC ACR122 TgInitAsTarget, цель освобождения инициатора

Я пытаюсь заставить мое устройство ACR122 (usb) эмулировать пассивную метку NFC, но испытываю трудности с установлением связи. Я надеюсь, что кто-то может увидеть, что я делаю не так, и помочь указать мне правильное направление.

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

Мы используем устройство Samsung Galaxy S3 Android 4.3 для тестирования и наблюдаем следующее:

Transmit (TgInitAsTarget)
....'......4V@..  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 
...wfUD3"...      AA 99 88 77 66 55 44 33 22 11 00 00 

Receive
..%....7.5<...w.  D5 8D 25 1E D4 00 08 37 D9 35 3C BF D5 AE 77 9C 
...2Ffm.........  00 00 00 32 46 66 6D 01 01 11 03 02 00 13 04 01 
...               96 90 00 

Transmit (GetData)
.......           FF 00 00 00 02 D4 86 

Receive
..)..             D5 87 29 90 00 

Команда TgInitAsTarget, кажется, работает, возвращая режим 0x25, который, как мы понимаем, означает "активный режим, DEP, 424 кбит / с".

Но затем команда "GetData" немедленно завершается ошибкой, возвращая код состояния 0x29 "PN532, настроенный в качестве цели, был освобожден его инициатором".

Мы попытались изменить команду TgInitAsTarget в других режимах (вместо режима "Все" 0x00), попробовав следующее, которое все еще возвращает 0x29 для следующей команды GetData:

  • Режим 0x01 "Пассивный", в результате режим ответа 0x04 "DEP"
  • Режим 0x02 "DEP", в результате режим ответа 0x25 (такой же, как "Все")
  • Режим 0x03 "DEP Passive" приводит к режиму ответа 0x04 "DEP"

Во всех случаях это выглядит так, как будто Android не поддерживает соединение, хотя я недостаточно знаком с протоколами NFC DEP, чтобы понять, что я здесь делаю неправильно. Я прочитал ссылку на чип PN532, и, кажется, это указывает на то, что я все делаю правильно.

Я также попробовал устройство Windows Phone NFC, и оно встречает ту же проблему и тот же код ошибки в GetData.

Любая помощь от тех, кто знаком с NFC, будет принята с благодарностью.

Дейв

1 ответ

Решение

Для перевода 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 для успеха).

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