[英]Android responds to PN532 InListPassiveTarget
我有一个奇怪的情况,我试图在标签模拟和标签阅读器模式之间切换我的PN532。 读者持续约70ms,标签仿真运行约600ms。
我想要发生的是,当我将我的Android设备放在天线附近时,它会读取模拟标签。 当我将PN标签保存到PN532时,它应该读取标签。
我的解决方案有点工作,但我看到一个奇怪的情况,当我调用readPassiveTargetID
来测试是否存在被动标签时,Android正在响应。 这样会很好,但我认为Android正在启动一项服务,阻止它阅读模拟标签。
在测试时,有时设备根本不与PN532通信,但是当他们这样做时,最常用的是读卡器模式。 以下是发生这种情况时得到的输出:
Nexus 5x(Android 6):
<< 4A 1 0
>> 4B 1 1 0 4 60 4 1 2 3 4 5 78 80 71 0
Galaxy S4(Android 5.0.1):
<< 4A 1 0
>> 4B 1 1 0 4 20 4 8 87 F6 62 5 78 B3 70 2
5x通常会在一秒左右后读取模拟标签,但是当我在两种模式之间切换时,S4很少读取标签。 当我只运行标签模拟时,两个设备都可以正常运行。
我在想我可能会遇到一些问题。
readPassiveTargetID
(InListPassiveTarget)时,Android正在响应。 这不是一种奇怪的情况,但是当您尝试从任何ISO / IEC 14443A阅读器访问NFC设备时,这是预期的。 NFC设备通常支持
当NFC设备轮询标签时,这通常类似于InListPassiveTarget所做的,不同之处在于它通常会测试各种不同的标签技术(NFC-A = ISO / IEC 14443A,NFC-B = ISO / IEC 14443B,NFC -F = JIS X 6319-4,和NFC-V = ISO / IEC 15693)。 由于被动对等模式基于ISO / IEC 14443A和JIS X 6319-4,它还将通过NFC-A和NFC-F测试自动发现被动对等目标。 此外,它还将测试其他对等设备(ISO / IEC 18092活动模式)。
当NFC设备通过其他设备(对等或读写器模式)监听激活时,它将允许使用ISO / IEC 18092中定义的各种选项进行激活。由于这些子协议基于NFC-A和NFC-F是支持被动对等模式和卡仿真模式的NFC设备,通常将两者的收听“阶段”组合成单个可激活目标。
这正是您所看到的:支持ISO / IEC 14443A和ISO / IEC 18092被动模式的设备,速率为106kbps。 这两种协议都使用ISO / IEC 14443A的防冲突和选择程序。 为了简化发现,NFC设备将卡仿真模式和对等模式两者组合成一个单个可见目标(即具有一个UID的一个“卡”)。
您可以从激活期间接收的参数值(特别是SAK / SEL_RES字节)中清楚地看到这一点。 对于Nexus 5X,此字节为0x60
,表示此目标支持ISO / IEC 14443-4(类型A),第5位设置,ISO / IEC 18092无源,速率为106kbps,第6位设置。
请注意,三星在他们的Galaxy S4上决定不宣布SAK字节( 0x20
)中的对等模式支持,可能是由于某些信用卡支付终端的问题。
它实际上并不是一项服务,而是Android在内部引入了超时。 一旦Android设备在点对点或卡仿真模式下激活,Android设备将在外部阅读器关闭其HF字段后等待大约4秒,然后重新开始轮询标签。 这至少是我们使用libnfc-nci测量的Nexus设备。 三星以广泛修改NFC堆栈实现而着称(通常会引入许多额外的错误(功能?)),因此在S4上可能略有不同。
你可能正在做你应该/可以做的事情。 这是Android方面的故意超时(场外关闭后4秒)导致您体验的内容。
不幸的是,这通常不那么容易。 你可以做的一些事情:
你真的需要在Android手机上使用读写器模式吗? 如果您可以使用主机卡仿真(HCE)在Android端实现所需的所有功能,则可以将PN532端实现为仅在读取器/写入器模式下运行。 这将消除两种模式之间的切换,您将不再受超时影响。 不幸的是,这会限制您使用支持Android HCE(Android 4.4+和某些较新的NFC芯片组)的设备。 此外,如果缺少(通过Android应用程序记录,AAR)自动安装应用程序等一些事情是不可能的。 当读者与您的HCE服务通信时,您仍然可以启动应用程序的活动(请参阅如何从HostApduService向活动发送消息? )。
您可以将PN532处于卡仿真模式的时间增加到约5秒(某些值明显大于上面提到的超时)。 然后Android应该(非常)可靠地检测模拟标签,即使它在卡模拟模式下被激活/之前被动对等模式目标。 不幸的是,在PN532能够检测无源标签之前的5秒等待时间在PN532应该读取NFC标签/非接触式智能卡的情况下,在用户体验方面通常是不可接受的。
如果您的应用只需要能够与应用程序的活动在前台时(即当用户在尝试与PN532端进行交互之前 手动打开应用程序)与PN532进行通信时,您可以使用阅读器禁用P2P模式-mode API(请参阅NfcAdapter.enableReaderMode()
。这再次限制您使用运行Android 4.4+的设备(虽然支持所有NFC芯片组)。我怀疑这比在Android端使用HCE有很多好处,尽管当用户试图用他们的手机点击PN532端以便自动打开应用程序或安装应用程序(通过AAR)时,问题就会出现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.