25 .net c# serial-port smartcard
我的读者哪个文档几乎与此一样:http://www.jinmuyu.com/download/JMY680A_EN.pdf 主要区别在于,我的读者声称它也支持TYPE B卡.
我有三张ISO 14443卡,我连续测试,并遵循以下代码:
byte[] rs = null;
Thread.Sleep(500);
// Set module Idle
Random r = new Random();
byte rInt = (byte) r.Next(0, 255);
rs = send(new byte[] { 0x12, rInt });
if (rs[1] == 0xED)
throw new Exception("Failed set idle");
Thread.Sleep(500);
//// Request B
//rs = send(new byte[] { 0x60, 0x00, 0x00 });
//if (rs[1] == 0x9F)
// throw new Exception("Failed card requestB");
// RequestA
rs = send(new byte[] { 0x20, 0x00 });
if (rs[1] == 0xDF)
throw new Exception("Failed card requestA");
// Reset cardA
rs = send(new byte[] { 0x30 });
if(rs[1] == 0xCF)
throw new Exception("Failed card reset");
// Do other work, Send some APDU to card, etc.
// ........
// Exit program
Run Code Online (Sandbox Code Playgroud)
大多数情况下,此代码适用于所有三张卡.但是,有时,当我将其中一张卡带到读卡器附近时,卡请求A(RequestA呼叫)呼叫将失败.然后它会一直失败,直到我把一张新卡带到读卡器.有谁知道是什么原因造成的?也许我需要在通话之间有一些延迟?或者在调用之前需要调用其他一些(ISO14443相关)函数RequestA?
send是使用SerialPort类实现的方法.通过以下方式:
SerialPort都会创建新对象Open上面创建的对象Write和Read一些数据Close在此方法实例中创建的on对象关闭连接顺便说一句.这是RequestA命令中其中一张卡(读卡器失败一次)的成功响应:
ID | ATQ | SAK
0xe1 0x8f 0x68 0xe6 0x04 0x00 0x28
Run Code Online (Sandbox Code Playgroud)
我无法确定您的代码出了什么问题,但当连接出现错误且没有打开新连接时,这似乎是一个问题。因为 SerialPort 是您需要处理处置的硬件资源,所以 SerialPort 可能实现 IDisposable,这意味着您可以使用确保连接已关闭并处置。带一张新卡可能会做到这一点,但是当您使用同一张卡时,您的串行端口仍然处于故障状态。
| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |