版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、#includeHmyim匸h*函數(shù)名:Wnte_MFRC5200*功能描述:向MFRC522的某一寄存器寫一個字節(jié)數(shù)據(jù)*輸入?yún)?shù):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);*函數(shù)名:Read_MFRC522*功能描述:從MFRC522的某一寄存器讀一個字節(jié)數(shù)據(jù)*輸入?yún)?shù):addi-
2、寄存器地址*返回值:返回讀取到的一個字節(jié)數(shù)據(jù)*/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;*函數(shù)名:SetBitMask*功能描述:置RC522寄存器位*輸入?yún)?shù):“g-寄存器地址;mask-置位值*返回值:無*/voidSetBitMask(ucharreg.ucharmask)uchartmp;tmp=R
3、ead_MFRC522(reg);Wiite_MFRC522(reg,tmp|mask);/setbitmask*函數(shù)名:CleaiBitMask*功能描述:清RC522寄存器位*輸入?yún)?shù):reg-寄存器地址;mask-清位值*返回值:無*/voidCleaiBitMask(ucharreg,ucharmask)uchartmp;tmp=Read_MFRC522(reg);Wiite_MFRC522(ieg,tmp&(mask);/clearbitmask*函數(shù)名:AiitemiaOn*功能描述:開啟大線,每次啟動或關(guān)閉天險發(fā)射Z間應(yīng)至少有1ms的間隔*輸入?yún)?shù):無*返回值:無*/voidAi
4、iteiuiaOn(void)uchartemp;temp=Read_NIFRC522(TxContiolReg);if(!(temp&0 x03)SetBitMask(TxControlReg,0 x03);*函數(shù)名:AiitemiaOff*功能描述:關(guān)閉大線,每次啟動或關(guān)閉天險發(fā)射Z間應(yīng)至少有1ms的間隔*輸入?yún)?shù):無*返回值:無*/voidAiiteimaOff(void)ClearBitMask(TxContiolReg,0 x03);*函數(shù)名:ResetMFRC522*功能描述:復(fù)位RC522*輸入?yún)?shù):無*返回值:無*/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卡通訊*輸入?yún)?shù):command-MF522命令字,sendData-通過RC52
7、2發(fā)送到卡片的數(shù)據(jù),sendLen-發(fā)送的數(shù)據(jù)長度backData-接收到的卡片返回數(shù)據(jù),backLen-返回數(shù)據(jù)的位長度*返回值:成功返回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:認(rèn)證卡密uqEn=0 x12;waitIRq=0
8、 x10;break;casePCD.TRANSCEIVE:發(fā)送FIFO中數(shù)據(jù)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;取消當(dāng)前命令?向FIFO中寫入數(shù)據(jù)for(i=0;iMAX_
9、LEN)n=MAX_LEN;讀取FIFO中接收到的數(shù)據(jù)for(i=0;in;i+)backDatai=Read_MFRC522(FIFODataReg);elsestatus=Nfl_ERR;/SetBitMask(ControlReg,0 x80);/timerstops/AVnte_MFRC522(CominandReg,PCDJDLE);retuinstatus;/*函數(shù)名:MFRC522_Request*功能描述:尋卡,讀取卡類型號*輸入?yún)?shù):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)接收到的數(shù)據(jù)位數(shù)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;*函數(shù)名:MFRC522_Anticoll*功能描述:防沖突檢測,讀取選中卡片的卡序列號*輸入?yún)?shù):seiNum-返回4字節(jié)卡序列號,第5字節(jié)為校驗(yàn)字節(jié)*返回值:成功返回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)校驗(yàn)卡序列號for(1=0;i4;i+)serNumCheckJserNumi;if(serNumCheck!=seiNumi)status=MI_E
13、RR;/ValuesAfteiColl=1/SetBitMask(CollReg,0 x80);retuinstatus;*函數(shù)名:CalulateCRC*功能描述:用MF522計算CRC*輸入?yún)?shù):pindata-要讀數(shù)CRC的數(shù)據(jù),len數(shù)據(jù)長度,pOutData-計算的CRC結(jié)果*返回值:無*/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中寫入數(shù)據(jù)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計算結(jié)果pOutData0=Read_MFRC522(CRCResultRegL);pOutDatal=Read_MFRC522(CRCResultRegM);*函數(shù)名:MFRC
15、522_SelectTag*功能描述:選卡,讀取卡存儲器容鼠*輸入?yún)?shù):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;*函數(shù)名:NIFRC522_Auth*功能描述:驗(yàn)證卡片密碼*輸入?yún)?shù):autliMode-密碼驗(yàn)證模式0 x60=驗(yàn)證A密鑰0 x61=驗(yàn)證B密鑰BlockAddi塊地址Sectoikev扇區(qū)密碼serNum-卡片序列號,4字節(jié)*返回值:成功返回2vn_OK*/ucharNIFRC522_Auth(uchaiautliMode,uch
17、arBlockAddi;uchar函數(shù)名:NlFRC522_Read*功能描述:讀塊數(shù)據(jù)*輸入?yún)?shù):blockAdck-塊地址工ecvData-讀出的塊數(shù)據(jù)Sectorkey,uchai*serNum)ucharstatus;umtrecvBits;uchari;ucharbuff12;驗(yàn)證指令+塊地址+扇區(qū)密碼+卡序列號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;*函數(shù)名:MFRC522_Wnte*功能描述:寫塊數(shù)據(jù)*輸入?yún)?shù):blockAdck-塊地址;writeData-向塊寫16字節(jié)數(shù)據(jù)*返回值:成功返回NH_OK*/ucharNIFRC522_Wiite(uchaiblockAddi;uchai*writeData)ucharstatus;umtrecvBits;uchari;ucharbuff18;b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 總經(jīng)理聘用合同簽訂與授權(quán)
- 休閑度假房產(chǎn)打印身心放松
- 商業(yè)建筑砌墻施工合同
- 農(nóng)村宅基地租賃協(xié)議模板
- 航空客服招聘合同模板
- 農(nóng)業(yè)園區(qū)機(jī)耕道修建協(xié)議
- 防噪音卷簾門安裝合同樣本
- JJJ景區(qū)餐飲店投標(biāo)方案
- 服裝設(shè)計教師招聘協(xié)議
- 教育機(jī)構(gòu)加班安排細(xì)則
- 2024年廣東省第一次普通高中學(xué)業(yè)水平合格性考試歷史試卷(解析版)
- 部編版一年級上冊語文期末試題含答案
- 2025屆東莞東華高級中學(xué)高一生物第一學(xué)期期末考試試題含解析
- 春望(微教學(xué)設(shè)計) 蘇教版
- 新疆巴音郭楞蒙古自治州庫爾勒市2024-2025學(xué)年高一生物上學(xué)期期末考試試題
- 2024年吉林省吉林市豐滿區(qū)數(shù)學(xué)四年級第一學(xué)期期末預(yù)測試題含解析
- 老兵和軍馬(2023年河南中考語文試卷記敘文閱讀題及答案)
- 非人力資源管理者的人力資源管理
- 山東省市級縣級單位名稱及市縣代碼表
- 物理-福建省福州市2024-2025學(xué)年高三年級上學(xué)期第一次質(zhì)量檢測(福州一檢)試題和答案
- 新課標(biāo)背景下:初中生物學(xué)跨學(xué)科主題學(xué)習(xí)課程設(shè)計與教學(xué)實(shí)施
評論
0/150
提交評論