我正在使用 T = 0 协议的卡:
61 XX
回答,其中“ XX”是要读取的字节数(从1到256)。 然后我通过发送GET RESPONSE命令检索数据:
00 C0 00 00 XX
关于ISO7816-3,我希望卡响应:
Procedure byte | Data | SW1 SW2
如果是SW1 == 0x61
,我会发送:
00 C0 00 00 SW2
依次类推,直到最终得到90 00
。
但是,这是我实际拥有的(TPDU级别):
> Command
< 61 00
> 00 C0 00 00 00
< C0 (procedure byte)
< Data (256)
No Status Word, no procedure byte (timeout)
> 00 C0 00 00 00
< C0 (procedure byte)
< Data (256)
No Status Word, no procedure byte (timeout)
[...]
> 00 C0 00 00 00
< 61 39 (status word)
我必须重复发送P3 = 00(256)的GET RESPONSE,读取256个字节,并且没有状态字,直到卡警告我实际上要读取的字节少于256个为止。
我找不到规范的允许卡“跳过”状态字或如何处理超过256个字节的答案的部分。有指针吗?
答案 0 :(得分:2)
我发现了:这是一个定时问题。
该卡确实有要发送,但是我在两次读取操作之间的过程太长了,因此在我要求时,该卡中不再可用。
我应该强调指出,我是在自己开发读者部分。
答案 1 :(得分:-1)
在T = 0协议中,数据不能超过256个字节。
在您的情况下,可能是应用程序协议的错误(或误解),该协议在检索256个字节后仍将61XX发送回去。
实际上,您的日志中尚不清楚GET RESPONSE命令的状态字是什么,如果是9000,则一切正常,无需赘述。在这种情况下,如果重复执行GET RESPONSE命令,则可能会再次获取最新数据!
只需回答您的特定问题:
我找不到规范中允许卡“跳过”状态字的部分
您可以简单地忽略它!
我的意思是,如果卡通知它有一些可用数据(61 XX),并且您没有发送任何GET RESPONSE命令,而是发送了另一个命令,那么数据将丢失。
或如何处理超过256个字节的答案。有指针吗?
在协议T = 0中是不可能的。您最好改用协议T = 1或T = 15。
或者您可以通过某种增强的协议以某种方式解决它,然后您应该重写该应用程序以支持它(如果该应用程序属于您),那么它可能不再是标准的了!