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

📄 rc531.c

📁 采用TI公司MSP430来控制RC531的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
/*	RC531_CRCERR: CRC校验错										*/
/*	RC531_PARITYERR: 奇偶校验错									*/
/*	RC531_WRITEERR: 写卡块数据出错									*/
/*	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);
}

/********************************************************************************************************/
/*名称: HL_Initial                                                                     	     	  	*/
/*功能: 该函数实现高级初始化命令						                        */                           	             
/*												      	*/											
/*输入:                                                                                                	*/
/*	buff: 待写入初始化数据的首地址									*/
/* 	Secnr: 扇区号     		                                                               	*/
/*	Block_Adr: 块地址										*/
/*                                                                                                     	*/
/*输出:                                                                                                	*/
/*	操作状态码											*/
/********************************************************************************************************/
char HL_Initial(char *buff,char Block_Adr,char Mode)
{
	char temp;

	Secnr=Block_Adr/4;
	//Halt
	MIF_Halt();
	//Request
	temp=Request(RF_CMD_REQUEST_ALL );
	if(temp!=RC531_OK)
		return(RC531_REQERR);
	//AntiCol and Select
	temp=AntiColl();
	if(temp!=RC531_OK)
		return(RC531_ANTICOLLERR);
	temp=Select_Card();
	if(temp!=RC531_OK)
		return(RC531_SELERR);
	//LoadKey
	Load_keyE2_CPY(Secnr,Mode);
	//Authentication
	temp=Authentication(UID,Secnr,Mode);
	if(temp!=RC531_OK)
		return(RC531_AUTHERR);
	//Initial
	temp=MIF_Initival(buff,Block_Adr);
	if(temp!=RC531_OK)
		return(RC531_INTIVALERR);
	//Halt
	MIF_Halt();
	return(RC531_OK);
}

/********************************************************************************************************/
/*名称: HL_Read                                                                     	     	  	*/
/*功能: 该函数实现高级读命令						                                */                           	             
/*												      	*/											
/*输入:                                                                                                	*/
/* 	Secnr: 扇区号     		                                                               	*/
/*	Block_Adr: 块地址										*/
/*                                                                                                     	*/
/*输出:                                                                                                	*/
/*	操作状态码											*/
/*	读出数据存于buffer中										*/
/********************************************************************************************************/
char HL_Read(char *buff,char Block_Adr,char Mode)
{
	char temp;
	
	Secnr=Block_Adr/4;
	//Halt
	MIF_Halt();
	//Request
	temp=Request(RF_CMD_REQUEST_STD);
	if(temp!=RC531_OK)
		return(RC531_REQERR);
	//AntiCol and Select
	temp=AntiColl();
	if(temp!=RC531_OK)
		return(RC531_ANTICOLLERR);
	temp=Select_Card();
	if(temp!=RC531_OK)
		return(RC531_SELERR);
	//LoadKey
	Load_keyE2_CPY(Secnr,Mode);
	//Authentication
	temp=Authentication(UID,Secnr,Mode);
	if(temp!=RC531_OK)
		return(RC531_AUTHERR);
	//Read
	temp=MIF_READ(buff,Block_Adr);
	//Halt
	MIF_Halt();
	if(temp!=RC531_OK)
		return(RC531_READERR);
	else
	        return(RC531_CMD_ERR);
}

/********************************************************************************************************/
/*名称: HL_Write                                                                     	     	  	*/
/*功能: 该函数实现高级写命令						                                */                           	             
/*												      	*/											
/*输入:                                                                                                	*/
/*	buff: 待写入数据的首地址									*/
/* 	Secnr: 扇区号     		                                                               	*/
/*	Block_Adr: 块地址										*/
/*                                                                                                     	*/
/*输出:                                                                                                	*/
/*	操作状态码											*/
/********************************************************************************************************/
char HL_Write(char *buff,char Block_Adr,char Mode)
{
	char temp;
	
	Secnr=Block_Adr/4;
	//Halt
	MIF_Halt();
	//Request
	temp=Request(RF_CMD_REQUEST_STD );
	if(temp!=RC531_OK)
		return(RC531_REQERR);
	//AntiCol and Select
	temp=AntiColl();
	if(temp!=RC531_OK)
		return(RC531_ANTICOLLERR);
	temp=Select_Card();
	if(temp!=RC531_OK)
		return(RC531_SELERR);
	//LoadKey
	Load_keyE2_CPY(Secnr,Mode);
	//Authentication
	temp=Authentication(UID,Secnr,Mode);
	if(temp!=RC531_OK)
		return(RC531_AUTHERR);
	//Write
	temp=MIF_Write(buff,Block_Adr);
	//Halt
	MIF_Halt();
	if(temp!=RC531_OK)
		return(RC531_WRITEERR);
	else
	        return(RC531_CMD_ERR);
}

#endif

⌨️ 快捷键说明

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