读卡器在寻卡时识别不出IC卡
我用的是明华KRF-35读卡器,M1卡。按照接口文档上的寻卡函数格式
int rf_card(int icdev,unsigned char _Mode,unsigned long *_Snr);
功 能:寻卡,能返回在工作区域内某张卡的序列号
参 数:icdev:通讯设备标识符
_Mode:寻卡模式mode_card(0表示单卡模式,1多卡模式,2指定卡模式)
_Snr:返回的卡序列号
返 回:成功则返回 0
例:int st;
unsigned long snr;
st=rf_card(icdev,0,&snr);
注:选择IDLE模式,在对卡进行读写操作,执行rf_halt()rf_halt指令中止卡操作后,只有当该卡离开并再次进入操作区时,读写器才能够再次对它进行操作。
我写的代码是
- C# code
if (rf_card(icDev, 0, ref _Snr) == 0) {//操作}
但返回值总是1.错误代码里1表示“无卡”。确实我把卡拿走返回值是1,可我把卡放的好好的还是返回1,还有奇怪的是虽然返回1表示“无卡”,但是输出参数_Snr(卡序列号)却是有值的。。
太郁闷了。。搞了一上午还没弄好,各位大侠帮帮忙啊!这个不搞定下面的读卡工作也做不了啊。。
[解决办法]
官方程序
- C# code
private void btnSeekCard_Click(object sender, System.EventArgs e) { UInt16 tagtype=0; byte size=0; uint snr=0; mifareone.rf_reset(icdev, 3); st = mifareone.rf_request(icdev,1,out tagtype); if(st!=0) { lbResult.Text="request error!"; return; } st = mifareone.rf_anticoll(icdev,0,out snr); if(st!=0) { lbResult.Text="anticoll error!"; return; } string snrstr=""; snrstr=snr.ToString("X"); lbSnr.Text=snrstr; st = mifareone.rf_select(icdev,snr,out size); if(st!=0) { lbResult.Text="select error!"; return; } lbResult.Text="寻卡成功!"; }
[解决办法]
mifareone.rf_reset(icdev, 3);
你不会是没有执行这个吧?
这个貌似是卡片复位。