|
char PcdAnticoll(unsigned char *pSnr) 这个程序能读到MIFE one的卡号,但是读 Mifare_UltraLight 7位卡号按下面的方法一直搞不点,求指点
/////////////////////////////////////////////////////////////////////
//功 能:防冲撞
//参数说明: pSnr[OUT]:卡片序列号,4字节
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdAnticoll(unsigned char *pSnr)
{
char status;
unsigned char i,snr_check=0;
unsigned int unLen;
unsigned char ucComMF522Buf[MAXRLEN];
ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x00);
ClearBitMask(CollReg,0x80);
ucComMF522Buf[0] = PICC_ANTICOLL1;
ucComMF522Buf[1] = 0x20;
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);
if (status == MI_OK)
{
for (i=0; i<4; i++) //4/ /4
{
*(pSnr+i) = ucComMF522Buf;
snr_check ^= ucComMF522Buf;
}
if (snr_check != ucComMF522Buf)
{ status = MI_ERR; }
}
SetBitMask(CollReg,0x80);
return status;
}
/////////////////////////////////////////////////////////////////////
//M I F A R E U L T R A L I G H T A N T I C O L L I S I O N
//A N D S E L E C T
//parameter: pSnr[OUT]:7Byte card SNR
/////////////////////////////////////////////////////////////////////
char UL_PcdAnticoll(unsigned char *pSnr)
{
char status ;
unsigned char i, snr_check = 0;
unsigned int unLen;
unsigned char ucComBuf[FSD];
ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x00);
ClearBitMask(CollReg,0x80);
ucComBuf[0] = PICC_ANTICOLL1;
ucComBuf[1] = 0x20;
status = PcdComMF522(PCD_TRANSCEIVE,ucComBuf,2,ucComBuf,&unLen);
if (status == MI_OK)
{
for (i=0; i<4; i++)
{
*(pSnr+i) = ucComBuf;
snr_check ^= ucComBuf;
}
if (snr_check != ucComBuf)
{ status = MI_ERR; }
else
{ memcpy(pSnr, &ucComBuf[1], 3); }
}
SetBitMask(CollReg,0x80);
snr_check = 0x88;
ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x00);
ClearBitMask(CollReg,0x80);
ucComBuf[0] = PICC_ANTICOLL1;
ucComBuf[1] = 0x70;
ucComBuf[2] = 0x88;
for (i=0; i<3; i++)
{
snr_check ^= *(pSnr+i);
ucComBuf[i+3] = *(pSnr+i);
}
ucComBuf[6] = snr_check;
status = PcdComMF522(PCD_TRANSCEIVE,ucComBuf,7,ucComBuf,&unLen);
if (status == MI_OK)
{
if (unLen != 0x08)
{ status = MI_ERR; }
}
if (status == MI_OK)
{
snr_check = 0;
ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x00);
ClearBitMask(CollReg,0x80);
ucComBuf[0] = PICC_ANTICOLL2;
ucComBuf[1] = 0x20;
status = PcdComMF522(PCD_TRANSCEIVE,ucComBuf,2,ucComBuf,&unLen);
if (!status)
{
for (i=0; i<4; i++)
{ snr_check ^= ucComBuf; }
if (snr_check != ucComBuf)
{ status = MI_ERR; }
else
{ memcpy(pSnr+3, &ucComBuf[0], 4); }
}
// ClearBitMask(RegDecoderControl,0x20);
SetBitMask(CollReg,0x80);
snr_check = 0;
ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x00);
ClearBitMask(CollReg,0x80);
ucComBuf[0] = PICC_ANTICOLL2;
ucComBuf[1] = 0x70;
for (i=0; i<4; i++)
{
snr_check ^= *(pSnr+3+i);
ucComBuf[i+2] = *(pSnr+3+i);
}
ucComBuf[6] = snr_check;
status = PcdComMF522(PCD_TRANSCEIVE,ucComBuf,7,ucComBuf,&unLen);
if (status == MI_OK)
{
if (unLen != 0x08)
{ status = MI_ERR; }
}
}
return status;
}
|
|