?? type_b.c
字號(hào):
///////////////////////////////////////////////////////////////////////
// C O N F I G I S O 1 4 4 4 3 T Y P E
///////////////////////////////////////////////////////////////////////
unsigned char M500PcdConfigISOType(unsigned char type)
{
if(type==TYPEA)
{
WriteRC(RegTxControl,0x5b); // Force100ASK, TX1 & TX2 enable 0x11內(nèi)部編碼器 b的設(shè)置位不懂??
WriteRC(RegCoderControl,0x19); // Miller coding, 106kbps iso14443-A 0x14地址
WriteRC(RegRxControl1,0x73); //8puls iso14443A&B 42dB 0x19
WriteRC(RegDecoderControl,0x08); // Manchester Coding iso14443A 0x1a
WriteRC(RegCRCPresetLSB,0x63); // set CRC preset to 0x6363 0x23 復(fù)位值為0x63
WriteRC(RegCRCPresetMSB,0x63); //0x23 復(fù)位值為0x63
WriteRC(RegRxThreshold,0xff); // set max MinLevel & ColLevel. //0x1c復(fù)位值為0xff
TYPE = TYPEA;
}
else
{
WriteRC(RegTxControl,0x4b); // disable Force100ASk ok
WriteRC(RegCoderControl,0x20); // NRZ-L, TypeB baud 106kbps ok
WriteRC(RegRxControl1,0x73); // ok
WriteRC(RegDecoderControl,0x19); // BPSK coding ok
WriteRC(RegCRCPresetLSB,0xff); // set CRC preset to 0xffff ok
WriteRC(RegCRCPresetMSB,0xff); // ok
WriteRC(RegTypeBFraming,0x23); // EGT=0 0x17 定義了mode的寬度 ok
WriteRC(RegBitFraming,0x07); // ok
WriteRC(RegBPSKDemControl,0x3e); // ASK=0xfe,ignore EOF and SOF 0x1d地址看datasheet
///////握奇=0x3e ignore EOF, on amp. detect
WriteRC(RegModConductance,0x06); // set modulation index at 12% 0x13地址看datasheet
// WriteIO(RegChannelRedundancy, 0x2c);//RegChannelRedundancy
WriteRC(RegRxThreshold,0x44); // Reduce MinLevel & ColLevel. 0x1c地址
// WriteRC(RegRxThreshold,0x68);
// WriteRC(RegRxWait,0x09);
// Increase higher nibble if carrier
// present but not detect
TYPE = TYPEB;
}
return MI_OK;
}
unsigned char PcdRequest(unsigned char req_code)
{
char status;
MfCmdInfo1 *pi;
PcdSetTmo(14);
WriteRC(RegChannelRedundancy,0x03);
ClearBitMask(RegControl,0x08);
WriteRC(RegBitFraming,0x07);
pi->MfCommand=PCD_TRANSCEIVE;
pi->MfLength=1;
pi->MfData[0]=req_code;
status=PcdComTransceive(pi);
// ser_send(&status,1);
if(!status)
{ if(pi->MfLength!=0x10)
{
//status=MI_BITCOUNTERR;
status=0x55;
}
}
return status;
}
unsigned char PcdAnticoll(unsigned char *snr) //讀取卡片序列號(hào)函數(shù)
{
unsigned char i;
unsigned char snr_check=0;
char status=MI_OK;
MfCmdInfo1 *pi;
PcdSetTmo(14);
WriteRC(RegDecoderControl,0x28);
ClearBitMask(RegControl,0x08);
WriteRC(RegChannelRedundancy,0x03);
pi->MfCommand=PCD_TRANSCEIVE;
pi->MfLength=2;
pi->MfData[0]=PICC_ANTICOLL1;
pi->MfData[1]=0x20;
status=PcdComTransceive(pi);
// ser_send(&status,1);
if(!status)
{
for(i=0;i<4;i++)
{
snr_check^=pi->MfData[i];
}
if(snr_check!=pi->MfData[i])
{
status=MI_SERNRERR;
}
else
{
for(i=0;i<4;i++)
{
*(snr+i)=pi->MfData[i];
}
}
}
ClearBitMask(RegDecoderControl,0x20);
return status;
}
unsigned char PcdComTransceive(MfCmdInfo1 *pi)
{
unsigned char recebyte=0;
unsigned char status;
unsigned char irqEn=0x00;
unsigned char waitFor=0x00;
unsigned char lastBits;
unsigned char n;
unsigned int i;
switch(pi->MfCommand)
{
case PCD_IDLE:
irqEn = 0x00;
waitFor = 0x00;
break;
case PCD_WRITEE2:
irqEn = 0x11;
waitFor = 0x10;
break;
case PCD_READE2:
irqEn = 0x07;
waitFor = 0x04;
recebyte=0x01;
break;
case PCD_LOADCONFIG:
case PCD_LOADKEYE2:
case PCD_AUTHENT1:
irqEn = 0x05;
waitFor = 0x04;
break;
case PCD_CALCCRC:
irqEn = 0x11;
waitFor = 0x10;
break;
case PCD_AUTHENT2:
irqEn = 0x04;
waitFor = 0x04;
break;
case PCD_RECEIVE:
irqEn = 0x06;
waitFor = 0x04;
recebyte=0x01;
break;
case PCD_LOADKEY:
irqEn = 0x05;
waitFor = 0x04;
break;
case PCD_TRANSMIT:
irqEn = 0x05;
waitFor = 0x04;
break;
case PCD_TRANSCEIVE:
irqEn = 0x3D;
waitFor = 0x04;
recebyte=0x01;
break;
default:
pi->MfCommand=MI_UNKNOWN_COMMAND;
break;
}
if((pi->MfCommand) != MI_UNKNOWN_COMMAND)
{
WriteRC(RegPage,0x00);
WriteRC(RegInterruptEn,0x7F);
WriteRC(RegInterruptRq,0x7F);
WriteRC(RegCommand,PCD_IDLE);
SetBitMask(RegControl,0x01);
WriteRC(RegInterruptEn,irqEn|0x80);
for(i=0;iMfLength;i++)
{
WriteRC(RegFIFOData,pi->MfData[i]);
}
WriteRC(RegCommand,pi->MfCommand);
i=0x2000;
do
{
n=ReadRC(RegInterruptRq);
i--;
}
while((i!=0)&&!(n&irqEn&0x20)&&!(n&waitFor));
status=MI_COM_ERR;
if((i!=0)&&!(n&irqEn&0x20))
{
if(!(ReadRC(RegErrorFlag)&0x17))
{
status=MI_OK;
if(recebyte)
{
n=ReadRC(RegFIFOLength);
lastBits=ReadRC(RegSecondaryStatus)&0x07;
if(lastBits)
{
pi->MfLength=(n-1)*8+lastBits;
}
else
{
pi->MfLength=n*8;
}
if(n==0)
{
n=1;
}
for(i=0;i {
pi->MfData[i]=ReadRC(RegFIFOData);
}
}
}
}
else if(n&irqEn&0x20)
{
status=MI_NOTAGERR;
}
else
{
status=MI_COM_ERR;
}
WriteRC(RegInterruptEn,0x7F);
WriteRC(RegInterruptRq,0x7F);
}
return status;
}
reqb 應(yīng)該是0x05 0x00 0x00吧
wupb: 0x05,0x00,0x08
pi->MfCommand=PCD_TRANSCEIVE;
pi->MfLength=1;
pi->MfData[0]=req_code;
status=PcdComTransceive(pi);
單看這里,你的指令是不對(duì)的,指令應(yīng)該是3個(gè)byte
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -