MFRC522设计射频身份识别器C程序_第1页
MFRC522设计射频身份识别器C程序_第2页
MFRC522设计射频身份识别器C程序_第3页
MFRC522设计射频身份识别器C程序_第4页
MFRC522设计射频身份识别器C程序_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、#includeHmyim匸h*函数名:Wnte_MFRC5200*功能描述:向MFRC522的某一寄存器写一个字节数据*输入参数:addi-寄存器地址;val-要写入的值*返回值:无*/voidWiite_MFRC522(uchaiaddi;ucharval)GPIO_WnteLow(GPIOE,GPIO_PIN_5);地址格式:oxxxxxxoSPI_Wnte(addi1)&0 x7E);SPI_Wnte(val);GPIO_WiiteHigh(GPIOE,GPIO_PIN_5);*函数名:Read_MFRC522*功能描述:从MFRC522的某一寄存器读一个字节数据*输入参数:addi-

2、寄存器地址*返回值:返回读取到的一个字节数据*/ucharRead_NlFRC522(ucharaddi)ucharval;GPIO_WnLow(GPIOE,GPIO_PIN_5);地址格式:1XXXXXX0SPI_Write(addrl)&Ox7E)|0 x80);val=SPI_Read();GPIO_WnWHigh(GPIOE,GPIO_PIN_5);retuinval;*函数名:SetBitMask*功能描述:置RC522寄存器位*输入参数:“g-寄存器地址;mask-置位值*返回值:无*/voidSetBitMask(ucharreg.ucharmask)uchartmp;tmp=R

3、ead_MFRC522(reg);Wiite_MFRC522(reg,tmp|mask);/setbitmask*函数名:CleaiBitMask*功能描述:清RC522寄存器位*输入参数:reg-寄存器地址;mask-清位值*返回值:无*/voidCleaiBitMask(ucharreg,ucharmask)uchartmp;tmp=Read_MFRC522(reg);Wiite_MFRC522(ieg,tmp&(mask);/clearbitmask*函数名:AiitemiaOn*功能描述:开启大线,每次启动或关闭天险发射Z间应至少有1ms的间隔*输入参数:无*返回值:无*/voidAi

4、iteiuiaOn(void)uchartemp;temp=Read_NIFRC522(TxContiolReg);if(!(temp&0 x03)SetBitMask(TxControlReg,0 x03);*函数名:AiitemiaOff*功能描述:关闭大线,每次启动或关闭天险发射Z间应至少有1ms的间隔*输入参数:无*返回值:无*/voidAiiteimaOff(void)ClearBitMask(TxContiolReg,0 x03);*函数名:ResetMFRC522*功能描述:复位RC522*输入参数:无*返回值:无*/voidMFRC522_Reset(void)Wnte-MFR

5、C522(ConunandReg,PCD.RESETPHASE);voidMFRC522_Init(void)SetNRSTPD:zNlFRC522_Reset();/Timer:TPrescalei*TieloadVaV6.78MHz=24msWnte-MFRC522(TModeReg,0 x8D);/Tauto=1;f(Timer)=678MHzTPeScaleiWiite_MFRC522(TPiescaleiReg,0 x3E);/TModeReg3.0+TPrescaleiRegWnte-MFRC522(TReloadRegL,30);Wnte-MFRC522(TReloadRegH,

6、0);Wnte_MFRC522(TxAutoReg,0 x40);/100%ASKf/MFCiyptolOn=0/RxWait=RxSelReg5.0/RxGain=48dBWnte_MFRC522(ModeReg,0 x3D);/CRC初始值0 x6363?/CleaiBitMask(Status2Reg,0 x08);/Wnte_MFRC522(RxSelReg,0 x86);/Wnte_MFRC522(RFCfgReg,0 x7F);AiitemiaOn();打开天线*功能描述:RC522和ISO14443卡通讯*输入参数:command-MF522命令字,sendData-通过RC52

7、2发送到卡片的数据,sendLen-发送的数据长度backData-接收到的卡片返回数据,backLen-返回数据的位长度*返回值:成功返回MI_OK*/ucharMFRC522_ToCaid(ucharcommand,uchar*sendData,ucharsendLen,uchar*backData,umt*backLen)ucharstatus=MI_ERR;ucharuqEn=0 x00;ucharwaitIRq=0 x00;ucharlastBits;ucharn;umti;switch(command)casePCD_AUTHENT:认证卡密uqEn=0 x12;waitIRq=0

8、 x10;break;casePCD.TRANSCEIVE:发送FIFO中数据uqEn=0 x77;waitIRq=0 x30;break;default:break;Wiite_MFRC522(ConmilEiiReg,iiqEn|0 x80);/允许中断请求ClearBitMask(CommIrqReg,0 x80);/清除所有中断请求位SetBitMask(FIFOLevelReg,0 x80);/FlushBuffei-1,FIFO初始化Wnte_MFRC522(ConmiandReg.PCDJDDLE);/NOaction;取消当前命令?向FIFO中写入数据for(i=0;iMAX_

9、LEN)n=MAX_LEN;读取FIFO中接收到的数据for(i=0;in;i+)backDatai=Read_MFRC522(FIFODataReg);elsestatus=Nfl_ERR;/SetBitMask(ControlReg,0 x80);/timerstops/AVnte_MFRC522(CominandReg,PCDJDLE);retuinstatus;/*函数名:MFRC522_Request*功能描述:寻卡,读取卡类型号*输入参数:reqMode-寻卡方式,TagType-返回卡片类型0 x4400=Mifaie_UltiaLight0 x0400=Mifore_One(S

10、50)0 x0200=Mifare_One(S70)0 x0800=Mifore_Pro(X)0 x4403=Mifore.DESFire*返回值:成功返回2vn_OK*/ucharNIFRC522_Request(ucharreqMode,uchar*TagType)接收到的数据位数ucharstatus;umtbackBits;Wiite_MFRC522(BitFianiuigReg.0 x07);/TxLastBists=BitFranungReg2.O?TagType0=leqMode;status=MFRC522_ToCard(PCD_TRANSCEI7E,TagType,1,Tag

11、Type.&backBits);if(status!=MI_OK)|(backBits!=0 x10)istatus=MI_ERR;retuinstatus;*函数名:MFRC522_Anticoll*功能描述:防冲突检测,读取选中卡片的卡序列号*输入参数:seiNum-返回4字节卡序列号,第5字节为校验字节*返回值:成功返回2vn_OK*/ucharNIFRC522_Anticoll(uchar*seiNum)ucharstatus;uchari;ucharserNumCheck=0;umtunLen;/CleaiBitMask(Status2Reg50 x08);/TempSensclea

12、r/CleaiBitMask(CollReg,0 x80);/ValuesAfteiCollWiite_MFRC522(BitFianiuigReg.0 x00);/TxLastBists=BltFranungReg2.0seiNum0=PICC_ANTICOLL;seiNuml=0 x20;status=MFRC522_ToCard(PCD_TRANSCEI7E,serNum,2,serNum,&uiiLen);if(status=MI_OK)校验卡序列号for(1=0;i4;i+)serNumCheckJserNumi;if(serNumCheck!=seiNumi)status=MI_E

13、RR;/ValuesAfteiColl=1/SetBitMask(CollReg,0 x80);retuinstatus;*函数名:CalulateCRC*功能描述:用MF522计算CRC*输入参数:pindata-要读数CRC的数据,len数据长度,pOutData-计算的CRC结果*返回值:无*/voidCalulateCRC(uchai*plndata,ucharlen,uchar*pOntData)uchar1,n;ClearBitMask(DivkqReg,0 x04);/CRCkq=0SetBitMask(FIFOLevelReg,0 x80);清FIFO指针/Wnte_MFRC5

14、22(CoininandReg,PCDJDLE);向FIFO中写入数据for(i=0;Ken;i+)Wiite_MFRC522(FIFODataReg,*(plndata+i);Wiite_MFRC522(CominandReg,PCD_CALCCRC);等待CRC计算完成i=OxFF;don=Read_MFRC522(DivIiqReg);i-;while(i!=0)&!(n&0 x04);/CRCLq=1读取CRC计算结果pOutData0=Read_MFRC522(CRCResultRegL);pOutDatal=Read_MFRC522(CRCResultRegM);*函数名:MFRC

15、522_SelectTag*功能描述:选卡,读取卡存储器容鼠*输入参数:serNum传入卡序列号*返回值:成功返回卡容量*/ucharNIFRC522_SelectTag(uchar*seiNum)uchar1;ucharstatus;ucharsize;umtrecvBits;ucharbufferf刃;/CleaiBitMask(Status2Reg,0 x08);/MFCiypto1On=0buflfei0=PICC_SE1ECTTAG;buflfeifl=0 x70;for(i=0;i5;i+)ibuffeii+2=*(serNum+i);CalulateCRC(buffei7,刀);

16、/?status=MFRC522_ToCard(PCD_TRANSCEI7E,buffer.9,buffer,&recvBits);if(status=MI_OK)&(lecvBits=0 x18)isize=buffer0;size=0;returnsize;*函数名:NIFRC522_Auth*功能描述:验证卡片密码*输入参数:autliMode-密码验证模式0 x60=验证A密钥0 x61=验证B密钥BlockAddi块地址Sectoikev扇区密码serNum-卡片序列号,4字节*返回值:成功返回2vn_OK*/ucharNIFRC522_Auth(uchaiautliMode,uch

17、arBlockAddi;uchar函数名:NlFRC522_Read*功能描述:读块数据*输入参数:blockAdck-块地址工ecvData-读出的块数据Sectorkey,uchai*serNum)ucharstatus;umtrecvBits;uchari;ucharbuff12;验证指令+块地址+扇区密码+卡序列号buff0=autliMode;buffl=BlockAddi;for(i=0;i6;i+)buffi+2=*(Sectoikey+i);for(i=0;i4;i+)buffi+8=*(serNum+i);status=MFRC522_ToC如d(PCD_AUTHENT、bu

18、ff.12,buff.&recvBits);if(status!=MI_OK)|(Read_MFRC522(Status2Reg)&0 x08)status=MI_ERR;returnstatus;*返回值:成功返回MI_OK*/ucharNIFRC522_Read(ucharblockAddi;uchar*iecvData)ucharstatus;umtunLen;recvDataO=PICC_READ;recvDatal=blockAddi;CalulateCRC(recvData,2,&iecvData2);status=MFRC522_ToCard(PCD_TRANSCEI7E,recvData,4,recvData,&uiiLen);if(status!=MI_OK)(uiiLen!=0 x90)status=MI_ERR;retuinstatus;*函数名:MFRC522_Wnte*功能描述:写块数据*输入参数:blockAdck-块地址;writeData-向块写16字节数据*返回值:成功返回NH_OK*/ucharNIFRC522_Wiite(uchaiblockAddi;uchai*writeData)ucharstatus;umtrecvBits;uchari;ucharbuff18;b

温馨提示

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

评论

0/150

提交评论