求助 高手--》 智能卡开发问题--读卡器卡死

yiweidianzi 2010-11-10 06:58:54
我使用的是 华大 的智能卡, 时常会在 刷卡过程中 出现读卡器卡死现象:

我的操作流程:
1,获取读卡器
SCardEstablishContext(int dwScope, int pvReserved1, int pvReserved2, ref int phContext)
SCardReleaseContext(int phContext);
2,自动读卡:设置一个读卡时钟,1秒连续的读卡,直到连接卡成功
即不停执行 SCardDisconnect(int hCard, int Disposition);
(在每次SCardDisconnect连接卡成功后,卡句柄hCard(肯定非零值)以全局保留,在连接时如果hCard非零,会先调用
SCardDisconnect(int hCard, int Disposition) 断开当前卡连接,并将hCard置零。这样确保每次连接卡后多会断开其连接)

??这个用时钟不停调SCardDisconnect() 会不会有问题,有的话用什么方法代替?
3,智能卡相关金融/业务操作。(这里会有一些智能卡内部文件系统的修改操作,但是应该不是这些操作的问题,因为在测试版中,不做任何智能卡内部结构的修改,只用时钟读卡,也会出现卡死)

4,步骤3完成后,会检查在规定时间内 卡是否一直未离开读卡器。 方式是:
用一个时钟不停的 复位卡,如果复位失败 则==卡已经离开。停止复位, 从步骤1开始重复 操作
复位函数:SCardStatus(IN SCARDHANDLE hCard,OUT LPSTR szReaderName,IN OUT LPDWORD pcchReaderLen...);


另外问下 下面几个函数 的作用,在什么情况会用到?
1,int SCardListReaderGroups(int hContext, ref string mzGroups, ref int pcchGroups);
2,int SCardGetStatusChange(int hContext, int TimeOut, ref SCARD_READERSTATE ReaderState, int ReaderCount);



先谢过各位!!!
...全文
237 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DISINHUI 2010-11-18
  • 打赏
  • 举报
回复
建议:
1. 通读该卡资料。
2. 通读接口函数说明。
3. 对函数入口参数仔细分析

这里给出mifare one 系列卡操作的底层函数
PcdConfig();
PiccRequest(ISO14443_3_REQALL,cardType);
PiccCascAnticoll(SELECT_CASCADE_LEVEL_1,0,UID);
PiccCascSelect( SELECT_CASCADE_LEVEL_1,UID,tempUID);
PiccAuthKey(MIFARE_AUTHENT_A,UID,KeyA,16);
PiccWrite(0x01,cardDataFirst16);
DISINHUI 2010-11-18
  • 打赏
  • 举报
回复
我不了解华大的卡,不知道其频率是多少。
如果兼容mifare one卡的话,应该是如下操作:
1. 寻卡,通过UID字,识别是S50,S70,Ulight等卡。
2. 获取卡片ID号,不同卡片,ID号长度可能不同。
3. 认证
4. 读写数据
5. 休眠卡
6. 结束
yiweidianzi 2010-11-11
  • 打赏
  • 举报
回复
在网上看到的:
__int16 rf_card(HANDLE icdev,unsigned char _Mode,unsigned long *_Snr);
功能:寻卡,能返回在工作区域内某张卡的序列号


我用的是ACR122u-wb-r 读卡器,卡是华大的 高频卡。 可是他们提东的demo 多是调用上面我写的那些函数,并非由如何 网上写的那些 MF-50N非接触式IC卡读写函数

求解
yiweidianzi 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 duojinian 的回复:]
1.执行寻卡函数,根据返回值,确认卡片类型。
2.根据相应卡片类型,确认发送相应的执行指令,主要是函数的参数要符合该类卡。
3.连续寻卡,有卡,则执行读写函数,不要总是读或者写卡。
[/Quote]

什么寻卡函数? 我一直都是用掉SCardconnect 来 完成检查读卡器上是否有卡?

请指点下 谢谢
yiweidianzi 2010-11-11
  • 打赏
  • 举报
回复
当读卡器卡死后,跟踪程序,一般是在调用SCardConnect 或SCardReleaseContext 后程序就一直卡在哪里了, 用try 无法扑住错误
DISINHUI 2010-11-10
  • 打赏
  • 举报
回复
1.执行寻卡函数,根据返回值,确认卡片类型。
2.根据相应卡片类型,确认发送相应的执行指令,主要是函数的参数要符合该类卡。
3.连续寻卡,有卡,则执行读写函数,不要总是读或者写卡。

27,377

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧