编辑于2016年1月17日:我更新了这个问题,并且还包括了Nexus 6P,因为我有机会测试它,它的行为与5X完全相同。因此,所有先前从5X获得的发现似乎也适用于6P。
我之前在Nexus 5(锤头)上做到了这一点,感谢Michael Roland在这里的问题上的回答,也在Nexus 6(鲨鱼)上实现了这一点(请参见我的Github存储库中的Nexus 6 bcm2079x配置)。
然而,Nexus 5X(和6P)似乎不同:
- 根据ifixit的拆解,它包含了来自NXP(PN548)的新芯片组,而不是像Nexus 4、5和6一样的Broadcom bcm2079x。
- 我可以确认该设备可以读取Mifare Classic标签(这加强了它包含NXP芯片组的假设,因为Broadcom芯片组不支持Mifare Classic),并且存在一个设备文件
/dev/pn548
- 但奇怪的是,它同时包含了
/system/etc/
下的libnfc-brcm.conf
和libnfc-nxp.conf
配置文件(你也可以在我的Github存储库中找到这些文件)
作为起点,我修改了两个配置文件中的跟踪/日志设置
- 将brcm的
APPL_TRACE_LEVEL
设置为0x05
- 将nxp的
NXPLOG_*_LOGLEVEL
设置为0x03
BrcmNfcJni
消息(我没有预料到在具有NXP芯片组的设备上会出现这种情况)。12-11 20:45:36.840 D/BrcmNfcJni( 3434): JNI_OnLoad: enter
12-11 20:45:36.841 I/BrcmNfcJni( 3434): NFC Service: loading nci JNI
12-11 20:45:36.841 D/BrcmNfcJni( 3434): register_com_android_nfc_NativeNfcManager: enter
12-11 20:45:36.841 D/BrcmNfcJni( 3434): PowerSwitch::initialize: level=PS-UNKNOWN (0)
12-11 20:45:36.923 D/BrcmNfcJni( 3434): PowerSwitch::initialize: desired screen-off state=1
12-11 20:45:36.923 D/BrcmNfcJni( 3434): register_com_android_nfc_NativeNfcManager: exit
12-11 20:45:36.923 D/BrcmNfcJni( 3434): register_com_android_nfc_NativeNfcTag
12-11 20:45:36.924 D/BrcmNfcJni( 3434): RoutingManager::RoutingManager(): default route is 0x00
12-11 20:45:36.924 D/BrcmNfcJni( 3434): RoutingManager::RoutingManager(): mOffHostEe=0xF2
12-11 20:45:36.924 D/BrcmNfcJni( 3434): RoutingManager::registerJniFunctions
12-11 20:45:36.924 D/BrcmNfcJni( 3434): JNI_OnLoad: exit
....
....
编辑1:我从源代码中了解到,这些"BrcmNfc.."日志信息来自libnfc-nci库中的代码。在以前的设备上,NCI(代表:NFC controller interface)仅由Broadcom芯片组使用(我想这就是代码使用“Brcm”前缀记录的原因)。但显然,新的NXP芯片组现在也使用此标准化接口(这很好),现在我们甚至可以看到带有NXP芯片组的“Brcm…”日志消息。
编辑3:两部手机(Nexus 5X和6P)似乎都包含运行固件版本10.01.19的NXP PN548/C2 NFC芯片组(至少在Android 6.0.1发布版中)。
当然,NXP pn54x halimpl也会输出一些内容:
12-11 20:45:37.407 D/ ( 3434): phNxpLog_InitializeLogLevel: global =1, Fwdnld =3, extns =3, hal =3, tml =3, ncir =3, ncix =3
12-11 20:45:37.408 D/NxpHal ( 3434): Entering phNxpNciHal_init_monitor
12-11 20:45:37.408 D/NxpHal ( 3434): Returning with SUCCESS
12-11 20:45:37.408 D/NxpTml ( 3434): Opening port=/dev/pn54x
12-11 20:45:37.408 D/NxpTml ( 3434): phTmlNfc_i2c_reset(), VEN level 1
12-11 20:45:37.527 D/NxpTml ( 3434): phTmlNfc_i2c_reset(), VEN level 0
12-11 20:45:37.647 D/NxpTml ( 3434): phTmlNfc_i2c_reset(), VEN level 1
12-11 20:45:37.667 D/NxpTml ( 3434): PN54X - Tml Reader Thread Started................
12-11 20:45:37.667 D/NxpTml ( 3434): PN54X - Read requested.....
12-11 20:45:37.667 D/NxpTml ( 3434): PN54X - Invoking I2C Read.....
....
....
作为第一步,我尝试修改libnfc-nxp.conf
文件,从其中与UICC或SWP相关的参数开始:
# No secure element 0x00
# eSE 0x01
# UICC 0x02
-NXP_DEFAULT_SE=0x03
+NXP_DEFAULT_SE=0x02
同时,还需将NXP_CORE_CONF_EXTN
中的A0EC
标签设置为0x01
(注释指出该标签负责SWP1连接器):
# A0EC - SWP1 interface
# 0x00 - Disabled
# 0x01 - Enabled
- A0, EC, 01, 00,
+ A0, EC, 01, 01,
很不幸,这并没有起作用,我仍然在主机系统中接收到针对我的离机服务的APDU(如此logcat消息所示:
E/HostEmulationManager( 3434): AID that was meant to go off-host was routed to host.
)。在后续尝试中,我还尝试了在
libnfc-brcm.conf
参数中进行调整(如上述问题中Michael Roland所描述的),但仍然没有成功。问题:
- 有人成功地配置过Nexus 5X或6P上的NFC离机路由到UICC吗?
- 或者可能有一些提示,我可以寻找更深入的见解?
- PN548芯片组的数据表也将非常有帮助。
fastboot boot twrp-2.8.7.2-bullhead.img
。
目前我总是得到这个错误(我已经尝试过使用0xf2
和0xf4
作为离线主机路由目标):
12-16 09:38:05.524 I/BrcmNfcNfa( 3480): NFA_EeAddAidRouting(): handle:<0xf3>
12-16 09:38:05.524 I/BrcmNfcNfa( 3480): nfa_ee_find_ecb ()
12-16 09:38:05.524 E/BrcmNfcNfa( 3480): Bad ee_handle or AID (len=14)
12-16 09:38:05.524 E/BrcmNfcJni( 3480): RoutingManager::addAidRouting: failed to route AID