MF RC522 射频识别参考程序注释new

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MF RC522 射频识别参考程序注释串口读取的数据

//------------------------------------------

ucAddr = ((Address<<1)&0x7E)|0x80;//变化成有效的地址形式,最低位为0,最高位为1时候是,从MFRC522读出数据,参考39页

// 读SPI数据

//------------------------------------------

unsigned char SPIReadByte(void)

{

unsigned char data SPICount; // Counter used to clock out the data

unsigned char data SPIData;

SPIData = 0;

for (SPICount = 0; SPICount < 8; SPICount++) // Prepare to clock in the data to be read

{

SPIData <<=1; // Rotate the data CLR_SPI_CK; nop();nop(); // Raise the clock to clock the data out of the MAX7456

if(STU_SPI_MISO)

{

SPIData|=0x01;

}

Drop the clock ready for the next bit

} // and loop back return (SPIData); // Finally return the read data

}

//------------------------------------------

// 写SPI数据

//------------------------------------------

void SPIWriteByte(unsigned char data SPIData)

{

unsigned char data SPICount; // Counter used to clock out the data

for (SPICount = 0; SPICount < 8; SPICount++)

{

if (SPIData & 0x80)

{

SET_SPI_MOSI;

}

else

{

CLR_SPI_MOSI;

} nop();nop();

CLR_SPI_CK;nop();nop();

SET_SPI_CK;nop();nop();

SPIData <<= 1;

}

}

/////////////////////////////////////////////////////////////////////

//功能:寻卡

//参数说明: req_code[IN]:寻卡方式

// 0x52 = 寻感应区内所有符合14443A标准的卡

// 0x26 = 寻未进入休眠状态的卡

// pTagType[OUT]:卡片类型代码

// 0x4400 = Mifare_UltraLight

// 0x0400 = Mifare_One(S50)

// 0x0200 = Mifare_One(S70)

// 0x0800 = Mifare_Pro(X)

// 0x4403 = Mifare_DESFire

//返回: 成功返回MI_OK

/////////////////////////////////////////////////////////////////////

char PcdRequest(unsigned char data req_code,unsigned char *pTagType)

{

unsigned int data unLen;

unsigned char data ucComMF522Buf[MAXRLEN];

ClearBitMask(Status2Reg,0x08);//清除MRCrypto1on,要用软件清零

WriteRawRC(BitFramingReg,0x07);//startsend=0,rxalign=0,在FIFO中存放的位置,TXlastbit=7

SetBitMask(TxControlReg,0x03);//TX2rfen=1,TX1RFen=1,传递调制的13.56MHZ的载波信号

ucComMF522Buf[0] = req_code;

status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);//****** ************8

if ((status == MI_OK) && (unLen == 0x10))

{

*pTagType = ucComMF522Buf[0];

*(pTagType+1) = ucComMF522Buf[1];

}

else

{ status = MI_ERR; }

return status;

}

/////////////////////////////////////////////////////////////////////

//功能:防冲撞

//参数说明: pSnr[OUT]:卡片序列号,4字节

//返回: 成功返回MI_OK

/////////////////////////////////////////////////////////////////////

char PcdAnticoll(unsigned char *pSnr)

{

char data status;

unsigned char data i,snr_check=0;

unsigned int data unLen;

unsigned char data ucComMF522Buf[MAXRLEN];

ClearBitMask(Status2Reg,0x08); //清除MRCrypto1on,要用软件清零

WriteRawRC(BitFramingReg,0x00); //表示最后一个字节所有位都发送

ClearBitMask(CollReg,0x80); //CollRegCollReg 0冲突结束后冲突位被置零

相关文档
最新文档