Эмуляция карты 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. Смотрите этот ответ для получения дополнительной информации.