Эмуляция карты NFC, выпуск S3 (Android 4.3) и ACR122U

В нашем проекте мы пытаемся эмулировать PICC ISO14443-3 в считывателе NFC ACS ACR122U и считывать эту карту с помощью телефонов NFC (Samsung S3 или S4). В случае S4 мы можем успешно связаться с эмулируемой картой, но в случае S3 событие NFC отсутствует.

Мы отметили все команды / ответы и журналы от Android (logcat), которые указывают, что S3 не может активировать связь LLCP. Я публикую все имеющиеся у нас данные, пожалуйста, помогите нам в решении проблемы.

КОМАНДА / ОТВЕТ на ACR122u (контроллер PN532 в считывателе):

COMMAND:FF0000002DD48C0400000000002001FE0FBBBAA6C9890000000000000000FFFF01FE0FBBBAA6C98900000647666D01011000
RESPONSE:D58D08E080

COMMAND:FF00000002D486
RESPONSE:D5870000A4040007D276000085010100

COMMAND:FF00000004D48E6A82
RESPONSE:D58F00

COMMAND:FF00000002D486
RESPONSE:D5870000A4040007D2760000850100

COMMAND:FF00000004D48E6A82
RESPONSE:D58F00

COMMAND:FF00000002D486
RESPONSE:D5870000A4040C05A00000000100 (Data we want to send to emulated card from NFC phone)

отклик D58D08E080 означает, что кард-ридер эмулируется как:

  • ИСО / МЭК 14443-4 PICC -> ДА
  • DEP -> НЕТ
  • ТИП РАМКИ -> Mifare

Теперь, когда мы помещаем S4 поверх читателя, мы имеем следующий журнал:

02-10 10:23:13.711: I/BrcmNci(3355): --
02-10 10:23:13.711: I/BrcmNci(3355): TX: Type 4 Tag Command (13 bytes)
02-10 10:23:13.711: I/BrcmNci(3355): CLA:0x00
02-10 10:23:13.711: I/BrcmNci(3355): INS:0xA4(Select)
02-10 10:23:13.711: I/BrcmNci(3355): P1:0x04(Name)
02-10 10:23:13.711: I/BrcmNci(3355): P2:0x00(First or Only)
02-10 10:23:13.711: I/BrcmNci(3355): Lc:0x07(7)
02-10 10:23:13.711: I/BrcmNci(3355): Data(7 bytes)
02-10 10:23:13.711: E/AudioResampler(2497): Unsupported sample format, 1 bits, 2 channels
02-10 10:23:13.716: I/BrcmNci(3355): 00 : d2 76 00 00 85 01 01
02-10 10:23:13.716: I/BrcmNci(3355): Le:0x00(0)
02-10 10:23:13.716: I/BrcmNci(3355): --
02-10 10:23:13.716: I/AudioHardwareTinyALSA(2497): AudioStreamOutALSA::write setDevice

02-10 10:23:13.741: I/BrcmNci(3355): --
02-10 10:23:13.741: I/BrcmNci(3355): RX: Type 4 Tag Response (2 bytes)
02-10 10:23:13.746: I/BrcmNci(3355): SW:0x6A82(Not Found)
02-10 10:23:13.746: I/BrcmNci(3355): --
02-10 10:23:13.746: I/BrcmNci(3355): --
02-10 10:23:13.746: I/BrcmNci(3355): TX: Type 4 Tag Command (12 bytes)
02-10 10:23:13.746: I/BrcmNci(3355): CLA:0x00
02-10 10:23:13.746: I/BrcmNci(3355): INS:0xA4(Select)
02-10 10:23:13.746: I/BrcmNci(3355): P1:0x04(Name)
02-10 10:23:13.746: I/BrcmNci(3355): P2:0x00(First or Only)
02-10 10:23:13.746: I/BrcmNci(3355): Lc:0x07(7)
02-10 10:23:13.746: I/BrcmNci(3355): Data(7 bytes)
02-10 10:23:13.746: I/BrcmNci(3355): 00 : d2 76 00 00 85 01 00
02-10 10:23:13.746: I/BrcmNci(3355): --
02-10 10:23:13.786: I/BrcmNci(3355): --
02-10 10:23:13.786: I/BrcmNci(3355): RX: Type 4 Tag Response (2 bytes)
02-10 10:23:13.786: I/BrcmNci(3355): SW:0x6A82(Not Found)
02-10 10:23:13.786: I/BrcmNci(3355): --

02-10 10:23:14.996: I/BrcmNci(3355): --
02-10 10:23:14.996: I/BrcmNci(3355): RX: Type 4 Tag Response (2 bytes)
02-10 10:23:14.996: I/BrcmNci(3355): SW:0x9000(Command Completed)
02-10 10:23:14.996: I/BrcmNci(3355): --

Но если мы попытаемся использовать S3, мы получим только этот журнал:

01-07 03:16:47.555: D/NFCJNI(2694): Discovered P2P Target
01-07 03:16:47.555: D/NfcService(2694): LLCP Activation message
01-07 03:16:48.880: D/NFCJNI(2694): Discovered P2P Target
01-07 03:16:48.885: D/NfcService(2694): LLCP Activation message
01-07 03:16:51.860: D/NFCJNI(2694): Discovered P2P Target
01-07 03:16:51.860: D/NfcService(2694): LLCP Activation message
01-07 03:16:53.185: D/NFCJNI(2694): Discovered P2P Target
01-07 03:16:53.185: D/NfcService(2694): LLCP Activation message
01-07 03:16:58.870: D/NFCJNI(2694): Discovered P2P Target
01-07 03:16:58.870: D/NfcService(2694): LLCP Activation message

И любое приложение Android, регистрирующееся на любое событие NFC, не просыпается. Кажется, что это какая-то проблема совместимости между S3 и устройством для чтения карт памяти или какая-то проблема реализации NFC с S3.

Можете ли вы сообщить нам, почему существует разница в связи между двумя телефонами, когда оба имеют одинаковую версию ОС (то есть Android 4.3). Почему S3 не выходит за пределы "сообщения активации LLCP"?

Системную информацию о обоих телефонах, которые мы используем, можно найти здесь

1 ответ

Если вы хотите использовать только эмуляцию карты ISO-DEP, вы можете правильно зарегистрировать свое устройство NFC ACR122U для пассивной эмуляции PICC по ISO 14443-4.

В настоящее время вы используете команду TgInitAsTarget следующим образом:

D4 8C (TgInitAsTarget)
  04 (Mode = PICC only)
  0000 (ATQA/SENS_RES = invalid)
  000000 (NFCID1t/UID = 0x80000000)
  20 (SAK/SEL_RES = ISO 14443-4 supported)
  01FE0FBBBAA6C9890000000000000000FFFF (FeliCaParams)
  01FE0FBBBAA6C9890000 (NFCID3t)
  06 47666D010110 (6 ATR_RES general bytes)
  00 (0 historical bytes)

Однако, поскольку вы не хотите использовать режим NFC-DEP / режим FeliCa, вам определенно необходимо установить нулевые параметры FeliCa, общие байты NFCID3t и ATR_RES. Кроме того, вы хотели бы установить более полезное значение UID и действительный ATQA (тот, который имеет в одном из установленных битов антикадрового кодирования). Я не уверен, если это необходимо, но я предлагаю вам также установить флаг пассивного режима.

D4 8C (TgInitAsTarget)
  05 (Mode = PICC only | passive mode only)
  0400 (ATQA/SENS_RES)
  012345 (NFCID1t/UID)
  20 (SAK/SEL_RES = ISO 14443-4 supported)
  000000000000000000000000000000000000 (FeliCaParams)
  00000000000000000000 (NFCID3t)
  00 (no ATR_RES general bytes)
  00 (no historical bytes)

Более того, вы можете захотеть установить дополнительные регистры конфигурации на некоторых устройствах ACR122U. Смотрите этот ответ для получения дополнительной информации.

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