您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > MF-RC522-射频识别参考程序注释new
By曙光单片机科技RC522程序读书笔记详细注释MFRC522射频识别参考程序注释串口读取的数据By曙光单片机科技RC522程序读书笔记详细注释//------------------------------------------ucAddr=((Address1)&0x7E)|0x80;//变化成有效的地址形式,最低位为0,最高位为1时候时,从MFRC522读出数据,最低位为0,最高位为0时候时,往MFRC522写数据,参考39页//读SPI数据//------------------------------------------unsignedcharSPIReadByte(void){unsignedchardataSPICount;//CounterusedtoclockoutthedataunsignedchardataSPIData;SPIData=0;for(SPICount=0;SPICount8;SPICount++)//Preparetoclockinthedatatoberead{SPIData=1;//RotatethedataCLR_SPI_CK;nop();nop();//RaisetheclocktoclockthedataoutoftheMAX7456if(STU_SPI_MISO){SPIData|=0x01;By曙光单片机科技RC522程序读书笔记详细注释}SET_SPI_CK;nop();nop();//Droptheclockreadyforthenextbit}//andloopbackreturn(SPIData);//Finallyreturnthereaddata}//------------------------------------------//写SPI数据//------------------------------------------voidSPIWriteByte(unsignedchardataSPIData){unsignedchardataSPICount;//Counterusedtoclockoutthedatafor(SPICount=0;SPICount8;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/////////////////////////////////////////////////////////////////////charPcdRequest(unsignedchardatareq_code,unsignedchar*pTagType)By曙光单片机科技RC522程序读书笔记详细注释{chardatastatus;unsignedintdataunLen;unsignedchardataucComMF522Buf[MAXRLEN];ClearBitMask(Status2Reg,0x08);//清除MRCrypto1on,要用软件清零WriteRawRC(BitFramingReg,0x07);//startsend=0,rxalign=0,在FIFO中存放的位置,TXlastbit=7SetBitMask(TxControlReg,0x03);//TX2rfen=1,TX1RFen=1,传递调制的13.56MHZ的载波信号ucComMF522Buf[0]=req_code;status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);//******************8if((status==MI_OK)&&(unLen==0x10)){*pTagType=ucComMF522Buf[0];*(pTagType+1)=ucComMF522Buf[1];}else{status=MI_ERR;}returnstatus;}///////////////////////////////////////////////////////////////////////功能:防冲撞//参数说明:pSnr[OUT]:卡片序列号,4字节//返回:成功返回MI_OK/////////////////////////////////////////////////////////////////////charPcdAnticoll(unsignedchar*pSnr){chardatastatus;unsignedchardatai,snr_check=0;unsignedintdataunLen;unsignedchardataucComMF522Buf[MAXRLEN];ClearBitMask(Status2Reg,0x08);//清除MRCrypto1on,要用软件清零WriteRawRC(BitFramingReg,0x00);//表示最后一个字节所有位都发送ClearBitMask(CollReg,0x80);//CollRegCollReg0冲突结束后冲突位被置零By曙光单片机科技RC522程序读书笔记详细注释ucComMF522Buf[0]=PICC_ANTICOLL1;ucComMF522Buf[1]=0x20;status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);if(status==MI_OK){for(i=0;i4;i++){*(pSnr+i)=ucComMF522Buf[i];//????????????????????????snr_check^=ucComMF522Buf[i];//????????????????????????}if(snr_check!=ucComMF522Buf[i]){status=MI_ERR;}}SetBitMask(CollReg,0x80);//CollRegCollReg在106kbps良好的防冲突情况下该位置1returnstatus;}///////////////////////////////////////////////////////////////////////功能:选定卡片//参数说明:pSnr[IN]:卡片序列号,4字节//返回:成功返回MI_OK/////////////////////////////////////////////////////////////////////charPcdSelect(unsignedchar*pSnr){chardatastatus;unsignedchardatai;unsignedintdataunLen;unsignedchardataucComMF522Buf[MAXRLEN];ucComMF522Buf[0]=PICC_ANTICOLL1;ucComMF522Buf[1]=0x70;ucComMF522Buf[6]=0;for(i=0;i4;i++){ucComMF522Buf[i+2]=*(pSnr+i);ucComMF522Buf[6]^=*(pSnr+i);}CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);//########By曙光单片机科技RC522程序读书笔记详细注释ClearBitMask(Status2Reg,0x08);//清零MFcryonstatus=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);if((status==MI_OK)&&(unLen==0x18)){status=MI_OK;}else{status=MI_ERR;}returnstatus;}///////////////////////////////////////////////////////////////////////功能:验证卡片密码//参数说明:auth_mode[IN]:密码验证模式//0x60=验证A密钥//0x61=验证B密钥//addr[IN]:块地址//pKey[IN]:密码//pSnr[IN]:卡片序列号,4字节//返回:成功返回MI_OK/////////////////////////////////////////////////////////////////////charPcdAuthState(unsignedchardataauth_mode,unsignedchardataaddr,unsignedchar*pKey,unsignedchar*pSnr){chardatastatus;unsignedintdataunLen;unsignedchardatai,ucComMF522Buf[MAXRLEN];ucComMF522Buf[0]=auth_mode;//验证A密钥ucComMF522Buf[1]=addr;//addr[IN]:块地址for(i=0;i6;i++){ucComMF522Buf[i+2]=*(pKey+i);}for(i=0;i6;i++){ucComMF522Buf[i+8]=*(pSnr+i);}//memcpy(&ucComMF522Buf[2],pKey,6);//memcpy(&ucComMF522Buf[8],pSnr,4);status=PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen);if((status!=MI_OK)||(!(ReadRawRC(Status2Reg)&0x08))){status=MI_ERR;}By曙光单片机科技RC522程序读书笔记详细注释returnstatus;}///////////////////////////////////////////////////////////////////////功能:读取M1卡一块数据//参数说明:addr[IN]:块地址//pData[OUT]:读出的数据,16字节//返回:成功返回MI_OK/////////////////////////////////////////////////////////////////////charPcdRead(unsignedchardataaddr,unsignedchar*pData){chardatastatus;unsignedintdataunLen;unsignedchardatai,ucComMF522Buf[MAXRLEN];ucComMF522Buf[0]=PICC_READ;ucComMF522Buf[1]=addr;CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);status=PcdComMF522(PCD_TRANSC
本文标题:MF-RC522-射频识别参考程序注释new
链接地址:https://www.777doc.com/doc-5793111 .html