MF RC522 射频识别参考程序注释new
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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冲突结束后冲突位被置零