我目前正在为一个非常非常定制的Linux内核开发一个NFC应用程序,该内核运行在POS设备(如这个TPS300 )中,用于无联系人的NFC卡。它内置了与NFC卡通信的库。我已经研究了NFC,并了解了NFC重置命令,这应该是回应与复位的答案。我的问题是,该命令是通过正常的APDU命令响应方法执行的,还是重置为基于硬件的命令?我问这个问题是因为上面提到的库对于卡片没有明确的重置命令方法,或者程序也没有,而且我(到目前为止)还没有找到用于重置NFC卡的APDU命令。我只知道硬件的方法,通过一个信号到NFC卡的复位终端。是否有明确的APDU命令来重置卡,或者自定义操作系统是否为我负责重置?如果命令存在,它是什么?它是如何应用于非接触式NFC卡的?
发布于 2014-10-30 14:32:45
ATR (应答复位)通常通过向NFC控制器(读取器)发出特殊命令来寻找。APDU是一个术语,用于指与NFC卡本身(PICC)之间的命令/响应交换。给你一些比较,看看ACR122U文档,市场上最受欢迎的读卡器之一。它利用了PCSC驱动程序(CCID),这种驱动程序在大多数操作系统(从与智能卡控制器的接口发展而来)中很常见,这使得它在Windows、Mac或Linux上使用非常容易。下面是它的流程图:

PCSC接口有几个命令,但它都是从读取器connect开始的。对于联系人智能卡,这等于设置一个RESET线高。对于非接触式( NFC )卡,这相当于打开NFC场(RF能量脉冲)。如果存在卡片,connect调用将返回一个ATR响应。
在PCSC层下面和CCID驱动程序中,您可以看到reader connect调用是如何构造的。下面是来自nfcpy项目的代码片段,这是一个用于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控制器交谈时,可能会有类似于in_list_passive_target命令那样的指令来执行PN533。ATR是很常见的。发布于 2014-10-30 12:55:35
一般来说,关闭RF字段并打开它应该“重置”卡。但是,如果您想要更具体的重置机制,那么这将取决于在操作系统中支持的卡的类型,以及问题中的卡。out 14443-第3部分应该对你有帮助。
https://stackoverflow.com/questions/26646303
复制相似问题