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

📄 prd_config.c

📁 读RF卡的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
      v_fnSPI_SendByte(P0_REG_NO_RST | P0_PAGE_SELECT_3 | P0_RFON);
      v_fnSPI_SendByte(SEND_EOF | SEND_SOF | PARITY_EN);
      v_fnSPI_SendByte(RCV_SOF| RCV_EOF  | PARITY_ODD);
      v_fnSPI_SendByte(CODING_ISO_14443A | DECODING_ISO_14443A);
      v_fnSPI_SendByte(CODING_BIT_RATE_106K | DECODING_BIT_RATE_106K | SOF_TYPE_0);
      v_fnSPI_SendByte(CRC_INV_DISABLE | CRC_SKIP_0 | CRC_INIT_6363);
   }

   else if (p_pStructReader->s_bRProtocol == SONY_PROTOCOL)
   {
      *p_pbRFReceiveEOF=0;
      p_pStructReader->s_bRSpeedConfig = (CODING_BIT_RATE_212K | DECODING_BIT_RATE_212K);

      // Configure protocol page 4 as SONY 212kbps protocol
      v_fnCS_reset();
	  v_fnSPI_SendByte(P0_REG_NO_RST | P0_PAGE_SELECT_4 | P0_RFON);
	  v_fnSPI_SendByte(0x00);
	  v_fnSPI_SendByte(0x00);
	  v_fnSPI_SendByte(CODING_ISO_SONY | DECODING_ISO_SONY);
	  v_fnSPI_SendByte(CODING_BIT_RATE_212K | DECODING_BIT_RATE_212K);
	  v_fnSPI_SendByte(CRC_SKIP_8);
   }
  
  

   // Configure Page 7
   v_fnCS_reset();
   v_fnSPI_SendByte(P0_REG_NO_RST | P0_PAGE_SELECT_7 | P0_RFON);
   v_fnSPI_SendByte(P7_R1_DEFAULT);
   v_fnSPI_SendByte(P7_R2_DEFAULT);
}

//-----------------------------------------------------------------------------
// Function : v_fnConfigParameters(unsigned char* p_abParameters,StructReader* p_pStructReader)
//-----------------------------------------------------------------------------
// Description : Configure reader protocol parameter
//
// IN       :   p_bParameters : protocol parameters
//
// OUT      :   p_pStructReader->s_bReaderSupportedSpeed
//              p_pStructReader->s_bRFrameSizeMax
//              p_pStructReader->s_bCommunicationSupportedSpeed
//              p_pStructReader->s_bRFrameSizeUsed
//
// RETURN   :   - none -
//
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnConfigParameters(unsigned char* p_abParameters,StructReader* p_pStructReader)
{
   p_pStructReader->s_bReaderSupportedSpeed = p_abParameters[0];
   p_pStructReader->s_bRFrameSizeMax = p_abParameters[1];
   p_pStructReader->s_bCommunicationSupportedSpeed = p_abParameters[0] & 0xF7;
   p_pStructReader->s_bRFrameSizeUsed = p_abParameters[1] & 0xFE;
}

//-----------------------------------------------------------------------------
// Function : v_fnConfigAnticollision(unsigned char* p_abAnticolOptions,StructReader* p_pStructReader)
//-----------------------------------------------------------------------------
// Description : Configure anticollision
//
// IN       :   p_bAnticolOptions : anticollision options
//				p_pStructReader : Pointer to the used StructReader structure.
//
// OUT      :   p_pStructReader->s_bRAnticolOpt0
//              p_pStructReader->s_bRAnticolOpt1
//              p_pStructReader->s_bRAnticolOpt2
//
// RETURN   :   - none -
//
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnConfigAnticollision(unsigned char* p_abAnticolOptions,StructReader* p_pStructReader)
{
   p_pStructReader->s_bRAnticolOpt0 = p_abAnticolOptions[0];
   p_pStructReader->s_bRAnticolOpt1 = p_abAnticolOptions[1];
   p_pStructReader->s_bRAnticolOpt2 = p_abAnticolOptions[2];
}


//-----------------------------------------------------------------------------
// Function : void v_fnPicoReadReadBank(unsigned char p_bBankNumber,unsigned char* p_pbBankBuffer)
//-----------------------------------------------------------------------------
// Description : 
//
// IN       :     
//
// OUT      :   
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void v_fnPicoReadReadBank(unsigned char p_bBankNumber,unsigned char* p_pbBankBuffer)
{		unsigned char l_bCounter;
		unsigned char l_bBankSize;

		switch (p_bBankNumber)
		{
			case 1 :
			case 2 :
			case 3 :
			case 4 :  	l_bBankSize=5;		break;
			case 5 :   	l_bBankSize=2;		break;
			case 6 :   	l_bBankSize=8;		break;
			case 7 :   	l_bBankSize=2;		break;
			case 0x17 :	l_bBankSize=2;		break;  // READ CHIP VERSION AND RESET ALL BLOCKS
			default :  	l_bBankSize=0;		break;
		}

    //CHECK BANK (P2.7 SPECIFY IF RF IS ON OR OFF IF READING PAGE 6 OR 7)
        p_bBankNumber = p_bBankNumber & 0x7F ;
  
        //CHECK PAGE
        if (p_bBankNumber < 5) 
		{
         //RESET PICOREAD
         v_fnCS_reset();
 
         //DIRECT ACCESS WITH SPECIFIED BANK AND EXTENSION BYTE
         v_fnSPI_SendByte(P0_ACCESS_P5 | P5_EMI_REC_EMISSION | ((p_bBankNumber -1) << 4) | P5_EXT_REG);
        }
		 if (p_bBankNumber == 0x17) 
		{
		 p_bBankNumber=7;
		 v_fnCS_reset();
 
         //DIRECT ACCESS WITH SPECIFIED BANK AND EXTENSION BYTE
         v_fnSPI_SendByte(0x00);
 		 }

        //RESET PICOREAD
        v_fnCS_reset();
 
        //SEND READ ON PAGE SPECIFIED IN P1, AND P2 SPECIFY WETHER THE RF STAYS ON OR OFF
        v_fnSPI_SendByte(P0_REG_NO_RST | P0_RW_BIT_READ | ((p_bBankNumber & 0x80) >> 6) | (p_bBankNumber << 2));
 		
        //READ FROM SPI
        for (l_bCounter = 0; l_bCounter < l_bBankSize; l_bCounter++) {
        p_pbBankBuffer[l_bCounter] = b_fnSPI_ReceiveByte();
		 }

		  v_fnCS_reset();
}
//-----------------------------------------------------------------------------
// Function : unsigned char v_fnGetPicoReadVersion()
//-----------------------------------------------------------------------------
// Description : 
//
// IN       :     
//
// OUT      :   
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
unsigned char v_fnGetPicoReadVersion()
{		unsigned char l_bCounter;
		unsigned char l_bBankSize=2;
		unsigned char p_bBankNumber=7;
		unsigned char l_bBankBuffer[2];

    //CHECK BANK (P2.7 SPECIFY IF RF IS ON OR OFF IF READING PAGE 6 OR 7)
        p_bBankNumber = p_bBankNumber & 0x7F ;
  
        //CHECK PAGE
        if (p_bBankNumber < 5) 
		{
         //RESET PICOREAD
         v_fnCS_reset();
 
         //DIRECT ACCESS WITH SPECIFIED BANK AND EXTENSION BYTE
         v_fnSPI_SendByte(P0_ACCESS_P5 | P5_EMI_REC_EMISSION | ((p_bBankNumber -1) << 4) | P5_EXT_REG);
        }
 
        //RESET PICOREAD
        v_fnCS_reset();
 
        //SEND READ ON PAGE SPECIFIED IN P1, AND P2 SPECIFY WETHER THE RF STAYS ON OR OFF
        v_fnSPI_SendByte(P0_REG_NO_RST | P0_RW_BIT_READ | ((p_bBankNumber & 0x80) >> 6) | (p_bBankNumber << 2));
 
        //READ FROM SPI
        for (l_bCounter = 0; l_bCounter < l_bBankSize; l_bCounter++) {
         l_bBankBuffer[l_bCounter] = b_fnSPI_ReceiveByte();
		 }

		  v_fnCS_reset();
		  return ((l_bBankBuffer[1]>>4) & 0xFF);
}

//-----------------------------------------------------------------------------
// Function : v_fnConfigDefault(unsigned char p_bProtocol,unsigned char* p_pbRFReceiveEOF, StructReader* p_pStructReader)
//-----------------------------------------------------------------------------
// Description : Configure reader with default parameters and option in chosen
//               protocol
//
// IN       :   p_bProtocol : protocol used
//              p_pbRFReceiveEOF = Pointer to value, that define (for ISO B) that EOF need to be taken into account or not. 
//					For ISOB 		: p_pbRFReceiveEOF=1 
//					Other Protocols : p_pbRFReceiveEOF=0
//				p_pStructReader : Pointer to the used StructReader structure.
//
// OUT      :   - none -
//
// RETURN   :   - none -
//
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnConfigDefault(unsigned char p_bProtocol,unsigned char* p_pbRFReceiveEOF, StructReader* p_pStructReader)
{
   unsigned char l_abParameters[2];
   unsigned char l_abAnticolOptions[12];
 //  unsigned char l_bTimeout;
   unsigned long l_bTimeout;

   l_abParameters[0] = P0_DEFAULT;
   l_abParameters[1] = P1_DEFAULT;

   v_fnConfigProtocol(p_bProtocol,p_pbRFReceiveEOF,p_pStructReader);

   switch(p_bProtocol)
   {
      case INNOVATRON_PROTOCOL :
	  case ISOB_PROTOCOL :
	  
         l_bTimeout=TO_ISO14443BDEFAULT;
         l_abAnticolOptions[0]=ISOB0_DEFAULT;
         l_abAnticolOptions[1]=ISOB1_DEFAULT;
         l_abAnticolOptions[2]=ISOB2_DEFAULT;
      break;

      case ISO15693_PROTOCOL :
         l_bTimeout=TO_ISO15693DEFAULT;
         l_abAnticolOptions[0]=ISO150_DEFAULT;
         l_abAnticolOptions[1]=ISO151_DEFAULT;
         l_abAnticolOptions[2]=ISO152_DEFAULT;
      break;

      case ISOA_PROTOCOL :
         l_bTimeout=TO_ISO14443ADEFAULT;
         l_abAnticolOptions[0]=ISOA0_DEFAULT;
         l_abAnticolOptions[1]=ISOA1_DEFAULT;
         v_fnConfigBitRate((P0_S106K | P0_R106K),p_pbRFReceiveEOF,p_pStructReader);
      break;
      case SONY_PROTOCOL :
         l_bTimeout=TO_SONYDEFAULT;
         l_abAnticolOptions[0]=SONY0_DEFAULT;
         l_abAnticolOptions[1]=SONY1_DEFAULT;
      break;

      case PICOPASS_ISOB106 :

      case PICOPASS_ISOB424 :

      case PICOPASS_ISO15693 :
         l_bTimeout=TO_PICOPASSDEFAULT;
         l_abAnticolOptions[0]=PICOPASS0_DEFAULT;
         l_abAnticolOptions[1]=PICOPASS1_DEFAULT;
	  break;
   }
   v_fnConfigParameters(&l_abParameters[0],p_pStructReader);
   v_fnConfigAnticollision(&l_abAnticolOptions[0],p_pStructReader);
   v_fnConfigTimeout(l_bTimeout,p_pStructReader);
}

//-----------------------------------------------------------------------------
// Function : v_fnConfigReader(unsigned char p_bType, unsigned char* p_abData,unsigned char* p_pbRFReceiveEOF,StructReader* p_pStructReader)
//-----------------------------------------------------------------------------
// Description :
//
// IN       :   p_bType  : configuration type
//              *p_abData : parameters, options, ... according to p_bType
//			     p_pbRFReceiveEOF = Pointer to value, that define (for ISO B) that EOF need to be taken into account or not. 
//					For ISOB 		: p_pbRFReceiveEOF=1 
//					Other Protocols : p_pbRFReceiveEOF=0
//				p_pStructReader : Pointer to the used StructReader structure.
//
// OUT      :   - none -
//
// RETURN   :   - none -
//
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnConfigReader(unsigned char p_bType, unsigned char* p_abData,unsigned char* p_pbRFReceiveEOF,StructReader* p_pStructReader)
{
	// Configure parameters
	if(p_bType==CONFIG_ANALOG) 
	{		
		v_fnConfigAnalog(&p_abData[0]);
	}
	else
	{
		if(p_bType==CONFIG_DEFAULT) 
		{	
			v_fnConfigDefault(p_abData[0],p_pbRFReceiveEOF,p_pStructReader);
		}
		else
		{
			if(p_bType==CONFIG_PROTOCOL) 
				
				v_fnConfigProtocol(p_abData[0],p_pbRFReceiveEOF,p_pStructReader);
			
			else
			{	
				if(p_bType==CONFIG_PARAMETERS) 
				{	
					v_fnConfigParameters(&p_abData[0],p_pStructReader);
			    }
				else
				{
					if(p_bType==CONFIG_ANTICOLLISION) 
					{	
						v_fnConfigAnticollision(&p_abData[0],p_pStructReader);
					}
					else
					{
						if(p_bType==CONFIG_BITRATE) 
						{	
							v_fnConfigBitRate(p_abData[0],p_pbRFReceiveEOF,p_pStructReader);
						}
						else
						{
							if(p_bType==CONFIG_TIMEOUT) 
							{	
								v_fnConfigTimeout(p_abData[0],p_pStructReader);
							}
						}
					}
				}
			}
		}
	}
}						

⌨️ 快捷键说明

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