📄 prd_config.c
字号:
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 + -