最近用RC500做读卡器,MCU为stc11f32xe ,采用复用地址数据总线通信,RC500复位脚上拉10K电阻,NCS脚直接接地。
复位程序移植网上89C52程序:
/*****************************************************************************
* 复位并初始化RC500
*注意:RC500上电后应延时500ms才能可靠初始化
******************************************************************************/
char PcdReset()
{
char status=MI_OK;
char n=0;
uint i=0xFFFF; //约140MS
// uint y;
//RC500_CE=0;
RC500_RST = 0;
delay_nms(50);
RC500_RST = 1;
delay_50us(400);
RC500_RST = 0;
delay_50us(100);
while(i!=0&&n!=0x3f)
{
n=ReadRawRC(RegCommand);
i--;
}
//SBUF=n;while(!TI);TI=0; ////////////////////////////////////
while(i!=0&&n==0x3f)
{
n=ReadRawRC(RegCommand);
i--;
}
//SBUF=n;while(!TI);TI=0; ///////////////////////////////////
if(i!=0)
{
WriteRawRC(RegPage,0x80);
n=0x80;
while((i!=0)&&(n&0x80))
{
n=ReadRawRC(RegCommand);
i--;
}
if(i==0||(n&0xff))
{
status=MI_RESETERR;
}
}
else
{
status=MI_RESETERR;
}
if(status==MI_OK)
{
WriteRC(RegClockQControl,0x0);
WriteRC(RegClockQControl,0x40);
nop_();
ClearBitMask(RegClockQControl,0x40);
WriteRC(RegBitPhase,0xad);
WriteRC(RegRxThreshold,0xff);
WriteRC(RegRxControl2,01);
WriteRC(RegFIFOLevel,0x1a);
WriteRC(RegTimerControl,0x02);
WriteRC(RegIRqPinConfig,0x02);
WriteRC(RegTxControl,0x5b);
}
return status;
}
出来做了几块板子,出现了偶尔上电不能正常复位,返回错误码0xbf:接口检测正在进行 ,多上插拔几次读卡器电源后,复位成功,(后来实验,确定如果测试读卡器电源电路上的电容完全掉电,出现接口检测超时机率最大;电容未完全放电,百分百复位成功),希望有大神能提点下小弟!万分感谢! |