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

📄 trh031v1.c

📁 This is a source of 13.560MHz RFID card reader for TRH031M as ATMEGA8-16AU MPU. The title is 3Alogi
💻 C
📖 第 1 页 / 共 4 页
字号:
			rf_write(0x1A, 0x08);			// Reset Zero After Coll
		}
		
		else
		{
			anti_col =0;
			for(i=byte_cnt; i<5; i++)
			{
			  cid[i] += rf_read(0x02);
			}
			rf_write(0x0F, 0x00);			// Reset Rx Align
			rf_write(0x1A, 0x08);			// Reset Zero After Coll
		}
	}

	//for(i=0;i<5;i++) Tx(CID[i]);
	rf_write(0x22, 0x0F);         // RxCRCEn,TxCRCEn,ParityOdd,ParityEn
	rf_write(0x09, 0x01);					// Clear FIFO
	rf_write(0x02, 0x93);					// 93 -> FIFO
	rf_write(0x02, 0x70);					// 70 -> FIFO

	for(i=0;i<5;i++) 
	{
	  rf_write(0x02, cid[i]);			// Card ID -> FIFO
	}	
	rf_write(0x01, 0x1E);					// command =tranceive
  delay_ms(100); 								// delay timer =1000us
}

// *********************************************** 
// rf halt process
// if halt =return 1
// *********************************************** 
void func_halt(void)
{
	//rf_halt_process();					// command for halt									 
	rf_write(0x09, 0x01);					// control =fluash fifo									 
	rf_write(0x02, 0x50);					// tx data =0x50
	rf_write(0x02, 0x00);					// tx data =0x00
	rf_write(0x22, 0x0F);					// redundance =rxCRC,txCRC,ParityOdd,ParytyEn
	rf_write(0x01, 0x1A);					// command =transmit only 									 		
	delay_10us(t_rec);	 					// delay time =500us

	//if (rf_read(0x04) == 0x00) tx_buf[0]=MI_OK;
	//else tx_buf[0]=MI_HALT_ERR;
	rf_write(0x01, 0x00);				 // command =idle
	//return 1;
}

// *********************************************** 
// rf select acknoledge
// if good =return 1
// if error =return 0
// *********************************************** 
char func_sak(void)
{
  // SAK(Select Acknowledge) 犬牢, Err Check
  if ((rf_read(0x04) ==0x01) & !(rf_read(0x0A) & 0x3F)) 
	{
    uart_puts("Select ACK = ");
		uart_hex(rf_read(0x02));
    uart_cr();
		rf_write(0x22, 0x0F);			 // redundance =rxCRC,txCRC,ParityOdd 
    func_halt();		 					 // stop transmit
    return 1;									 // good
   }
	
	else
	{
    uart_fail("Anti collision");
		rf_write(0x01, 0x00);			// command =idle	
		return 0;			 						// error
	}
}

// *********************************************** 
// ISO 14443B setup
// *********************************************** 
void rf_14443b_set(void)
{
  rf_write(0x26, 0x02);				// test_out pin =Manchester coded signal
	rf_write(0x11, 0x4B);
	rf_write(0x12, 0x3f);
	rf_write(0x13, 0x03);
	rf_write(0x19, 0x03);    		//Gain

	rf_write(0x14, 0x20);    		// Coder B Set
	rf_write(0x1A, 0x18);    		// Decoder B Set.
	rf_write(0x22, 0x2c);	   		// CRC Enable
	rf_write(0x07, 0x3f);    		// IRQ Clear
	rf_write(0x0a, 0x00);    		// Error Clear
	rf_write(0x09, 0x01);    		// Error Clear
    
	rf_write(0x17, 0x27);    		// SOF, EOF Width Change
	rf_write(0x21, 0x0B);    		// RXWait Change 
	rf_write(0x0A, 0x00);    		// RXWait Change 
	rf_write(0x1C, 0x18);    		//

	if (auto_mode != 0xAF)
	{
		uart_puts("14443B register set !!");
		uart_cr();
	}
}

// *********************************************** 
// ISO 14443B execute
// *********************************************** 
void rf_reqb_exec(void)
{
	char len;
	char i;
	
	rf_write(0x09, 0x01);
	rf_write(0x02, 0x05);
	rf_write(0x02, 0x00);
	rf_write(0x02, 0x00);
	rf_write(0x01, 0x1E);
	delay_10us(t_rec);	 			 		// delay time =500us										 

	//Display_SFR();
	len = rf_read(0x04);
	
	if ((len ==0x0C) && ((rf_read(0x0A) & 0x08) !=0x08))
	{		 
		suma = 0x00; 
		for(i=0; i<0x05; i++)
		{ 
			cid_buf[i] = rf_read(0x02);
			suma = suma | cid_buf[i];
			};
		if (suma ==0x00)
		{
		  return;
    }
		if (cid_buf[1] ==0xFF && cid_buf[2] ==0xFF 
		&& cid_buf[3] ==0xFF && cid_buf[4] ==0xFF)
		{
		  return;
		}
				
		uart_puts("14443B ");
		uart_cid5();
		rf_write(0x01, 0x00);
		return;
	}
	else		 				 			 // UID Read Fail 
	{
		uart_fail("14443B ID");
		rf_write(0x01, 0x00);
		return;
	}	
}

// *********************************************** 
// ISO 14443B auto execute
// *********************************************** 
void rf_reqb_auto(void)
{
	char len;
	char i;

	rf_write(0x09, 0x01);
	rf_write(0x02, 0x05);
	rf_write(0x02, 0x00);
	rf_write(0x02, 0x00);
	rf_write(0x01, 0x1E);
	delay_10us(t_rec);			 				// delay time =500us										 
	
	//Display_SFR();
	len = rf_read(0x04);
  if (rf_read(0x0A) !=0x00) 
	{ 
	  rf_write(0x01, 0x00);
	  return; 
	}
  
	else if ((len ==0x0C) && ((rf_read(0x0A) & 0x08) !=0x08))
	{		 
		suma =0x00; 
		for(i=0; i<0x05; i++)
		{ 
			cid_buf[i] = rf_read(0x02);
			suma = suma | cid_buf[i];
		}
		
		if (suma ==0x00)
		{
		  return;
		}
		
		if (cid_buf[1] ==0xFF && cid_buf[2] ==0xFF 
		&& cid_buf[3] ==0xFF && cid_buf[4] ==0xFF) 
		{
		  return;
		}

		uart_puts("14443B ");
		uart_cid5();
		rf_write(0x01, 0x00);
		return;
	}
	
	else		 				 // UID Read Fail 
	{
		uart_fail("14443B ID");
		rf_write(0x01, 0x00);
		return;
	}
}

// *********************************************** 
// ISO 15693 setup
// *********************************************** 
void rf_15693_set(void)
{
  rf_write(0x26, 0x02);				// test_out pin =Manchester coded signal
	rf_write(0x11, 0x5B); 			// TXCONTROL
	rf_write(0x12, 0x3F);

	rf_write(0x19, 0x03); 			// rxcontrol1
	rf_write(0x1C, 0x18); 			// rxthreshold, for analog
	rf_write(0x22, 0x6C);  			// 2C -> 6C Change
	rf_write(0x0a, 0x00);  			// Error Clear
  rf_write(0x21, 0x08);   	 	// RXWait Change 
	rf_write(0x14, 0x2F);	
	rf_write(0x1A, 0x10); 	
  rf_write(0x09, 0x01);
	rf_write(0x07, 0x3f); 		 // IRQ Clear
	rf_write(0x0a, 0x00); 		 // Error Clear
    
  if (auto_mode != 0xAF)
	{
		uart_puts("15693 register set !!");
		uart_cr();
	}
}

// *********************************************** 
// ISO 15693 execute
// *********************************************** 
void rf_15693_exec(void)
{
	char i;
	char t;
	
	rf_write(0x09, 0x01);
	rf_write(0x02, 0x36);
	rf_write(0x02, 0x01);
	rf_write(0x02, 0x00);
	rf_write(0x02, 0x00);
	rf_write(0x01, 0x1E);
	delay_10us(t_rec);		 				// delay time =500us										 
		
	length =rf_read(0x04);
	//**************************** For Error State Escape
	t =rf_read(0x01);
	if (t == 0x1E)
	{ 
		rf_write(0x01, 0x00);
		return;
	}
	t =rf_read(0x07);
	if (t ==0x31)
	{ 
		return;
	}
  //**************************** For Error State Escape
	
	if (rf_read(0x0A) !=0x00) 
	{ 
	  uart_fail("15693 ");
	  rf_write(0x01, 0x00);
	  return; 
	}
  
	else if(length ==0x0C)
	{	
		suma =0x00; 
		for(i=0; i<0x05; i++)
		{ 
		  cid_buf[i] =rf_read(0x02);	//SUMA = SUMA | CIDBuf[i];
		}
		uart_puts("15693 ");
		uart_cid5();
	  rf_write(0x01, 0x00);
		return;
	}
	
	else		 				 // UID Read Fail
	{
		uart_fail("15693 ID");
		rf_write(0x01, 0x00);
		return;
	}
}

// *********************************************** 
// 
// *********************************************** 
void rf_15693_mask2(void)
{
	char i;
	char t;
	
	rf_write(0x09, 0x01);
	rf_write(0x02, 0x36);
	rf_write(0x02, 0x01);
	rf_write(0x02, 0x00);
	rf_write(0x02, 0x08);
	rf_write(0x02, bbb);
	rf_write(0x01, 0x1E);
	//	printf("B = %02X \n ",  (int)BBB);
	delay_10us(t_rec);		 	 		// delay time =500us	
	
	rf_write(0x01, 0x00);
	t =rf_read(0x01);
	if (t == 0x1E)
	{ 
		rf_write(0x01, 0x00);
		return;
	}

	t = rf_read(0x07);
	if (t ==0x31)
	{ 
		return;
	}
   
	length =rf_read(0x04);
  if(length ==0x0C)
	{	
		for(i=0; i<0x05; i++)
		{ 
			cid_buf[i] =rf_read(0x02);			
		}

		uart_puts("15693 ");
		uart_cid5();  
		return;
	}

	else  if (length ==0x00)		// UID Read Fail
	{		
	 	uart_fail("15693 ID");   // Fail Indicator
		return;
	}		
	else if (length ==0x02) 	 // Collision Detected// Collision Detected
	{ 
	  uart_puts("3rd collision error detected $$$$$ = ");
		uart_cr();
	  // ========================================
	  return; 
	}
}

// *********************************************** 
// 
// *********************************************** 
void rf_second_collision(void)
{
	char j;
	//b = mask1;
	
	for (j=0; j<16; j=j+1)
	{
		//Slot = i;
		mask2 = j;
		//printf("B = %02X \n ",  (int)BBB);
		mask2 = (mask2 << 4);
		b =(mask1 | mask2);
		//Send_EOF();
		bbb =b;
		//printf("Mask = %02X  j = %02X  Mask2 = %02X B = %02X \n ",  (int)Mask, (int)j, (int)Mask2, (int)BBB);
		rf_15693_mask2();
	}
	//printf("======================================= \n "); 
}

// *********************************************** 
// 
// *********************************************** 
void rf_15693_mask(void)
{
	char i;
	char t;

	rf_write(0x09, 0x01);
	rf_write(0x02, 0x36);
	rf_write(0x02, 0x01);
	rf_write(0x02, 0x00);
	rf_write(0x02, 0x04);
	rf_write(0x02, mask1);
	rf_write(0x01, 0x1E);
	delay_10us(t_rec);		 	 		// delay time =500us

	//**************************** For Error State Escape
	t =rf_read(0x01);
	if (t ==0x1E)
	{ 
		rf_write(0x01, 0x00);
		return;
	}	
	
	t =rf_read(0x07);
	if (t == 0x31)
	{ 
		return;
	}
  //**************************** For Error State Escape
	
	if (rf_read(0x0A) != 0x00) 
	{ 
		rf_write(0x01, 0x00);
		//printf("15693 Error = \n ");
		return; 
	}

	length =rf_read(0x04);
	if (length ==0x0C)
	{	
		for(i=0; i <0x05; i++)
		{ 
			cid_buf[i] = rf_read(0x02);
		}
		uart_puts("15693 ");
		uart_cid5();
		return;
	}

	else  if (length ==0x00)		// UID Read Fail
	{		
			return;
	}		
	
	else if (length ==0x02 || length ==0x03) // Collision Detected
	{ 
	  uart_puts("Collision error detected !!");
		uart_cr();
	  rf_second_collision();
	  return; 
	}
}

// *********************************************** 
// 
// *********************************************** 
void rf_15693_auto(void)
{
	char i;

  mask1 =0;
	for (i=0; i<16; i=i+1)
	{
		mask1 = i;
		rf_15693_mask();
	}
	//printf("======================================= \n "); 
}

// *********************************************** 
// 
// *********************************************** 
void rf_send_eof(void)
{
	rf_write(0x09, 0x01);
	rf_write(0x01, 0x1E);
	delay_10us(t_idl);		 	 		// delay time =100us
	
	rf_write(0x01, 0x00);
}

// *********************************************** 
// 
// *********************************************** 
void rf_fifo_check(void)
{
	char len;
	char i;
	
	len =rf_read(0x04);
  if (rf_read(0x0A) !=0x00) 
	{ 
		rf_write(0x01, 0x00);
		return; 
	}
  
	else if(len ==0x0A)
	{		 

⌨️ 快捷键说明

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