📄 rc531_10月10日.c
字号:
/* RC531_OK: 应答正确 */
/********************************************************************************************************/
char MIF_Write(char *buff,char Block_Adr)
{
char temp;
char *F_buff;
F_buff=buff+0x10;
rc531_register_write(ChannelRedundancy,0x0f);
*F_buff=RF_CMD_WRITE;
*(F_buff+1)=Block_Adr;
temp=Command_Send(2,F_buff,Transceive);
if (temp==FALSE)
return(RC531_NOTAGERR);
temp=rc531_register_read(FIFO_Length);
if (temp==0)
return(RC531_BYTECOUNTERR);
Read_FIFO(F_buff);
temp=*F_buff;
switch(temp)
{
case 0x00 :
return(RC531_NOTAUTHERR);
case 0x04:
return(RC531_EMPTY);
case 0x0a:
break;
case 0x01:
return(RC531_CRCERR);
case 0x05:
return(RC531_PARITYERR);
default:
return(RC531_WRITEERR);
}
temp=Command_Send(16,buff,Transceive);
if (temp==TRUE)
return(RC531_OK);
else
{
temp=rc531_register_read(ErrorFlag);
if ((temp & 0x02)==0x02)
return(RC531_PARITYERR);
else if((temp & 0x04)==0x04)
return(RC531_FRAMINGERR);
else if ((temp & 0x08)==0x08)
return(RC531_CRCERR);
else
return(RC531_WRITEERR);
}
}
/********************************************************************************************************/
/*名称: MIF_Halt */
/*功能: 该函数实现暂停MIFARE卡 */
/* */
/*输入: */
/* N/A */
/* */
/*输出: */
/* RC531_OK: 应答正确 */
/* RC531_PARITYERR: 奇偶校验错 */
/* RC531_CRCERR: CRC校验错 */
/* RC531_NOTAGERR: 无卡 */
/********************************************************************************************************/
char MIF_Halt(void)
{
char temp;
rc531_register_write(ChannelRedundancy,0x03);
*buffer=RF_CMD_HALT;
*(buffer+1)=0x00;
temp=Command_Send(2,buffer,Transmit);
if (temp==TRUE)
return(RC531_OK);
else
{
temp=rc531_register_read(ErrorFlag);
if ((temp & 0x02)==0x02)
return(RC531_PARITYERR);
if ((temp & 0x04)==0x04)
return(RC531_FRAMINGERR);
return(RC531_NOTAGERR);
}
}
/********************************************************************************************************/
/*名称: MIF_Initival */
/*功能: 该函数实现MIFARE卡初始化值操作 */
/* */
/*输入: */
/* buff: 四个字节初始化数值起始地址 */
/* Block_Adr: 块地址 */
/* */
/*输出: */
/* RC531_NOTAGERR: 无卡 */
/* RC531_BYTECOUNTERR: 接收字节错误 */
/* RC531_NOTAUTHERR: 未经权威认证 */
/* RC531_EMPTY: 数据溢出错误 */
/* RC531_CRCERR: CRC校验错 */
/* RC531_PARITYERR: 奇偶校验错 */
/* RC531_WRITEERR: 写卡块数据出错 */
/* RC531_OK: 应答正确 */
/********************************************************************************************************/
char MIF_Initival(char *buff,char Block_Adr)
{
char temp;
char i;
for (i=0;i<4;i++)
*(buff+4+i)=~(*(buff+i));
for (i=0;i<4;i++)
*(buff+8+i)=*(buff+i);
*(buff+12)=Block_Adr;
*(buff+13)=~Block_Adr;
*(buff+14)=Block_Adr;
*(buff+15)=~Block_Adr;
temp=MIF_Write(buff,Block_Adr);
return(temp);
}
/********************************************************************************************************/
/*名称: MIF_private */
/*功能: 该函数实现MIFARE卡初始化值操作 */
/* */
/*输入: */
/* SecNR:需设置密码和数据格式的扇区号 */
/* */
/*输出: */
/* RC531_NOTAGERR: 无卡 */
/* RC531_BYTECOUNTERR: 接收字节错误 */
/* RC531_NOTAUTHERR: 未经权威认证 */
/* RC531_EMPTY: 数据溢出错误 */
/* RC531_CRCERR: CRC校验错 */
/* RC531_PARITYERR: 奇偶校验错 */
/* RC531_WRITEERR: 写卡块数据出错 */
/* RC531_OK: 应答正确 */
/********************************************************************************************************/
char MIF_private(char SecNR)
{
char i,temp;
char Key[12],Access_Bytes[16];
for(i=0;i<6;i++)
{ Access_Bytes[i]=0x00;
Access_Bytes[10+i]=0xff;
}
Access_Bytes[6]=0x80;
Access_Bytes[7]=0xf7;
Access_Bytes[8]=0x87;
Access_Bytes[9]=0x00;
for(i=0;i<12;i++)
{
Key[i]=0x0f; //key=key_Set_In_Factory
}
temp=Load_key_CPY(Key);
if(temp!=1)
return(RC531_LOADKEYERR);
temp=Authentication(UID,SecNR,0);
if(temp!=0)
return(temp);
temp=MIF_Write(Access_Bytes,(SecNR*4+3));
if(temp!=0)
return(temp);
temp=MIF_Halt();
if(temp!=0)
return(temp);
return(RC531_OK);
}
/********************************************************************************************************/
/*名称: MIF_Increment */
/*功能: 该函数实现MIFARE卡自动增值操作 */
/* */
/*输入: */
/* buff: 四个字节数值起始地址 */
/* Block_Adr: 块地址 */
/* */
/*输出: */
/* RC531_NOTAGERR: 无卡 */
/* RC531_BYTECOUNTERR: 接收字节错误 */
/* RC531_NOTAUTHERR: 未经权威认证 */
/* RC531_EMPTY: 数据溢出错误 */
/* RC531_CRCERR: CRC校验错 */
/* RC531_PARITYERR: 奇偶校验错 */
/* RC531_INCRERR: 卡片增款操作失败 */
/* RC531_OK: 应答正确 */
/********************************************************************************************************/
char MIF_Increment(char *buff,char Block_Adr)
{
char temp;
char *F_buff;
F_buff=buff+4;
*F_buff=RF_CMD_INC;
*(F_buff+1)=Block_Adr;
rc531_register_write(ChannelRedundancy,0x0f);
temp=Command_Send(2,F_buff,Transceive);
if (temp==FALSE)
return(RC531_NOTAGERR);
temp=rc531_register_read(FIFO_Length);
if (temp==0)
return(RC531_BYTECOUNTERR);
Read_FIFO(F_buff);
temp=*F_buff;
switch(temp)
{
case 0x00 :
return(RC531_NOTAUTHERR);
case 0x04:
return(RC531_EMPTY);
case 0x0a:
break;
case 0x01:
return(RC531_CRCERR);
case 0x05:
return(RC531_PARITYERR);
default:
return(RC531_INCRERR);
}
temp=Command_Send(4,buff,Transmit);
if (temp==FALSE)
return(RC531_INCRERR);
return(RC531_OK);
}
/********************************************************************************************************/
/*名称: MIF_Decrement */
/*功能: 该函数实现MIFARE卡自动减值操作 */
/* */
/*输入: */
/* buff: 四个字节数值起始地址 */
/* Block_Adr: 块地址 */
/* */
/*输出: */
/* RC531_NOTAGERR: 无卡 */
/* RC531_BYTECOUNTERR: 接收字节错误 */
/* RC531_NOTAUTHERR: 未经权威认证 */
/* RC531_EMPTY: 数据溢出错误 */
/* RC531_CRCERR: CRC校验错 */
/* RC531_PARITYERR: 奇偶校验错 */
/* RC531_DECRERR: 卡片扣款操作失败 */
/* RC531_OK: 应答正确 */
/********************************************************************************************************/
char MIF_Decrement(char *buff,char Block_Adr)
{
char temp;
char *F_buff;
F_buff=buff+4;
*F_buff=RF_CMD_DEC;
*(F_buff+1)=Block_Adr;
rc531_register_write(ChannelRedundancy,0x0f);
temp=Command_Send(2,F_buff,Transceive);
if (temp==FALSE)
return(RC531_NOTAGERR);
temp=rc531_register_read(FIFO_Length);
if (temp==0)
return(RC531_BYTECOUNTERR);
Read_FIFO(F_buff);
temp=*F_buff;
switch(temp)
{
case 0x00 :
return(RC531_NOTAUTHERR);
case 0x04:
return(RC531_EMPTY);
case 0x0a:
break;
case 0x01:
return(RC531_CRCERR);
case 0x05:
return(RC531_PARITYERR);
default:
return(RC531_DECRERR);
}
temp=Command_Send(4,buff,Transmit);
if (temp==FALSE)
return(RC531_DECRERR);
return(RC531_OK);
}
/********************************************************************************************************/
/*名称: MIF_Restore */
/*功能: 该函数实现MIFARE卡自动恢复,备份操作 */
/* */
/*输入: */
/* Block_Adr: 块地址 */
/* */
/*输出: */
/* RC531_NOTAGERR: 无卡 */
/* RC531_BYTECOUNTERR: 接收字节错误 */
/* RC531_NOTAUTHERR: 未经权威认证 */
/* RC531_EMPTY: 数据溢出错误 */
/* RC531_CRCERR: CRC校验错 */
/* RC531_PARITYERR: 奇偶校验错 */
/* RC531_RESTERR: 卡片恢复,备份操作失败 */
/* RC531_OK: 应答正确 */
/********************************************************************************************************/
char MIF_Restore(char Block_Adr)
{
char temp,i;
*buffer=RF_CMD_RESTORE;
*(buffer+1)=Block_Adr;
temp=Command_Send(2,buffer,Transceive);
if (temp==FALSE)
return(RC531_NOTAGERR);
temp=rc531_register_read(FIFO_Length);
if (temp==0)
return(RC531_BYTECOUNTERR);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -