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

📄 iso14443a.c

📁 RFID读卡器TRH031开发源码
💻 C
字号:
/***********************************************************
* Company	:	3ALOGICS                                   *
************************************************************/
#include <stdio.h>

#include "common.h"
#include "base.h"

void AREG_Set(void) 
{ 
    Write(0x31, 0x00); //CWConduct

    Write(0x11, 0x5B); //CWConduct
	Write(0x12, 0x3F); //CWConduct
	Write(0x19, 0x01); //rxcontrol1 0111_0011
	Write(0x1C, 0x18); //rxthreshold, for analog
    Write(0x15, 0x10); //Modwidth(AType, Default : 13) 

	Write(0x14, 0x01); // Coder A Set.
	Write(0x1A, 0x08); // DeCoder A Set.
	Write(0x21, 0x06); // RxWait Set.
	
	if (AutoMode != 0xAF) {
		printf("A Type Register Set !! \n " );
	}
	
	Write(0x1E, 0x81); 
//  Write(0x1F, 0x85); // AThresh high/ Athersh low 
//	Write(0x22, 0x03); //ChannelRedundancy |0|0|CRC3309|CRC8|RxCRCEn|TxCRCEn|ParityOdd|ParityEn|
	Write(0x0a, 0x00); //Error Clear
}

void Exec_REQA(void)
{
   BYTE i;
	//Write(0x31, 0x01); //Option Select A/B Type
	Write(0x0F, 0x07); //BITFRAME   |0| RxAlign  | 0 | TxLastBits | 
	Write(0x22, 0x03); //ChannelRedundancy |0|0|CRC3309|CRC8|RxCRCEn|TxCRCEn|ParityOdd|ParityEn|
	Write(0x09, 0x01); //Control |0|0|StandBy|PowerDown|Crypto1On|TStopNow|TStartNow|FlushFIFO|
	Write(0x02, 0x26); //transmit data
	Write(0x01, 0x1E); //Transceive
	DelayIdleTime(4);

	
	if( Read(0x04) == 0x02 )   // ATQA Response O.K
	{
		for(i=0; i<2; i++) CIDBuf[i] = Read(0x02);
		printf("REQA O.K!! = %02X %02X \n ", (int)CIDBuf[0], (int)CIDBuf[1] );
		LCDType = 1;
		DisplayLCD();
	}
	else	{    // No ATQA Response 
		printf("No Response !! \n " );
		Write(0x01, 0x00);
		return;
	}
}

void Exec_RDID(void)
{
    BYTE i;

	//Write(0x31, 0x01); //Option Select A/B Type
      
		Write(0x1A, 0x28);				// ZeroAfterColl activation   
		Write(0x09, 0x01);				// Clear FIFO
		Write(0x02, 0x93);				// 93 -> FIFO
		Write(0x02, 0x20);				// NVB -> FIFO

		Write(0x01, 0x1E);					// Transceive

		DelayIdleTime(5);
		//Display_SFR();
		
	   if( Read(0x04) == 0x05 ) {    // UID Read O.K
			//printf("ERR = %02X  \n ",  (int)Read(0x0A));
			SUMA = 0x00; 
			for(i=0; i<0x05; i++) { 
				CIDBuf[i] = Read(0x02);
				SUMA = SUMA | CIDBuf[i];
			};
			if (SUMA == 0x00) { return; };

		
			printf("A Type ID = %02X %02X %02X %02X %02X \n ",  
			   (int)CIDBuf[0], (int)CIDBuf[1], (int)CIDBuf[2], (int)CIDBuf[3], (int)CIDBuf[4]);	
			   LCDType = 2;
			   DisplayLCD();
            
		   	Write(0x01, 0x00);
			return;
		}
		else {		// UID Read Fail
	  		printf("ID Read Fail !! \n " ) ;   // Fail Indicator
			Write(0x01, 0x00);
			return;
		}
}

void Exec_REQA_RDID(void)
{
    BYTE i;
    
	Write(0x0F, 0x07); //BITFRAME   |0| RxAlign  | 0 | TxLastBits | 
	Write(0x22, 0x03); //ChannelRedundancy |0|0|CRC3309|CRC8|RxCRCEn|TxCRCEn|ParityOdd|ParityEn|
	Write(0x09, 0x01); //Control |0|0|StandBy|PowerDown|Crypto1On|TStopNow|TStartNow|FlushFIFO|
	Write(0x02, 0x26); //transmit data

	Write(0x01, 0x1E); //Transceive

	DelayIdleTime(1);
		
	if( Read(0x04) == 0x02 )   // ATQA Response O.K
	{
		Write(0x1A, 0x28);				// ZeroAfterColl activation   
		Write(0x09, 0x01);				// Clear FIFO
		Write(0x02, 0x93);				// 93 -> FIFO
		Write(0x02, 0x20);				// NVB -> FIFO

		Write(0x01, 0x1E);					// Transceive

		DelayIdleTime(2);
	
		if( Read(0x04) == 0x05 ) {    // UID Read O.K
			for(i=0; i<5; i++) CIDBuf[i] = Read(0x02);
			printf("A Type ID = %02X %02X %02X %02X %02X \n " , 
			  (int)CIDBuf[0], (int)CIDBuf[1], (int)CIDBuf[2], (int)CIDBuf[3], (int)CIDBuf[4]);	
			   LCDType = 2;
				DisplayLCD();
				//printf("ERR = %02X  \n ",  (int)Read(0x0A));
		  Write(0x01, 0x00);
			return;
		}
		else {		// UID Read Fail
	  		printf("ID Read Fail !! \n " ) ;   // Fail Indicator
			Write(0x01, 0x00);
			return;
		}
	}
	else	{    // No ATQA Response 
		printf("No Response !! \n " );
		Write(0x01, 0x00);
		return;
	}
}

void Exec_REQA_RDID_Auto(void)
{
    BYTE i;
    
	Write(0x0F, 0x07); //BITFRAME   |0| RxAlign  | 0 | TxLastBits | 
	Write(0x22, 0x03); //ChannelRedundancy |0|0|CRC3309|CRC8|RxCRCEn|TxCRCEn|ParityOdd|ParityEn|
	Write(0x09, 0x01); //Control |0|0|StandBy|PowerDown|Crypto1On|TStopNow|TStartNow|FlushFIFO|
	Write(0x02, 0x26); //transmit data

	Write(0x01, 0x1E); //Transceive

	DelayIdleTime(1);
		
	if( Read(0x04) == 0x02 )   // ATQA Response O.K
	{
		Write(0x1A, 0x28);				// ZeroAfterColl activation   
		Write(0x09, 0x01);				// Clear FIFO
		Write(0x02, 0x93);				// 93 -> FIFO
		Write(0x02, 0x20);				// NVB -> FIFO

		Write(0x01, 0x1E);					// Transceive

		DelayIdleTime(2);
	    
		if (Read(0x0A) != 0x00) 
		{ 
		   Write(0x01, 0x00);
		   return; 
		}
		else if( Read(0x04) == 0x05 ) {    // UID Read O.K
			for(i=0; i<5; i++) CIDBuf[i] = Read(0x02);
			printf("A Type ID = %02X %02X %02X %02X %02X \n " , 
			  (int)CIDBuf[0], (int)CIDBuf[1], (int)CIDBuf[2], (int)CIDBuf[3], (int)CIDBuf[4]);	
			   LCDType = 2;
				DisplayLCD();
		  Write(0x01, 0x00);
			return;
		}
		else {		// UID Read Fail
	  		//printf("ID Read Fail !! \n " ) ;   // Fail Indicator
			Write(0x01, 0x00);
			return;
		}
	}
	else	{    // No ATQA Response 
		//printf("No Response !! \n " );
		Write(0x01, 0x00);
		return;
	}
}

⌨️ 快捷键说明

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