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

📄 rc531_10月10日.c

📁 采用TI公司MSP430来控制RC531的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	Read_FIFO(buffer);
	temp=*buffer;
	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_RESTERR);
	}

	for (i=0;i<4;i++)
		buffer[i]=0x00;
	temp=Command_Send(4,buffer,Transmit);
	if (temp==FALSE)
		return(RC531_RESTERR);
	return(RC531_OK);
}

/********************************************************************************************************/
/*名称: MIF_Transfer                                                                     	      	*/
/*功能: 该函数实现MIFARE卡电子钱包保存操作						                */                           	             
/*												      	*/											
/*输入:  	                                                               				*/
/*      Block_Adr: 块地址		                                                               	*/
/*                                                                                                     	*/
/*输出:                                                                                                	*/
/*	RC531_NOTAGERR: 无卡			               						*/
/*	RC531_BYTECOUNTERR: 接收字节错误								*/
/*	RC531_NOTAUTHERR: 未经权威认证									*/
/*	RC531_EMPTY: 数据溢出错误									*/
/*	RC531_CRCERR: CRC校验错										*/
/*	RC531_PARITYERR: 奇偶校验错									*/
/*	RC531_TRANSERR: 卡片恢复,备份操作失败								*/
/*	RC531_OK: 应答正确										*/
/********************************************************************************************************/
char MIF_Transfer(char Block_Adr)
{
	char temp;
	
	buffer[0]=RF_CMD_TRANSFER;
	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);
	Read_FIFO(buffer);
	temp=*buffer;
	switch(temp)
	{
		case 0x00 :
			return(RC531_NOTAUTHERR);
		case 0x04:
			return(RC531_EMPTY);
		case 0x0a:
			return(RC531_OK);
		case 0x01:
			return(RC531_CRCERR);
		case 0x05:
			return(RC531_PARITYERR);
		default:
			return(RC531_TRANSERR);
	}	
}

/********************************************************************************************************/
/*名称: 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);
}

/********************************************************************************************************/
/*名称: HL_Increment                                                                     	     	*/
/*功能: 该函数实现高级增款命令						                                */                           	             
/*												      	*/											
/*输入:                                                                                                	*/
/*	buff: 待写入增款值的首地址									*/
/* 	Secnr: 扇区号     		                                                               	*/
/*	Block_Adr: 块地址										*/
/*                                                                                                     	*/
/*输出:                                                                                                	*/
/*	操作状态码											*/
/********************************************************************************************************/
char HL_Increment(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);
	//Increment
	temp=MIF_Increment(buff,Block_Adr);
	if(temp!=RC531_OK)
		return(RC531_INCRERR);
	//Transfer
	temp=MIF_Transfer(Block_Adr);
	//Halt
	MIF_Halt();
	if(temp!=RC531_OK)
		return(RC531_TRANSERR);
	else
	        return(RC531_CMD_ERR);
}

/********************************************************************************************************/
/*名称: HL_Decrement                                                                     	     	*/
/*功能: 该函数实现高级扣款命令						                                */                           	             
/*												      	*/											
/*输入:                                                                                                	*/
/*	buff: 待写入扣款值的首地址									*/
/* 	Secnr: 扇区号     		                                                               	*/
/*	Block_Adr: 块地址										*/
/*                                                                                                     	*/
/*输出:                                                                                                	*/
/*	操作状态码											*/
/********************************************************************************************************/
char HL_Decrement(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);
	//decrement
	temp=MIF_Decrement(buff,Block_Adr);
	if(temp!=RC531_OK)
		return(RC531_DECRERR);
	//Transfer
	temp=MIF_Transfer(Block_Adr);
	//Halt
	MIF_Halt();
	if(temp!=RC531_OK)
		return(RC531_TRANSERR);
	else
	        return(RC531_CMD_ERR);
}

#endif

⌨️ 快捷键说明

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