日期:2014-05-16  浏览次数:20982 次

读卡器在寻卡时识别不出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指令中止卡操作后,只有当该卡离开并再次进入操作区时,读写器才能够再次对它进行操作。

我写的代码是


 if (rf_card(icDev, 0, ref _Snr) == 0) 
{
//操作
}


但返回值总是1.错误代码里1表示“无卡”。确实我把卡拿走返回值是1,可我把卡放的好好的还是返回1,还有奇怪的是虽然返回1表示“无卡”,但是输出参数_Snr(卡序列号)却是有值的。。
太郁闷了。。搞了一上午还没弄好,各位大侠帮帮忙啊!这个不搞定下面的读卡工作也做不了啊。。

------解决方案--------------------
官方程序


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);

你不会是没有执行这个吧?
这个貌似是卡片复位。