我目前正在开发一个NFC应用程序,用于在诸如this TPS300的POS设备中运行的非常非常定制的Linux内核,用于非接触式NFC卡。它具有用于与NFC卡通信的内置库。我已经研究过NFC,并且已经了解了NFC复位命令,该命令应该响应复位应答。我的问题是,该命令是通过正常的APDU命令响应方法执行还是重置基于硬件的命令?我问这是因为上面提到的库没有明确的复位命令方法,也没有程序,我(直到现在)都没有找到重置NFC卡的APDU命令。我只知道硬件方法,通过信号到NFC卡的复位终端。是否有用于重置卡的显式APDU命令,或者自定义操作系统是否为我重置?如果命令存在,那是什么?它是如何应用于非接触式NFC卡的?
答案 0 :(得分:0)
通常,关闭RF场并将其打开应该“重置”卡。但是,如果您需要更具体的重置机制,那么这将取决于操作系统中支持的卡类型以及相关卡。 ISO14443-Part3应该可以帮到你。
答案 1 :(得分:0)
通常通过向NFC控制器(阅读器)发出特殊命令来寻找ATR
(重置答案)。 APDU
是一个术语,用于表示与NFC卡本身(PICC)的命令/响应交换。为了给你一些比较的东西,请查看市场上流行的USB读卡器documentation of the ACR122U。它利用了大多数操作系统常见的PCSC USB驱动程序(CCID)(从与智能卡控制器的接口演变而来),使其易于在Windows,Mac或Linux上使用。这是一个流程图:
PCSC界面有几个命令,但它们都以读者API connect
开头。对于联系人智能卡,这相当于将RESET
行设置为高。对于非接触式(NFC)卡,这相当于打开NFC场(RF能量脉冲)。如果存在卡片,connect
来电将返回ATR
响应。
在PCSC层下方和CCID驱动程序中,您可以看到如何构建阅读器API connect
调用。以下是来自nfcpy project的代码片段,这是NFC的开源堆栈:
def reset_mode(self):
if (self.ic, self.fw) == ("PN533", "1.48"):
self.command(0x18, [1])
self.write(array("B", [0, 0, 255, 0, 255, 0])) # ack
time.sleep(0.010)
PN533是ACR122U阅读器内部的NFC控制器(来自NXP)。命令0x18
指示NFC控制器打开RF场并尝试从任何存在的标签获得ATR响应。找到ATR
后,即可开始APDU
次交流。例如询问卡片的描述信息:
rsp = self.dev.in_list_passive_target("106A", ""); // for NFC-A type cards
所以要明确回答你的问题:
connect
调用。直接与NFC控制器通信,可能会有一条指令来执行此操作,如PN533的in_list_passive_target
命令。ATR
是很常见的。