492 lines
17 KiB
C
492 lines
17 KiB
C
#include "../include/MIFARE.h"
|
||
#include "../include/READER.h"
|
||
|
||
#include "string.h"
|
||
#include "../include/READER_REG.h"
|
||
#include "../include/rfid_main.h"
|
||
|
||
unsigned char SECTOR,BLOCK,BLOCK_NUM;
|
||
unsigned char BLOCK_DATA[16];
|
||
unsigned char KEY_A[16][6]=
|
||
{{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//0
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//1
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//2
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//3
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//4
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//5
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//6
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//7
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//8
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//9
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//10
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//11
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//12
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//13
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//14
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}};//15
|
||
|
||
unsigned char KEY_B[16][6]=
|
||
{{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//0
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//1
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//2
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//3
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//4
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//5
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//6
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//7
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//8
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//9
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//10
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//11
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//12
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//13
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},//14
|
||
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}};//15
|
||
|
||
/*****************************************************************************************/
|
||
/*<2A><><EFBFBD>ƣ<EFBFBD>Mifare_Clear_Crypto */
|
||
/*<2A><><EFBFBD>ܣ<EFBFBD>Mifare_Clear_Crypto<74><6F><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4>־ */
|
||
/*<2A><><EFBFBD>룺 */
|
||
/* */
|
||
/*<2A><><EFBFBD>: */
|
||
/* */
|
||
/* */
|
||
/*****************************************************************************************/
|
||
void Mifare_Clear_Crypto(void)
|
||
{
|
||
ModifyReg(REG_STATUS,BIT_CRYPTO1ON,RESET);
|
||
return;
|
||
}
|
||
|
||
unsigned char MIFARE_CARD_EVENTAAAAAAA(void)
|
||
{
|
||
unsigned char result;
|
||
Mifare_Clear_Crypto();
|
||
SECTOR = 1;
|
||
//for(SECTOR = 0;SECTOR < 16; SECTOR++)
|
||
{
|
||
BLOCK_NUM = (SECTOR * 4) + BLOCK;
|
||
result = Mifare_Auth(KEY_A_M1,SECTOR,KEY_A[SECTOR],PICC_A.UID);
|
||
if(result != SUCCESS)
|
||
{
|
||
SetCW(DISABLE);
|
||
printf("-> AUTH ERROR!\r\n");
|
||
return result;
|
||
}
|
||
|
||
printf("-> AUTH SUCCESS!\r\n");
|
||
|
||
for(BLOCK = 0;BLOCK < 3;BLOCK++)
|
||
{
|
||
BLOCK_NUM = (SECTOR * 4) + BLOCK;
|
||
if(BLOCK_NUM == 0)
|
||
BLOCK_NUM = 1;
|
||
printf("-> SECTOR = %02X\r\n",SECTOR);;
|
||
printf("-> BLOCK = %02X\r\n",BLOCK);
|
||
printf("-> BLOCK_NUM = %02X\r\n",BLOCK_NUM);
|
||
memcpy(BLOCK_DATA,"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF",16);
|
||
result = Mifare_Blockwrite(BLOCK_NUM,BLOCK_DATA);
|
||
if(result != SUCCESS)
|
||
{
|
||
SetCW(DISABLE);
|
||
printf("-> WRITE BLOCK ERROR!\r\n");
|
||
return result;
|
||
}
|
||
printf("-> WRITE BLOCK SUCCESS!\r\n");
|
||
|
||
result = Mifare_Blockread(BLOCK_NUM,BLOCK_DATA);
|
||
if(result != SUCCESS)
|
||
{
|
||
SetCW(DISABLE);
|
||
printf("-> READ BLOCK ERROR!\r\n");
|
||
return result;
|
||
}
|
||
|
||
printf("-> READ BLOCK = %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\r\n",BLOCK_DATA[0],BLOCK_DATA[1],BLOCK_DATA[2],BLOCK_DATA[3],BLOCK_DATA[4],BLOCK_DATA[5],BLOCK_DATA[6],BLOCK_DATA[7],BLOCK_DATA[8],BLOCK_DATA[9],BLOCK_DATA[10],BLOCK_DATA[11],BLOCK_DATA[12],BLOCK_DATA[13],BLOCK_DATA[14],BLOCK_DATA[15]);
|
||
}
|
||
}
|
||
SetCW(DISABLE);
|
||
return result;
|
||
}
|
||
|
||
|
||
unsigned char MIFARE_CARD_EVENT(void)
|
||
{
|
||
unsigned char result;
|
||
Mifare_Clear_Crypto();
|
||
SECTOR = 1;
|
||
//for(SECTOR = 0;SECTOR < 16; SECTOR++)
|
||
{
|
||
BLOCK_NUM = (SECTOR * 4) + BLOCK;
|
||
result = Mifare_Auth(KEY_A_M1,SECTOR,KEY_A[SECTOR],PICC_A.UID);
|
||
if(result != SUCCESS)
|
||
{
|
||
SetCW(DISABLE);
|
||
printf("-> AUTH ERROR!\r\n");
|
||
return result;
|
||
}
|
||
|
||
printf("-> AUTH SUCCESS!\r\n");
|
||
|
||
for(BLOCK = 0;BLOCK < 3;BLOCK++)
|
||
{
|
||
BLOCK_NUM = (SECTOR * 4) + BLOCK;
|
||
if(BLOCK_NUM == 0)
|
||
BLOCK_NUM = 1;
|
||
printf("-> SECTOR = %02X\r\n",SECTOR);;
|
||
printf("-> BLOCK = %02X\r\n",BLOCK);
|
||
printf("-> BLOCK_NUM = %02X\r\n",BLOCK_NUM);
|
||
memcpy(BLOCK_DATA,"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF",16);
|
||
result = Mifare_Blockwrite(BLOCK_NUM,BLOCK_DATA);
|
||
if(result != SUCCESS)
|
||
{
|
||
SetCW(DISABLE);
|
||
printf("-> WRITE BLOCK ERROR!\r\n");
|
||
return result;
|
||
}
|
||
printf("-> WRITE BLOCK SUCCESS!\r\n");
|
||
|
||
result = Mifare_Blockread(BLOCK_NUM,BLOCK_DATA);
|
||
if(result != SUCCESS)
|
||
{
|
||
SetCW(DISABLE);
|
||
printf("-> READ BLOCK ERROR!\r\n");
|
||
return result;
|
||
}
|
||
|
||
printf("-> READ BLOCK = %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\r\n",BLOCK_DATA[0],BLOCK_DATA[1],BLOCK_DATA[2],BLOCK_DATA[3],BLOCK_DATA[4],BLOCK_DATA[5],BLOCK_DATA[6],BLOCK_DATA[7],BLOCK_DATA[8],BLOCK_DATA[9],BLOCK_DATA[10],BLOCK_DATA[11],BLOCK_DATA[12],BLOCK_DATA[13],BLOCK_DATA[14],BLOCK_DATA[15]);
|
||
}
|
||
}
|
||
SetCW(DISABLE);
|
||
return result;
|
||
}
|
||
|
||
|
||
unsigned char Mifare_LoadKey(unsigned char *mifare_key)
|
||
{
|
||
unsigned char reg_data;
|
||
SetCommand(CMD_IDLE);
|
||
ModifyReg(REG_FIFOCONTROL,BIT_FIFOFLUSH,ENABLE); //Clear FIFO
|
||
SetReg(REG_FIFODATA,mifare_key[0]);
|
||
SetReg(REG_FIFODATA,mifare_key[1]);
|
||
SetReg(REG_FIFODATA,mifare_key[2]);
|
||
SetReg(REG_FIFODATA,mifare_key[3]);
|
||
SetReg(REG_FIFODATA,mifare_key[4]);
|
||
SetReg(REG_FIFODATA,mifare_key[5]);
|
||
SetCommand(CMD_LOADKEY);
|
||
DelayMs(1);
|
||
GetReg(REG_COMMAND,®_data);
|
||
if((reg_data & CMD_MASK) == CMD_IDLE)
|
||
return SUCCESS;
|
||
else
|
||
return FAIL;
|
||
}
|
||
|
||
/*****************************************************************************************/
|
||
/*<2A><><EFBFBD>ƣ<EFBFBD>Mifare_Auth */
|
||
/*<2A><><EFBFBD>ܣ<EFBFBD>Mifare_Auth<74><68>Ƭ<EFBFBD><C6AC>֤ */
|
||
/*<2A><><EFBFBD>룺mode<64><65><EFBFBD><EFBFBD>֤ģʽ<C4A3><CABD>0<EFBFBD><30>key A<><41>֤<EFBFBD><D6A4>1<EFBFBD><31>key B<><42>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>sector<6F><72><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>0~15<31><35> */
|
||
/* *mifare_key<65><79>6<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>֤<EFBFBD><D6A4>Կ<EFBFBD><D4BF><EFBFBD>飻*card_uid<69><64>4<EFBFBD>ֽڿ<D6BD>ƬUID<49><44><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>: */
|
||
/* OK :<3A><>֤<EFBFBD>ɹ<EFBFBD> */
|
||
/* ERROR :<3A><>֤ʧ<D6A4><CAA7> */
|
||
/*****************************************************************************************/
|
||
unsigned char Mifare_Auth(unsigned char key_mode,unsigned char sector,unsigned char *mifare_key,unsigned char *card_uid)
|
||
{
|
||
unsigned char result,reg_data;
|
||
result = Mifare_LoadKey(mifare_key);
|
||
if (result != SUCCESS)
|
||
return result;
|
||
SetCommand(CMD_IDLE);
|
||
ModifyReg(REG_FIFOCONTROL,BIT_FIFOFLUSH,ENABLE); //Clear FIFO
|
||
if(key_mode == KEY_A_M1)
|
||
{
|
||
SetReg(REG_FIFODATA,0x60);//60 keyA M1<4D><31>ָ֤<D6A4><D6B8>
|
||
ModifyReg(REG_RXTXCON,BIT_SHMODE,DISABLE);
|
||
}
|
||
if(key_mode == KEY_B_M1)
|
||
{
|
||
SetReg(REG_FIFODATA,0x61);//61 keyB M1<4D><31>ָ֤<D6A4><D6B8>
|
||
ModifyReg(REG_RXTXCON,BIT_SHMODE,DISABLE);
|
||
}
|
||
|
||
SetReg(REG_FIFODATA,sector * 4);//<2F><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>0<EFBFBD><30>ַ
|
||
SetReg(REG_FIFODATA,card_uid[0]);
|
||
SetReg(REG_FIFODATA,card_uid[1]);
|
||
SetReg(REG_FIFODATA,card_uid[2]);
|
||
SetReg(REG_FIFODATA,card_uid[3]);
|
||
ModifyReg(REG_TXCRCCON, BIT_CRCEN,ENABLE);
|
||
ModifyReg(REG_RXCRCCON, BIT_CRCEN,ENABLE);
|
||
SetCommand(CMD_AUTHENT);
|
||
DelayMs(5);
|
||
GetReg(REG_COMMAND,®_data);
|
||
if((reg_data & CMD_MASK) == CMD_IDLE)
|
||
{
|
||
GetReg(REG_STATUS,®_data);
|
||
if(reg_data & BIT_CRYPTO1ON)//<2F>жϼ<D0B6><CFBC>ܱ<EFBFBD>־λ<D6BE><CEBB>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD>
|
||
return SUCCESS;
|
||
}
|
||
return FAIL;
|
||
}
|
||
/*****************************************************************************************/
|
||
/*<2A><><EFBFBD>ƣ<EFBFBD>Mifare_Blockset */
|
||
/*<2A><><EFBFBD>ܣ<EFBFBD>Mifare_Blockset<65><74>Ƭ<EFBFBD><C6AC>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>룺block<63><6B><EFBFBD><EFBFBD>ţ<EFBFBD>*buff<66><66><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD>4<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
|
||
/* */
|
||
/*<2A><><EFBFBD>: */
|
||
/* OK :<3A><><EFBFBD>óɹ<C3B3> */
|
||
/* ERROR :<3A><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> */
|
||
/*****************************************************************************************/
|
||
unsigned char Mifare_Blockset(unsigned char block,unsigned char *data_buff)
|
||
{
|
||
unsigned char block_data[16],result;
|
||
block_data[0] = data_buff[3];
|
||
block_data[1] = data_buff[2];
|
||
block_data[2] = data_buff[1];
|
||
block_data[3] = data_buff[0];
|
||
block_data[4] = ~data_buff[3];
|
||
block_data[5] = ~data_buff[2];
|
||
block_data[6] = ~data_buff[1];
|
||
block_data[7] = ~data_buff[0];
|
||
block_data[8] = data_buff[3];
|
||
block_data[9] = data_buff[2];
|
||
block_data[10] = data_buff[1];
|
||
block_data[11] = data_buff[0];
|
||
block_data[12] = block;
|
||
block_data[13] = ~block;
|
||
block_data[14] = block;
|
||
block_data[15] = ~block;
|
||
result = Mifare_Blockwrite(block,block_data);
|
||
return result;
|
||
}
|
||
/*****************************************************************************************/
|
||
/*<2A><><EFBFBD>ƣ<EFBFBD>Mifare_Blockread */
|
||
/*<2A><><EFBFBD>ܣ<EFBFBD>Mifare_Blockread<61><64>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>룺block<63><6B><EFBFBD><EFBFBD>ţ<EFBFBD>0x00~0x3F<33><46><EFBFBD><EFBFBD>buff<66><66>16<31>ֽڶ<D6BD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>: */
|
||
/* OK :<3A>ɹ<EFBFBD> */
|
||
/* ERROR :ʧ<><CAA7> */
|
||
/*****************************************************************************************/
|
||
unsigned char Mifare_Blockread(unsigned char block,unsigned char *data_buff)
|
||
{
|
||
unsigned char reg_data,i;
|
||
SetCommand(CMD_IDLE);
|
||
SetReg(REG_TXDATANUM,0x08);
|
||
SetReg(REG_FIFODATA,0x30);//30 <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||
SetReg(REG_FIFODATA,block);//<2F><><EFBFBD>ַ
|
||
ModifyReg(REG_TXCRCCON, BIT_CRCEN,ENABLE);
|
||
ModifyReg(REG_RXCRCCON, BIT_CRCEN,ENABLE);
|
||
SetCommand(CMD_TRANSCEIVE);
|
||
DelayMs(2);
|
||
GetReg(REG_FIFOLENGTH,®_data);
|
||
if (reg_data != 16) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ16
|
||
return FAIL;
|
||
GetReg(REG_ERROR,®_data);
|
||
if(reg_data & 0x07)
|
||
return FAIL;
|
||
for(i=0;i<16;i++)
|
||
{
|
||
GetReg (REG_FIFODATA,&data_buff[i]);
|
||
}
|
||
return SUCCESS;
|
||
}
|
||
/*****************************************************************************************/
|
||
/*<2A><><EFBFBD>ƣ<EFBFBD>mifare_blockwrite */
|
||
/*<2A><><EFBFBD>ܣ<EFBFBD>Mifare<72><65>Ƭд<C6AC><D0B4><EFBFBD><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>룺block<63><6B><EFBFBD><EFBFBD>ţ<EFBFBD>0x00~0x3F<33><46><EFBFBD><EFBFBD>buff<66><66>16<31>ֽ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>: */
|
||
/* OK :<3A>ɹ<EFBFBD> */
|
||
/* ERROR :ʧ<><CAA7> */
|
||
/*****************************************************************************************/
|
||
unsigned char Mifare_Blockwrite(unsigned char block,unsigned char *data_buff)
|
||
{
|
||
unsigned char reg_data,i;
|
||
SetCommand(CMD_IDLE);
|
||
SetReg(REG_TXDATANUM,0x08);
|
||
SetReg(REG_FIFODATA,0xA0);//A0 д<><D0B4>ָ<EFBFBD><D6B8>
|
||
SetReg(REG_FIFODATA,block);//<2F><><EFBFBD>ַ
|
||
ModifyReg(REG_TXCRCCON, BIT_CRCEN,ENABLE);
|
||
ModifyReg(REG_RXCRCCON, BIT_CRCEN,DISABLE);
|
||
SetCommand(CMD_TRANSCEIVE);
|
||
DelayMs(5);
|
||
GetReg(REG_FIFOLENGTH,®_data);
|
||
if (reg_data != 1) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ1
|
||
return FAIL;
|
||
GetReg (REG_FIFODATA,®_data);
|
||
if(reg_data != 0x0A)
|
||
return FAIL;
|
||
for(i=0;i<16;i++)
|
||
{
|
||
SetReg(REG_FIFODATA,data_buff[i]);
|
||
}
|
||
SetCommand(CMD_TRANSCEIVE);
|
||
DelayMs(5);
|
||
GetReg(REG_FIFOLENGTH,®_data);
|
||
if (reg_data != 1) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ1
|
||
return FAIL;
|
||
GetReg (REG_FIFODATA,®_data);
|
||
if(reg_data != 0x0A)
|
||
return FAIL;
|
||
|
||
return SUCCESS;
|
||
|
||
}
|
||
|
||
/*****************************************************************************************/
|
||
/*<2A><><EFBFBD>ƣ<EFBFBD> */
|
||
/*<2A><><EFBFBD>ܣ<EFBFBD>Mifare <20><>Ƭ<EFBFBD><C6AC>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>룺block<63><6B><EFBFBD><EFBFBD>ţ<EFBFBD>0x00~0x3F<33><46><EFBFBD><EFBFBD>buff<66><66>4<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>: */
|
||
/* OK :<3A>ɹ<EFBFBD> */
|
||
/* ERROR :ʧ<><CAA7> */
|
||
/*****************************************************************************************/
|
||
unsigned char Mifare_Blockinc(unsigned char block,unsigned char *data_buff)
|
||
{
|
||
|
||
unsigned char reg_data,i;
|
||
SetCommand(CMD_IDLE);
|
||
SetReg(REG_TXDATANUM,0x08);
|
||
SetReg(REG_FIFODATA,0xC1);//C1 <20><>ֵָ<D6B5><D6B8>
|
||
SetReg(REG_FIFODATA,block);//<2F><><EFBFBD>ַ
|
||
ModifyReg(REG_TXCRCCON, BIT_CRCEN,ENABLE);
|
||
ModifyReg(REG_RXCRCCON, BIT_CRCEN,DISABLE);
|
||
SetCommand(CMD_TRANSCEIVE);
|
||
DelayMs(5);
|
||
GetReg(REG_FIFOLENGTH,®_data);
|
||
if (reg_data != 1) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ1
|
||
return FAIL;
|
||
GetReg (REG_FIFODATA,®_data);
|
||
if(reg_data != 0x0A)
|
||
return FAIL;
|
||
for(i=0;i<4;i++)
|
||
{
|
||
SetReg(REG_FIFODATA,data_buff[i]);
|
||
}
|
||
SetCommand(CMD_TRANSCEIVE);
|
||
DelayMs(5);
|
||
GetReg(REG_FIFOLENGTH,®_data);
|
||
if (reg_data != 1) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ1
|
||
return FAIL;
|
||
GetReg (REG_FIFODATA,®_data);
|
||
|
||
if(reg_data != 0x0A)
|
||
return FAIL;
|
||
|
||
return SUCCESS;
|
||
}
|
||
|
||
|
||
|
||
/*****************************************************************************************/
|
||
/*<2A><><EFBFBD>ƣ<EFBFBD>mifare_blockdec */
|
||
/*<2A><><EFBFBD>ܣ<EFBFBD>Mifare <20><>Ƭ<EFBFBD><C6AC>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>룺block<63><6B><EFBFBD><EFBFBD>ţ<EFBFBD>0x00~0x3F<33><46><EFBFBD><EFBFBD>buff<66><66>4<EFBFBD>ֽڼ<D6BD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>: */
|
||
/* OK :<3A>ɹ<EFBFBD> */
|
||
/* ERROR :ʧ<><CAA7> */
|
||
/*****************************************************************************************/
|
||
unsigned char Mifare_Blockdec(unsigned char block,unsigned char *data_buff)
|
||
{
|
||
unsigned char reg_data,i;
|
||
SetCommand(CMD_IDLE);
|
||
SetReg(REG_TXDATANUM,0x08);
|
||
SetReg(REG_FIFODATA,0xC0);//C0 <20><>ֵָ<D6B5><D6B8>
|
||
SetReg(REG_FIFODATA,block);//<2F><><EFBFBD>ַ
|
||
ModifyReg(REG_TXCRCCON, BIT_CRCEN,ENABLE);
|
||
ModifyReg(REG_RXCRCCON, BIT_CRCEN,DISABLE);
|
||
SetCommand(CMD_TRANSCEIVE);
|
||
DelayMs(5);
|
||
GetReg(REG_FIFOLENGTH,®_data);
|
||
if (reg_data != 1) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ1
|
||
return FAIL;
|
||
GetReg (REG_FIFODATA,®_data);
|
||
if(reg_data != 0x0A)
|
||
return FAIL;
|
||
for(i=0;i<4;i++)
|
||
{
|
||
SetReg(REG_FIFODATA,data_buff[i]);
|
||
}
|
||
SetCommand(CMD_TRANSCEIVE);
|
||
DelayMs(5);
|
||
GetReg(REG_FIFOLENGTH,®_data);
|
||
if (reg_data != 1) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ1
|
||
return FAIL;
|
||
GetReg (REG_FIFODATA,®_data);
|
||
if(reg_data != 0x0A)
|
||
|
||
return FAIL;
|
||
|
||
return SUCCESS;
|
||
|
||
}
|
||
/*****************************************************************************************/
|
||
/*<2A><><EFBFBD>ƣ<EFBFBD>mifare_transfer */
|
||
/*<2A><><EFBFBD>ܣ<EFBFBD>Mifare <20><>Ƭtransfer<65><72><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>룺block<63><6B><EFBFBD><EFBFBD>ţ<EFBFBD>0x00~0x3F<33><46> */
|
||
/*<2A><><EFBFBD>: */
|
||
/* OK :<3A>ɹ<EFBFBD> */
|
||
/* ERROR :ʧ<><CAA7> */
|
||
/*****************************************************************************************/
|
||
unsigned char Mifare_Transfer(unsigned char block)
|
||
{
|
||
unsigned char reg_data;
|
||
SetCommand(CMD_IDLE);
|
||
SetReg(REG_TXDATANUM,0x08);
|
||
SetReg(REG_FIFODATA,0xC1);//C1 Transferָ<72><D6B8>
|
||
SetReg(REG_FIFODATA,block);//<2F><><EFBFBD>ַ
|
||
ModifyReg(REG_TXCRCCON, BIT_CRCEN,ENABLE);
|
||
ModifyReg(REG_RXCRCCON, BIT_CRCEN,DISABLE);
|
||
SetCommand(CMD_TRANSCEIVE);
|
||
DelayMs(5);
|
||
GetReg(REG_FIFOLENGTH,®_data);
|
||
if (reg_data != 1) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ1
|
||
return FAIL;
|
||
GetReg (REG_FIFODATA,®_data);
|
||
if(reg_data != 0x0A)
|
||
return FAIL;
|
||
|
||
return SUCCESS;
|
||
|
||
|
||
}
|
||
/*****************************************************************************************/
|
||
/*<2A><><EFBFBD>ƣ<EFBFBD>mifare_restore */
|
||
/*<2A><><EFBFBD>ܣ<EFBFBD>Mifare <20><>Ƭrestore<72><65><EFBFBD><EFBFBD> */
|
||
/*<2A><><EFBFBD>룺block<63><6B><EFBFBD><EFBFBD>ţ<EFBFBD>0x00~0x3F<33><46> */
|
||
/*<2A><><EFBFBD>: */
|
||
/* OK :<3A>ɹ<EFBFBD> */
|
||
/* ERROR :ʧ<><CAA7> */
|
||
/*****************************************************************************************/
|
||
|
||
unsigned char Mifare_Restore(unsigned char block)
|
||
{
|
||
unsigned char reg_data,i;
|
||
SetCommand(CMD_IDLE);
|
||
SetReg(REG_TXDATANUM,0x08);
|
||
SetReg(REG_FIFODATA,0xC2);//C1 Transferָ<72><D6B8>
|
||
SetReg(REG_FIFODATA,block);//<2F><><EFBFBD>ַ
|
||
ModifyReg(REG_TXCRCCON, BIT_CRCEN,ENABLE);
|
||
ModifyReg(REG_RXCRCCON, BIT_CRCEN,DISABLE);
|
||
SetCommand(CMD_TRANSCEIVE);
|
||
DelayMs(5);
|
||
GetReg(REG_FIFOLENGTH,®_data);
|
||
if (reg_data != 1) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ1
|
||
return FAIL;
|
||
GetReg (REG_FIFODATA,®_data);
|
||
if(reg_data != 0x0A)
|
||
return FAIL;
|
||
for(i=0;i<4;i++)
|
||
{
|
||
SetReg(REG_FIFODATA,0);
|
||
}
|
||
SetCommand(CMD_TRANSCEIVE);
|
||
DelayMs(5);
|
||
GetReg(REG_FIFOLENGTH,®_data);
|
||
if (reg_data != 1) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ1
|
||
return FAIL;
|
||
GetReg (REG_FIFODATA,®_data);
|
||
if(reg_data != 0x0A)
|
||
return FAIL;
|
||
return SUCCESS;
|
||
}
|