📄 src632.c
字号:
else
{
pi->MfLength = n*8;
}
if (n == 0)
{
n = 1;
}
for (i=0; i<n; i++)
{
pi->MfData[i+1] = ReadRawRC(RegFIFOData);
}
}
pi->MfData[0]=ReadRawRC(0x0B);
}
}
else if (n & irqEn & 0x20)
{ status = MI_NOTAGERR; }
else if (!(ReadRawRC(RegErrorFlag)&0x17))
{ status = MI_ACCESSTIMEOUT; }
else
{ status = MI_COM_ERR; }
WriteRawRC(RegInterruptEn,0x7F);
WriteRawRC(RegInterruptRq,0x7F);
SetBitMask(RegControl,0x04);
WriteRawRC(RegCommand,PCD_IDLE);
}
return status;
}
/////////////////////////////////////////////////////////////////////
//复位并初始化RC632
//注意:RC500上电后应延时500ms才能可靠初始化
/////////////////////////////////////////////////////////////////////
char PcdReset(void)
{
char status = MI_OK;
char n = 0xFF;
unsigned int i = 3000;
RC632_CE=0;
RC632_RST=0;
DelayMs(50);
RC632_RST=1;
DelayMs(5);
RC632_RST=0;
DelayMs(5);
while (i!=0 && n)
{
n = ReadRawRC(RegCommand);
i--;
}
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)
{ WriteRawRC(RegPage,0x0); }
return status;
}
//////////////////////////////////////////////////////////////////////
//设置RC632的工作方式
//////////////////////////////////////////////////////////////////////
char PcdConfigISOType(unsigned char type)
{
if (type == 'A') //ISO14443_A
{
ClearBitMask(RegControl,0x08);
WriteRawRC(RegClockQControl,0x0);
WriteRawRC(RegClockQControl,0x40);
Delay_50us(2);
ClearBitMask(RegClockQControl,0x40);
WriteRawRC(RegTxControl,0x5b);
WriteRawRC(RegCwConductance,0x0F);
WriteRawRC(RegModConductance,0x3F);
WriteRawRC(RegCoderControl,0x19);
WriteRawRC(RegModWidth,0x13);
WriteRawRC(RegModWidthSOF,0x00);
WriteRawRC(RegTypeBFraming,0x00);
WriteRawRC(RegRxControl1,0x73);
WriteRawRC(RegDecoderControl,0x08);
WriteRawRC(RegBitPhase,0xAD);
WriteRawRC(RegRxThreshold,0xAA);
WriteRawRC(RegBPSKDemControl,0);
WriteRawRC(RegRxControl2,0x41);
WriteRawRC(RegRxWait,0x06);
WriteRawRC(RegChannelRedundancy,0x0F);
WriteRawRC(RegCRCPresetLSB,0x63);
WriteRawRC(RegCRCPresetMSB,0x63);
WriteRawRC(RegTimeSlotPeriod,0x00);
WriteRawRC(RegMfOutSelect,0x00);
WriteRawRC(RFU27,0x00);
WriteRawRC(RegFIFOLevel,0x3F);
WriteRawRC(RegTimerClock,0x07);
WriteRawRC(RegTimerReload,0x0A);
WriteRawRC(RegTimerControl,0x06);
WriteRawRC(RegIRqPinConfig,0x02);
WriteRawRC(RFU2E,0x00);
WriteRawRC(RFU2F,0x00);
PcdSetTmo(106);
DelayMs(1);
PcdAntennaOn();
}
else if (type == 'B')
{
ClearBitMask(RegControl,0x08);
WriteRawRC(RegClockQControl,0x0);
WriteRawRC(RegClockQControl,0x40);
Delay_50us(2);
ClearBitMask(RegClockQControl,0x40);
WriteRawRC(RegTxControl,0x4b);
WriteRawRC(RegCwConductance,0x17);
WriteRawRC(RegModConductance,0x06);
WriteRawRC(RegCoderControl,0x20);
WriteRawRC(RegModWidth,0x13);
WriteRawRC(RegModWidthSOF,0x3F);
WriteRawRC(RegTypeBFraming,0x3B);
WriteRawRC(RegRxControl1,0x73);
WriteRawRC(RegDecoderControl,0x19);
WriteRawRC(RegBitPhase,0xAD);
WriteRawRC(RegRxThreshold,0x88);
WriteRawRC(RegBPSKDemControl,0x7E);
WriteRawRC(RegRxControl2,0x01);
WriteRawRC(RegRxWait,0x06);
WriteRawRC(RegChannelRedundancy,0x2C);
WriteRawRC(RegCRCPresetLSB,0xFF);
WriteRawRC(RegCRCPresetMSB,0xFF);
WriteRawRC(RegTimeSlotPeriod,0x00);
WriteRawRC(RegMfOutSelect,0x00);
WriteRawRC(RFU27,0x00);
WriteRawRC(RegFIFOLevel,0x3F);
WriteRawRC(RegTimerClock,0x07);
WriteRawRC(RegTimerReload,0x0A);
WriteRawRC(RegTimerControl,0x06);
WriteRawRC(RegIRqPinConfig,0x02);
WriteRawRC(RFU2E,0x00);
WriteRawRC(RFU2F,0x00);
PcdSetTmo(106);
DelayMs(1);
PcdAntennaOn();
}
else if (type == 'r')
{
ClearBitMask(RegControl,0x08);
WriteRawRC(RegClockQControl,0x0);
WriteRawRC(RegClockQControl,0x40);
Delay_50us(2);
ClearBitMask(RegClockQControl,0x40);
WriteRawRC(RegTxControl,0x4b);
WriteRawRC(RegCwConductance,0x06);
WriteRawRC(RegModConductance,0x03);
WriteRawRC(RegCoderControl,0x20);
WriteRawRC(RegModWidth,0x13);
WriteRawRC(RegModWidthSOF,0x00);
WriteRawRC(RegTypeBFraming,0x3B);
WriteRawRC(RegRxControl1,0x73);
WriteRawRC(RegDecoderControl,0x19);
WriteRawRC(RegBitPhase,0xAD);
WriteRawRC(RegRxThreshold,0x88);
WriteRawRC(RegBPSKDemControl,0x3E);
WriteRawRC(RegRxControl2,0x01);
WriteRawRC(RegRxWait,0x06);
WriteRawRC(RegChannelRedundancy,0x2C);
WriteRawRC(RegCRCPresetLSB,0xFF);
WriteRawRC(RegCRCPresetMSB,0xFF);
WriteRawRC(RegTimeSlotPeriod,0x00);
WriteRawRC(RegMfOutSelect,0x00);
WriteRawRC(RFU27,0x00);
WriteRawRC(RegFIFOLevel,0x1A);
WriteRawRC(RegTimerClock,0x07);
WriteRawRC(RegTimerReload,0x0A);
WriteRawRC(RegTimerControl,0x06);
WriteRawRC(RegIRqPinConfig,0x02);
WriteRawRC(RFU2E,0x00);
WriteRawRC(RFU2F,0x00);
PcdSetTmo(106);
DelayMs(1);
PcdAntennaOn();
}
else if (type == 's')
{
ClearBitMask(RegControl,0x08);
WriteRawRC(RegClockQControl,0x0);
WriteRawRC(RegClockQControl,0x40);
Delay_50us(2);
ClearBitMask(RegClockQControl,0x40);
WriteRawRC(RegTxControl,0x4b);
WriteRawRC(RegCwConductance,0x06);
WriteRawRC(RegModConductance,0x03);
WriteRawRC(RegCoderControl,0x20);
WriteRawRC(RegModWidth,0x13);
WriteRawRC(RegModWidthSOF,0x00);
WriteRawRC(RegTypeBFraming,0x18);
WriteRawRC(RegRxControl1,0x73);
WriteRawRC(RegDecoderControl,0x19);
WriteRawRC(RegBitPhase,0xAD);
WriteRawRC(RegRxThreshold,0x88);
WriteRawRC(RegBPSKDemControl,0x3E);
WriteRawRC(RegRxControl2,0x01);
WriteRawRC(RegClockQControl,0x00);
WriteRawRC(RegRxWait,0x06);
WriteRawRC(RegChannelRedundancy,0x2C);
WriteRawRC(RegCRCPresetLSB,0xFF);
WriteRawRC(RegCRCPresetMSB,0xFF);
WriteRawRC(RegTimeSlotPeriod,0x00);
WriteRawRC(RegMfOutSelect,0x00);
WriteRawRC(RFU27,0x00);
WriteRawRC(RegFIFOLevel,0x3F);
WriteRawRC(RegTimerClock,0x07);
WriteRawRC(RegTimerReload,0x0A);
WriteRawRC(RegTimerControl,0x06);
WriteRawRC(RegIRqPinConfig,0x02);
WriteRawRC(RFU2E,0x00);
WriteRawRC(RFU2F,0x00);
PcdSetTmo(106);
DelayMs(1);
PcdAntennaOn();
}
else{ return -1; }
return MI_OK;
}
/////////////////////////////////////////////////////////////////////
//开启天线
//每次启动或关闭天险发射之间应至少有1ms的间隔
/////////////////////////////////////////////////////////////////////
char PcdAntennaOn(void)
{
unsigned char i;
i = ReadRawRC(RegTxControl);
if (i & 0x03)
{ return MI_OK; }
else
{
SetBitMask(RegTxControl, 0x03);
return MI_OK;
}
}
/*
/////////////////////////////////////////////////////////////////////
//关闭天线
/////////////////////////////////////////////////////////////////////
char PcdAntennaOff(void)
{
ClearBitMask(RegTxControl, 0x03);
return MI_OK;
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -