java - 用 Java 确定非接触式智能卡的电源要求。

标签 java android nfc nexus-s

我正在用 Java 编写一个应用程序,它向智能卡发送命令并通过 NFC 接口(interface)解析响应。此应用程序可在 Android 和 PC 上使用。

通过 PC 使用 USB 非接触式读卡器,我可以毫不费力地连接和通信我扔给它的任何卡。

Android 是另一回事。通过 Nexus S 使用该应用程序会产生不太理想的结果,具体取决于卡。

有些卡将以 100% 的成功率进行连接和通信。我尝试使用的大多数卡片都很难建立连接,更不用说与之通信了。

Nexus S 上的 NFC 服务正在尝试与卡连接。它发出连续的低脉冲声,表明它无法建立牢固的连接(据我所知)。

我目前的想法是,Nexus S 的 NFC 芯片功率低于我正在使用的 USB PC 读卡器。从我读过的其他文章来看,不同的卡似乎有不同的电源要求才能使用它们。

如何确定为卡供电所需的功率级别?它隐藏在 ATR 的某处吗?

如何确定特定 NFC 芯片的功率级别?这在某处记录了吗?

最佳答案

这种问题通常是由以下任何一种(组合)引起的:

  1. 卡中的天线调谐不好
  2. 需要大功率的微 Controller 卡
  3. NFC 手机产生的微弱射频场

这会导致手机和卡之间的天线耦合不良,从而导致通讯不良或无法通讯。桌面阅读器通常不会有这种问题,因为它会生成一个更强大的字段。手机中的 NFC 功率非常低,它产生的 RF 场通常处于 ISO 14443 仍然允许的范围的边缘。Nexus S 中的 NXP PN544 NFC 芯片产生微弱的 RF 场。然而,这是手机中 NFC 芯片和 NFC 天线的功能。根据我的经验,B 型卡经常会引起问题(有传言说它们通常需要更多功率)。另一个例子是电子护照:通常天线不太理想。

卡所需的最低功率水平:它不在 ATR 中。 ISO 14443 卡没有 ATR(它们可能有 EF.ATR 文件,但我从未见过)。 ATS(选择应答)响应未指示所需的功率级别。卡有可能在 ISO 14443-4 S-Block 的 CID 字段中指示功率级别是否足够(如果卡存在并支持)。不过,我从未见过这样做的卡片。

要确定结合特定天线(和调谐电路)的特定 NFC 芯片的功率水平,您可以使用频谱分析仪进行测量。我测量了几款都包含 PN544 的 Android NFC 手机(Galaxy Nexus、Nexus S、Galaxy S3、One X)。结果因手机而异,在某些情况下足以产生差异(S3 产生的功率最大)。

关于java - 用 Java 确定非接触式智能卡的电源要求。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11323608/

相关文章:

java - 对象化 : Use an entity key juste created

java - 删除对象分配 JNI 调用 API 中的 jobject 引用

java - android 如何从数据库中删除第一个插入的项目

java - 使用低级 NFC 通信方法将 NDEF 数据写入 NTAG216 标签

android - 如何模拟来自其他应用程序的标签触摸

java - 使用 Itext 将文本添加到 pdf 的每一页

java - 如何使用 java/thrift 删除 super 列

java - 从 RecyclerView 内的 onClickListener 启动 Activity 后出现 NullPointerException

android - 使用 paypal 沙箱的信用卡付款返回响应为 "state": "created"?

android - 为什么 Google Pay 在我的应用程序安装后停止工作?