📄 main.c
字号:
acktemp=SPIWrite(TxControl_Reg,temp,1);
if(acktemp) return(1);
temp[0]=0x1;
acktemp=SPIWrite(RxControl2_Reg,temp,1);
if(acktemp) return(1);
temp[0]=0x7;
acktemp=SPIWrite(RxWait_Reg,temp,1);
if(acktemp) return(1);
return(0);
}
////使FM1702SL进入软件powerdown模式
////;FM1702_Standby 发送FM1702_Standby信号
//char FM1702_Standby()
//{char acktemp,temp[1];
// acktemp=SPIRead(Control_Reg,temp,1);
// if(acktemp) return(1);
// temp[0]=0x20;
// acktemp=SPIWrite(Control_Reg,temp,1);
// if(acktemp) return(1);
// temp[0]=0x58;
// acktemp=SPIWrite(TxControl_Reg,temp,1);
// if(acktemp) return(1);
// return(0);
// }
////;使FM1702SL进入工作模式
////FM1702_Wakeup 发送FM1702_Wakeup信号
//char FM1702_Wakeup()
//{char acktemp,temp[1];
// acktemp=SPIRead(Control_Reg,temp,1);
// if(acktemp) return(1);
// temp[0]=0xdf;
// acktemp=SPIWrite(TxControl_Reg,temp,1);
// if(acktemp) return(1);
// acktemp=SPIRead(Control_Reg,temp,1);
// if(acktemp) return(1);
// if(temp[0]&0x20)return(1);
// temp[0]=0x5b;
// acktemp=SPIWrite(TxControl_Reg,temp,1);
// if(acktemp) return(1);
// return(0);
//
// }
char Request()
{
char acktemp,temp[1];
temp[0]=0x7;
acktemp=SPIWrite(BitFraming_Reg,temp,1);
if(acktemp) return(1);
// temp[0]=0x7;
acktemp=SPIRead(Control_Reg,temp,1);
if(acktemp) return(1);
temp[0]&=0xf7;
acktemp=SPIWrite(Control_Reg,temp,1);
if(acktemp) return(1);
temp[0]=0x3;
acktemp=SPIWrite(ChannelRedundancy_Reg,temp,1);
if(acktemp) return(1);
temp[0]=0x52;
acktemp=Command_Send(Transceive,temp,1);
if(acktemp) return(1);
acktemp=Read_FIFO(temp);
if(acktemp) return(1);
if((temp[0]!=0x50)|(buff[0]!=0x4)|(buff[1]!=0x0))
return(1);
return(0);
}
char Clear_FIFO()
{char acktemp,temp[1],i;
acktemp=SPIRead(Control_Reg,temp,1);
if(acktemp) return(1);
temp[0]|=0x1;
acktemp=SPIWrite(Control_Reg,temp,1);
if(acktemp) return(1);
for(i=0;i<5;i++)
{acktemp=SPIRead(FIFOLength_Reg,temp,1);
if(acktemp==0)
{if(temp[0]==0)return(0);}
}
return(1);
}
//++++++++++++++++++++++++++++++++++++++++++
char Write_FIFO(char *ramadr,char width)
{char acktemp;
if(width==0)return(0);
// for(i=0;i<width;i++)
acktemp=SPIWrite(FIFO_Reg,ramadr,width);
if(acktemp) return(1);
return(0);
}
char Read_FIFO(char *ramadr)
{char acktemp,i;
acktemp=SPIRead(FIFOLength_Reg,ramadr,1);
if(acktemp) return(1);
if(ramadr[0]==0)return(1);
if(ramadr[0]>16)return(1);
i=ramadr[0];
acktemp=SPIRead(FIFO_Reg,&buff[0],i);
return(0);
}
char Command_Send(char comm,char *ramadr,char width)
{char acktemp,temp[1],i;
acktemp=Clear_FIFO();
if(acktemp) return(1);
///测试读写//////////////////////////////
// acktemp=Read_FIFO(temp);
// if(acktemp) return(1);
// buff[0]=0x12;buff[1]=0x34;buff[2]=0x56;
// acktemp=Write_FIFO(buff,3);
// if(acktemp) return(1);
// buff[0]=0;buff[1]=0;buff[2]=0;
// acktemp=Read_FIFO(temp);
// if(acktemp) return(1);
/////////////////////////////////////////////
acktemp=Write_FIFO(ramadr,width);
if(acktemp) return(1);
acktemp=SPIWrite(Command_Reg,&comm,1);
if(acktemp) return(1);
for(i=0;i<16;i++)
{
acktemp=SPIRead(Command_Reg,temp,1);
if(acktemp==0)
{if(temp[0]==0)return(0);}
}
return(1);
}
char Get_UID()
{char acktemp,temp[2],i;
temp[0]=0x3;
acktemp=SPIWrite(ChannelRedundancy_Reg,temp,1);
if(acktemp) return(1);
temp[0]=0x93;temp[1]=0x20;
acktemp=Command_Send(Transceive,temp,2);
if(acktemp) return(1);
acktemp=Read_FIFO(temp);
if(temp[0]!=0x5)return(1);
acktemp=0;
for(i=0;i<5;i++)
acktemp^=buff[i];
if(acktemp) return(1);
for(i=0;i<5;i++)
Card_UID[i]=buff[i];
return(0);
}
char Select_Tag()
{char acktemp,temp[1],i;
temp[0]=0xf;
acktemp=SPIWrite(ChannelRedundancy_Reg,temp,1);
if(acktemp) return(1);
buff[0]=0x93;buff[1]=0x70;
for(i=0;i<5;i++)
buff[i+2]=Card_UID[i];
acktemp=Command_Send(Transceive,buff,7);
if(acktemp) return(1);
acktemp=Read_FIFO(temp);
if(temp[0]!=0x1)return(1);
if(buff[0]!=0x8)return(1);
return(0);
}
//存储密钥
//*ramadr:密钥
//buff[0]密钥密钥地址
//buff[1]:0
//buff[2]~buff[9]不能放密码//////////////
char Load_Key(char n,char *ramadr)
{char acktemp,temp[1],i;
buff[0]=n;buff[1]=0x0;
for(i=0;i<6;i++)
{ temp[0]=ramadr[i];
buff[2+i+i]=(((ramadr[i]&0xf0)>>4)|((~ramadr[i])&0xf0));
buff[3+i+i]=((temp[0]&0xf)|(~(temp[0]&0xf)<<4));
}
acktemp=Command_Send(WriteEE,buff,0x0e);
delay1ms(4);
acktemp=SPIRead(SecondaryStatus_Reg,temp,1);
if(acktemp) return(1);
if(temp[0]&0x40)
{temp[0]=0x0;
acktemp=SPIWrite(Command_Reg,temp,0x1);
if(acktemp) return(1);
return(0);}
temp[0]=0x0;
acktemp=SPIWrite(Command_Reg,temp,0x1);
return(1);
}
//加载密钥
//入口:buff[0]密钥密钥地址
//buff[1]:0
char Load_Key_EE(char n)
{char acktemp,temp[2];
temp[0]=n;temp[1]=0x0;
acktemp=Command_Send(LoadKeyE2,temp,0x2);
if(acktemp) return(1);
acktemp=SPIRead(ErrorFlag_Reg,temp,1);
if(acktemp) return(1);
if(temp[0]&0x40)return(1);
return(0);
}
//读卡:
//sq,扇区,n:读N块
char rdbuff(char sq,char n)
{char acktemp;
acktemp=Authentication(sq);
if(acktemp) return(1);
acktemp=Read_Block(n);
if(acktemp) return(1);
return(0);
}
//三重认证
//N认证的块:
//temp[0]:0x60为A密钥,0x61为B密钥
char Authentication(char sq)
{char acktemp,temp[6],i;
temp[0]=0xf;
acktemp=SPIWrite(ChannelRedundancy_Reg,temp,0x1);
if(acktemp) return(1);
temp[0]=0x61;
temp[1]=sq;
for(i=0;i<4;i++)
temp[2+i]=Card_UID[i];
acktemp=Command_Send(Authent1,temp,0x6);
if(acktemp) return(1);
acktemp=SPIRead(ErrorFlag_Reg,temp,1);
if(acktemp) return(1);
if(temp[0]&0xe)return(1);
acktemp=Command_Send(Authent2,temp,0);
if(acktemp) return(1);
acktemp=SPIRead(ErrorFlag_Reg,temp,1);
if(acktemp) return(1);
if(temp[0]&0xe)return(1);
acktemp=SPIRead(Control_Reg,temp,1);
if(acktemp) return(1);
if(temp[0]&0x8)return(0);
return(1);
}
char Read_Block(char n)
{char acktemp,temp[2];
temp[0]=0xf;
acktemp=SPIWrite(ChannelRedundancy_Reg,temp,0x1);
if(acktemp) return(1);
temp[0]=0x30;temp[1]=n;
acktemp=Command_Send(Transceive,temp,2);
if(acktemp) return(1);
acktemp=SPIRead(ErrorFlag_Reg,temp,1);
if(acktemp) return(1);
if(temp[0]&0xe)return(1);
acktemp=Read_FIFO(temp);
if(acktemp) return(1);
if(temp[0]!=16)return(1);
return(0);
}
char Write_Block(char *ramadr,char n)
{char acktemp,temp[2];
temp[0]=0x7;
acktemp=SPIWrite(ChannelRedundancy_Reg,temp,0x1);
if(acktemp) return(1);
temp[0]=0xa0;temp[1]=n;
acktemp=Command_Send(Transceive,temp,2);
if(acktemp) return(1);
temp[1]= buff[0];
acktemp=Read_FIFO(temp);
if(acktemp) return(1);
if(temp[0]!=1)return(1);
if(buff[0]!=0xa)return(1);
buff[0]=temp[1];
acktemp=Command_Send(Transceive,buff,0x10);
if(acktemp) return(1);
acktemp=Read_FIFO(temp);
if(acktemp) return(1);
if(temp[0]!=1)return(1);
if(buff[0]!=0xa)return(1);
buff[0]=temp[1];
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -