确定Java中非接触式智能卡的功率要求。

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

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

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

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

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

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

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

如何确定特定NFC芯片的功率水平? 这是在某处记录的吗?

此类问题通常由以下任何一种情况引起(组合):

  1. 卡中天线调整不当
  2. 微控制器卡需要很大的功率
  3. NFC手机产生的弱射频场

这导致电话和卡之间的天线耦合不良,从而导致通信不良或无通信。 桌面阅读器通常不会出现这种问题,因为它会生成更强大的字段。 手机中的NFC功耗非常低,它产生的RF场通常处于ISO 14443允许的范围内.Nexus S中的NFC芯片NXP PN544会产生微弱的RF场。 然而,这是NFC芯片和手机中的NFC天线的function。 根据我的经验,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产生最大功率)。