我正在尝试与一些智能卡通信。 我有读取器有请求14443A型卡的方法。 当我发出此命令时,有时会返回成功 失败。 我错过了 14443A协议中的某些内容吗?也许卡片进入暂停状态?或者如果出现故障,我必须手动调用暂停状态?或者还有一些我必须事先打电话的其他命令? 在哪里可以获得有关如何使用ISO14443卡建立通信(在协议级别)的信息? 有没有这方面的教程?
这是代码的样子(大致):
SerialPort p = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
p.Open();
byte[] res;
res = send(p, REQUEST_TYPEA_COMMAND);
res = send(p, RESETA_COMMAND);
// send some other command
p.Close();
如果我第一次运行上面的代码,则所有调用都可以。但是在第二次运行程序后,第一次调用(REQUEST_TYPEA_COMMAND)失败 - 直到我重新启动阅读器。
答案 0 :(得分:1)
无法响应REQA命令的卡可能有以下几个原因:
它不是ISO 14443 A型卡。在这种情况下,它不会(不应该)响应任何REQA命令。正如你的卡片有时那样,情况肯定不是这样。
该卡未收到REQA命令。如果物理链路(空中接口)上存在传输错误,则可能发生这种情况。
卡未处于IDLE状态。复位后卡片处于IDLE状态(即现场开启)。如果卡接收到REQA命令,它将转换为READY状态。在处于READY状态时接收具有匹配的UID部分的防冲突命令之外的任何其他命令将卡重置回IDLE状态,然后它可以处理进一步的REQA命令。如果卡进一步激活超过READY状态并接收HLTA命令(或DESELECT,如果激活到ISO 14443-4协议层),它将切换到HALT状态。在HALT状态下,卡不会响应REQA命令,只会响应WUPA(唤醒命令)。