⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 type_b.c

📁 ARM7 SPI RC531驱动程序,数据手册
💻 C
字号:
/////////////////////////////////////////////////////////////////////// 
// 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内部编码器 b的设置位不懂?? 
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 复位值为0x63 
WriteRC(RegCRCPresetMSB,0x63); //0x23 复位值为0x63 
WriteRC(RegRxThreshold,0xff); // set max MinLevel & ColLevel. //0x1c复位值为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) //读取卡片序列号函数
{
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 应该是0x05 0x00 0x00吧

wupb: 0x05,0x00,0x08





pi->MfCommand=PCD_TRANSCEIVE;
pi->MfLength=1;
pi->MfData[0]=req_code;
status=PcdComTransceive(pi);
单看这里,你的指令是不对的,指令应该是3个byte






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -