MF-RC522-射频识别参考程序注释new_第1页
MF-RC522-射频识别参考程序注释new_第2页
MF-RC522-射频识别参考程序注释new_第3页
MF-RC522-射频识别参考程序注释new_第4页
MF-RC522-射频识别参考程序注释new_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/ucAddr=(Addressvvl)&0 x7E)l0 x80;变化成有效的地址形式,最低位为0,最高位为1时候时,从MFRC522读出数据,最低位为0,最高位为0时候时,往MFRC522写数据,参考39页/读SPI数据/unsignedcharSPIReadByte(void)/CounterusedtounsignedchardataSPICount;clockoutthedataunsignedchardataSPIData;SPIData=0;/Preparetoclockinthe/Rotatethedata/Raisethefor(SPICount=0;SPICount8;SP

2、ICount+)datatobereadSPIDatavv=l;CLR_SPI_CK;nop();nop();clocktoclockthedataoutoftheMAX7456if(STU_SPI_MISO)SPIDatal=0 x01;22程序读书笔记详细注释22程序读书笔记详细注释22程序读书笔记详细注释22程序读书笔记详细注释/andloopbackreturn(SPIData);/Counterusedto曲耘T_SPI_CK;nop();nop();Droptheclockreadyforthenextbit/Finallyreturnthereaddata/写SPI数据/void

3、SPIWriteByte(unsignedchardataSPIData)unsignedchardataSPICount;clockoutthedatafor(SPICount=0;SPICount8;SPICount+)if(SPIData&0 x80)SET_SPI_MOSI;elseCLR_SPI_MOSI;nop();nop();CLR_SPI_CK;nop();nop();SET_SPI_CK;nop();nop();SPIData=1;/功能:寻卡参数说明:req_codeIN:寻卡方式/0 x52=寻感应区内所有符合14443A标准的卡/0 x26=寻未进入休眠状态的卡/pTa

4、gTypeOUT:卡片类型代码/0 x4400=Mifare_UltraLight/0 x0400=Mifare_One(S50)/0 x0200=Mifare_One(S70)/0 x0800=Mifare_Pro(X)/0 x4403=Mifare_DESFire/返回:成功返回MI_OK/charPcdRequest(unsignedchardatareq_code,unsignedchar*pTagType)如妙2社序以书毛记详细y王释W-chardatastatus;unsignedintdataunLen;unsignedchardataucComMF522BufMAXRLEN;C

5、learBitMask(Status2Reg,0 x08);清除MRCryptolon,要用软件清零WriteRawRC(BitFramingReg,0 x07);/startsend=0,rxalign=0,在FIFO中存放的位置,TXlastbit=7SetBitMask(TxControlReg,0 x03);/TX2rfen=1,TX1RFen=1,传递调制的13.56MHZ的载波信号ucComMF522Buf0=req_code;status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLeif(status

6、=MI_OK)&(unLen=0 x10)*pTagType=ucComMF522Buf0;*(pTagType+1)=ucComMF522Buf1;elsestatus=MI_ERR;returnstatus;/功能:防冲撞参数说明:pSnrOUT:卡片序列号,4字节/返回:成功返回MI_OK/charPcdAnticoll(unsignedchar*pSnr)chardatastatus;unsignedchardatai,snr_check=0;unsignedintdataunLen;unsignedchardataucComMF522BufMAXRLEN;ClearBitMask(S

7、tatus2Reg,0 x08);清除MRCrypto1on,要用软件清零WriteRawRC(BitFramingReg,0 x00);表示最后一个字节所有位都发送ClearBitMask(CollReg,0 x80);/CollRegCollReg0冲突结束后冲突位被置零status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);if(status=MI_OK)for(i=0;i4;i+)*(pSnr+i)=ucComMF522Bufi;snr_checkA=ucComMF522Bufi;/if(snr_c

8、heck!=ucComMF522Bufi)status=MI_ERR;SetBitMask(CollReg,0 x80);/CollRegCollReg在106kbps良好的防冲突情况下该位置1returnstatus;/功能:选定卡片参数说明:pSnrIN:卡片序列号,4字节/返回:成功返回MI_OK/charPcdSelect(unsignedchar*pSnr)chardatastatus;unsignedchardatai;unsignedintdataunLen;unsignedchardataucComMF522BufMAXRLEN;ucComMF522Buf0=PICC_ANTI

9、COLL1;ucComMF522Buf1=0 x70;ucComMF522Buf=0;for(i=0;i4;i+)ucComMF522Bufi+2=*(pSnr+i);ucComMF522Buf6a=*(pSnr+i);CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf7);/#22程序读书笔记详细注释22程序读书笔记详细注释一arBitMask(Status2Reg,0 x08);清零MFcryonstatusPcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);if(status=

10、MI_OK)&(unLen=0 x18)status=MI_OK;elsestatus=MI_ERR;returnstatus;/功能:验证卡片密码参数说明:auth_modeIN:密码验证模式/0 x60=验证A密钥/0 x61=验证B密钥/addrIN:块地址/pKeyIN:密码/pSnrIN:卡片序列号,4字节/返回:成功返回MI_OK/charPcdAuthState(unsignedchardataauth_mode,unsignedchardataaddr,unsignedchar*pKey,unsignedchar*pSnr)chardatastatus;unsignedintd

11、ataunLen;unsignedchardatai,ucComMF522BufMAXRLEN;ucComMF522Buf0=auth_mode;验证A密钥ucComMF522Buf1=addr;/addrIN:块地址for(i=0;i6;i+)ucComMF522Bufi+2=*(pKey+i);for(i=0;i6;i+)ucComMF522Bufi+8=*(pSnr+i);/memcpy(&ucComMF522Buf2,pKey,6);/memcpy(&ucComMF522Buf8,pSnr,4);status=PcdComMF522(PCD_AUTHENT,ucComMF522Buf,

12、12,ucComMF522Buf,&unLen);if(status!=MI_OK)II(!(ReadRawRC(Status2Reg)&0 x08)status=MI_ERR;一22程序读书笔记详细注释一22程序读书笔记详细注释如妙2社序以书毛记详细y王释restatus;一22程序读书笔记详细注释一22程序读书笔记详细注释一22程序读书笔记详细注释一22程序读书笔记详细注释/功能:读取Ml卡一块数据参数说明:addrIN:块地址/pDataOUT:读出的数据,16字节/返回:成功返回MI_OK/charPcdRead(unsignedchardataaddr,unsignedchar*pD

13、ata)chardatastatus;unsignedintdataunLen;unsignedchardatai,ucComMF522BufMAXRLEN;ucComMF522Buf0=PICC_READ;ucComMF522Buf1=addr;CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf2);statusPcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);if(status=MI_OK)&(unLen=0 x90)/memcpy(pData,ucComMF522Buf,16

14、);for(i=0;i16;i+)*(pData+i)=ucComMF522Bufi;elsestatus=MI_ERR;returnstatus;/功能:写数据到M1卡一块参数说明:addrIN:块地址/pDataIN:写入的数据,16字节/返回:成功返回MI_OK/charPcdWrite(unsignedchardataaddr,unsignedchar*pData)chardatastatus;unsignedintdataunLen;unsignedchardatai,ucComMF522BufMAXRLEN;曲盡ComMF522Buf0=PICC_WRITE;ucComMF522B

15、ufl=addr;CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf2);statusPcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);if(status!=MI_OK)II(unLen!=4)II(ucComMF522Buf0&OxOF)!=OxOA)status=MI_ERR;if(status=MI_OK)memcpy(ucComMF522Buf,pData,16);for(i=0;i16;i+)ucComMF522Bufi=*(pData+i);CalulateCRC(uc

16、ComMF522Buf,16,&ucComMF522Buf16);statusPcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen);if(status!=MI_OK)|(unLen!=4)|(ucComMF522Buf0&0 x0F)!=0 x0A)status=MI_ERR;returnstatus;/功能:命令卡片进入休眠状态/返回:成功返回MI_OK/charPcdHalt(void)chardatastatus;unsignedintdataunLen;unsignedchardataucComMF522Bu

17、fMAXRLEN;ucComMF522Buf0=PICC_HALT;ucComMF522Buf1=0;CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf2);status22程序读书笔记详细注释22程序读书笔记详细注释returnMI_OK;/用MF522计算CRC16函数/voidCalulateCRC(unsignedchar*pIndata,unsignedchardatalen,unsignedchar*pOutData)unsignedchardatai,n;ClearBitMask(DivIrqReg,0 x04);WriteRawRC(Comma

18、ndReg,PCD_IDLE);取消当前命令SetBitMask(FIFOLevelReg,0 x80);/FlushBuffer清除ErrReg的标志位for(i=0;ivlen;i+)WriteRawRC(FIFODataReg,*(pIndata+i);WriteRawRC(CommandReg,PCD_CALCCRC);i=0 xFF;don=ReadRawRC(DivIrqReg);i-;while(i!=0)&!(n&0 x04);当CRCIRq所有数据被处理完毕该位置位pOutData0=ReadRawRC(CRCResultRegL);显示计算出来的CRC值pOutData1=

19、ReadRawRC(CRCResultRegM);/功能:复位RC522/返回:成功返回MI_OK/charPcdReset(void)/PORTDI=(1vvRC522RST);SET_RC522RST;delay_ns(10);/PORTD&=(1vvRC522RST);CLR_RC522RST;delay_ns(10);/PORTDI=(1vvRC522RST);SET_RC522RST;delay_ns(10);PCD_RESETPHASEWriteRawRC(CommandReg,PCD_RESETPHASE);/#define22程序读书笔记详细注释如妙2社序以书毛记详细y王释22

20、程序读书笔记详细注释0A22程序读书笔记详细注释如妙2社序以书毛记详细y王释22程序读书笔记详细注释如妙2社序以书毛记详细y王释xOF复尙eiay_ns(10);WriteRawRC(ModeReg,0 x3D);WriteRawRC(TReloadRegL,30);WriteRawRC(TReloadRegH,0);WriteRawRC(TModeReg,0 x8D);WriteRawRC(TPrescalerReg,0 x3E);器寄存器,#和Mifare卡通讯,CRC初始值0 x6363定时器的低8位数据,定时器的高8位数据,定时器模式寄存器,定时器减值计数实际值是OXD3E这部分主要是

21、设置定时WriteRawRC(TxAutoReg,0 x40);必须要,设置逻辑1,强制1OO%ASK调制22程序读书笔记详细注释如妙2社序以书毛记详细y王释22程序读书笔记详细注释如妙2社序以书毛记详细y王释returnMI_OK;/设置RC522的工作方式/charM500PcdConfigISOType(unsignedchardatatype)if(type=A)/ISO14443_AClearBitMask(Status2Reg,0 x08);状态2寄存器WriteRawRC(ModeReg,0 x3D);/3F/和Mifare卡通讯,CRC初始值0 x6363WriteRawRC(

22、RxSelReg,0 x86);/84选择内部接收器设置,内部模拟部分调制信号,发送数据后,延迟6个位时钟,接收WriteRawRC(RFCfgReg,0 x7F);/4F配置接收器48dB最大增益WriteRawRC(TReloadRegL,30);/tmoLength);TReloadVal=h6a=tmoLength(dec)WriteRawRC(TReloadRegH,0);实际值是OXD3E这部分主要是设置定时器寄存器,#WriteRawRC(TModeReg,0 x8D);WriteRawRC(TPrescalerReg,0 x3E);delay_ns(1000);PcdAntennaOn();elsereturn-1;returnMI_OK;/功能:读RC522寄存器参数说明:AddressIN:寄存器地址返回:读出的值/unsignedcharReadRawRC(unsignedchardataAddress)W-unsignedchardataucAd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论