相關(guān)數(shù)據(jù)手冊參考文獻(xiàn)復(fù)旦微電子fm1715編程指南_第1頁
相關(guān)數(shù)據(jù)手冊參考文獻(xiàn)復(fù)旦微電子fm1715編程指南_第2頁
相關(guān)數(shù)據(jù)手冊參考文獻(xiàn)復(fù)旦微電子fm1715編程指南_第3頁
相關(guān)數(shù)據(jù)手冊參考文獻(xiàn)復(fù)旦微電子fm1715編程指南_第4頁
相關(guān)數(shù)據(jù)手冊參考文獻(xiàn)復(fù)旦微電子fm1715編程指南_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

—概 FM1715寄存 頭文 FM1715基本函 讀 寫 方便地使用FM1715模塊訪問MIFARE卡和上海標(biāo)準(zhǔn)卡.并在KEILC51V6.0編譯環(huán)境下通過。二、ISO14443A0x00:0x0A:Command:0x26or: :: 卡片系列號 Command:0x60or Data[0]:0x60or0x61(0x60KEYA,0x61KEYB 將操作后的卡片置于halt 塊地址 _Adr要寫入數(shù)據(jù)的塊地址 _Adr _Adr _AdrData[1]:Data[2]:Data[3]:Data[4]: Adr三、FM1715在每一次上電或硬件復(fù)位后,F(xiàn)M1712/1714/1715會復(fù)位并行微處理器接口模式,并獨(dú)立的地址獨(dú)立的地址復(fù)用的地址/線 制寄存器組Page5:FIFO,Timer及IRQ001264byteFIFO34FIFObyte567189ABCTimerDCRC8ECRC8Fbit2TX1TX2ISO14443-B3bit4CRC8CRC8MFOUT5FIFOTimerTimer啟動/IRQPinConfigIRQ67mainmain編制時間修改時間:20039#ifndef_MAIN_INCLUDED_#define //FM1715 #define #define //FM1715EEPROM#define //FM1715EEPROM#define #define #define #define #defineReq#define

#defineucharunsignedchar#defineuintunsignedint#define #define #define #define #define #define //Status120101卡類型定義0123//*******************函數(shù)錯誤代碼定義0123456//通訊錯誤(BCC校驗錯8//卡片序列號錯誤(anti-collision錯誤9//卡片數(shù)據(jù)長度字節(jié)錯誤(SELECT錯誤//調(diào)用decrement//*******************FM1715地址定義//mfOUTsbitMFRSTP1^ ucharidata_at_ucharidataucharidata_at__at_//*******************FM1715變量定義ucharidata_at_//16ucharidata_at_//16ucharidata_at_uchar _at_ucharidata_at_/*名稱: /*功能:該函數(shù)實現(xiàn)對卡片復(fù)位應(yīng)答信號的判 /*輸入:*buff,指向應(yīng)答數(shù)據(jù)的指 TRUE,卡片應(yīng)答信號正 FALSE,卡片應(yīng)答信號錯 ucharJudge_Req(ucharidata*buff){uchartemp1=*buff;temp2=*(buff+1);if(((temp1==0x03)||(temp1==0x04)||(temp1==0x05)||(temp1==0x53))&&(temp2=={return}return}注:temp1= ;上海標(biāo)準(zhǔn)TOKENtemp1 temp1 temp1 ;8K/*名稱: /*功能:該函數(shù)實現(xiàn)對收到的卡片的序列號的判 /*輸入: TRUE:序列號正 FALSE:序列號錯 ucharCheck_UID(void){uchartemp;uchari;temp=for(i=0;i<5;{temp=temp^}if(temp=={return}return}/*名稱: row:產(chǎn)生沖突的 col:產(chǎn)生沖突的 length:接収到的UID數(shù)據(jù)長 voidSave_UID(ucharrow,ucharcol,ucharlength){uchari;uchartemp;uchartemp1;if((row==0x00)&&(col=={for(i=0;i<length;{UID[i]=}}{temp=buffer[0];temp1=UID[row-1];switch(col){casetemp1=0x00;row=row+1;casetemp=temp&0xFE;temp1=temp1&0x01;casetemp=temp&0xFC;temp1=temp1&0x03;casetemp=temp&0xF8;temp1=temp1&0x07;casetemp=temp&0xF0;temp1=temp1&0x0F;casetemp=temp&0xE0;temp1=temp1&0x1F;casetemp=temp&0xC0;temp1=temp1&0x3F;casetemp=temp&0x80;temp1=temp1&0x7F;}buffer[0]=UID[row-1]=temp1|temp;for(i=1;i<length;i++){UID[row-1+i]=}}}/*名稱: row:產(chǎn)生沖突的 col:產(chǎn)生沖突的 voidSet_BitFraming(ucharrow,ucharcol){switch{casebuffer[1]=0x20;casebuffer[1]=0x30;casebuffer[1]=0x40;casebuffer[1]=0x50;casebuffer[1]=0x60;}{caseBit_Frame=0x00;caseBit_Frame=buffer[1]=(buffer[1]|0x01);caseBit_Frame=buffer[1]=(buffer[1]|0x02);caseBit_Frame=buffer[1]=(buffer[1]|0x03);caseBit_Frame=buffer[1]=(buffer[1]|0x04);caseBit_Frame=buffer[1]=(buffer[1]|0x05);caseBit_Frame=buffer[1]=(buffer[1]|0x06);caseBit_Frame=buffer[1]=(buffer[1]|0x07);}}/*名稱: /*功能:該函數(shù)實現(xiàn)對FM1715操作的總線方式(并行總線,SPI)選 /*輸入: FALSE,總線選擇失 ucharFM1715_Bus_Sel(void){ucharPage_Sel //表示PageSelect的值做為寄存器地址A5,A4和A3//三位寄存器地址A2-A0由//外部地址線A2-A0for(i0;iRF_TimeOut; {if(Command ,{Page_Sel=0x00;returnTRUE;}}return}/*名稱: /*功能:該函數(shù)實現(xiàn)對FM1715初始化操 /*輸入:mode:工作模式 0:TYPEA模 1:TYPEB模 2:上海模 voidInit_FM1715(ucharmode){ucharidata MFRST //FM1715for(i=0;i<0x1fff;{}MFRST=for(i=0;i<0x1fff;{}while(Command {} TimerClock= TimerControl TimerReload //10msInterruptEn=0x7f; temp=InterruptEn;Int_Req=MFOUTSelect TxControl ifmode {TypeSH=}{TypeSH=}if(mode //TYPEB{CoderControl=0x20;TypeBFraming=0x05;DecoderControl=0x19;ChannelRedundancy=0x24;TxControl=0x4b;CWConductance=0x3f;ModConductance=af;}}/*名稱: /*功能:該函數(shù)實現(xiàn)向FM1715發(fā)送命令集的功 /*輸入:count,待發(fā)送命令集的長 buff,指向待發(fā)送數(shù)據(jù)的指 Comm_Set,命令 /*輸出:TRUE,命令被正確執(zhí) FALSE,命令執(zhí)行錯 ucharCommand_Send(ucharcount,ucharidata*buff,ucharComm_Set){ ucharidataCommand=0x00;Write_FIFO(count,temp=Command for(j0;j<RF_TimeOut {temp=MFOUTSelect;temp=Command;temp1=Int_Req&0x80;if((temp==0x00)||(temp1=={returnTRUE;}}returnFALSE;}/*名稱: /*功能:該函數(shù)實現(xiàn)從FM1715的EE中讀出數(shù) lsb,EE地址(低字節(jié) msb,EE地址(高字節(jié) count,待讀出數(shù)據(jù)EE的字節(jié)個 buff,指向待讀出數(shù)據(jù)的指 TRUE,EE數(shù)據(jù)正確讀 FALSE,EE數(shù)據(jù)讀出有 Read_E2(ucharlsb,ucharmsb,ucharcount,ucharidata*buff){ucharif(temp==FALSE)}/*名稱: /*功能:該函數(shù)實現(xiàn)向FM1715的EE中寫入數(shù) lsb,EE地址(低字節(jié) msb,EE地址(高字節(jié) count,待寫入數(shù)據(jù)EE的字節(jié)個 buff,指向待寫入數(shù)據(jù)的指 TRUE,EE數(shù)據(jù)正確寫 FALSE,EE數(shù)據(jù)寫入有 Write_E2(ucharlsb,ucharmsb,ucharcount,ucharidata*buff){ucharidatafor(i=0;i<count;{*(buff+count-i+2)=*(buff-i+}*buff=*(buff+1)=temp=Command_Send(count+2,buff,WriteE2);temp=SecondaryStatus;temp=temp&0x40;if(temp==0x40){return}return}/*名稱: /*功能:該函數(shù)實現(xiàn)清空FM1715中FIFO的數(shù) /*輸入: /*輸出:TRUE,FIFO被清 FALSE,FIFO未被清 ucharClear_FIFO(void){uchartemp; temp temp=(temp|0x01);Control=temp;for(i0;iRF_TimeOut; {temp=FIFO_Length;if(temp==0){return}}return}/*名稱: /*功能:該函數(shù)實現(xiàn)向FM1715的FIFO中寫入xbytes數(shù) /*輸入:count,待寫入字節(jié)的長 buff,指向待寫入數(shù)據(jù)的指 /*輸出: voidWrite_FIFO(ucharcount,ucharidata*buff){ucharfor(i=0;i<count;{FIFO=*(buff+}}/*名稱: /*功能:該函數(shù)實現(xiàn)從FM1715的FIFO中讀出xbytes數(shù) buff,指向讀出數(shù)據(jù)的指 ucharRead_FIFO(ucharidata*buff){uchartemp;uchari;temp=FIFO_Length;if(temp==0){return}if(temp temp= }for(i=0;i<temp;{*(buff+i)=}return}/*名稱: /*功能:該函數(shù)實現(xiàn)暫停MIFARE /*輸入: /*輸出:FM1715_OK:應(yīng)答正 FM1715_PARITYERR:奇偶校驗 FM1715_CRCERR:CRC校驗 FM1715_NOTAGERR:無 ucharMIF_Halt(void){uchartemp; CRCPresetLSB=0x63;CWConductance=0x3f;*buffer=*(buffer+1)=temp=Command_Send(2,buffer,Transmit);if(temp==TRUE){for(i=0;i<0x50;{}return}{temp=if((temp&{}if((temp&{}}}/*名稱: /*功能:該函數(shù)實現(xiàn)把E2中密碼存入FM1715的keybuffer /*輸入:Secnr:EE起始地 /*輸出:True:密鑰裝載成 False:密鑰裝載失 Load_keyE2_CPY(ucharSecnr,ucharMode){uchartemp;ucharmsb=0;ucharlsb=0;temp=Secnr*12;if(Mode==0){if(temp {lsb=temp-0x80;msb=0x01;}{msb=lsb=temp+}}{msb=lsb=temp+}buffer[0]=lsb;buffer[1]=msb;temp=Command_Send(2,buffer,LoadKeyE2);temp=ErrorFlag&0x40;if(temp=={return}return}/*名稱: /*功能:FM1715Request操作 mode:ALL(監(jiān)測所以FM1715操作范圍之內(nèi)的卡片 FM1715_NOTAGERR:無 FM1715_OK:應(yīng)答正 FM1715_REQERR:應(yīng)答錯 ucharRequest(ucharmode){ idataCRCPresetLSB=0x63;buffer[0] Bit_Frame ChannelRedundancy=0x03; temp=Control;temp=temp&Control temp=Command_Send(1,buffer,Transceive);if(temp==FALSE){return} temp=Judge_Req(buffer); if(temp==TRUE){tagtype[0]=buffer[0];tagtype[1]=buffer[1];returnFM1715_OK;}return}/*名稱: /*功能:該函數(shù)實現(xiàn)對放入FM1715操作范圍之內(nèi)的卡片的防沖突檢 FM1715_NOTAGERR:無 FM1715_BYTECOUNTERR:接收字節(jié)錯 FM1715_SERNRERR:卡片序列號應(yīng)答錯 FM1715_OK:卡片應(yīng)答正 uchar{uchartemp;uchari;ucharrow,col;ucharrow=col=pre_row=CRCPresetLSB=0x63;CWConductance=0x3f;ModConductance=0X3f;buffer[0]=RF_CMD_ANTICOL;buffer[1]=0x20;ChannelRedundancy=0x03; temp=Command_Send(2,buffer,Transceive);{{}temp= if((temp& if((temp& if(temp==0){return}Save_UID(rowcol, temp=ErrorFlag; temp=temp&0x01;if(temp=={temp=Check_UID(); if(temp==FALSE){}}{

temp=CollPos; row=temp/8;col=temp%buffer[0]=Set_BitFraming(row+pre_row,col); pre_row=pre_row+row;for(i=0;i<pre_row+1;{buffer[i+2]=}if(col!={}{}

row=pre_row+row=temp=Command_Send(row+2,buffer,}}}/*名稱: /*功能:該函數(shù)實現(xiàn)對放入FM1715操作范圍之內(nèi)的某張卡片進(jìn)行選 FM1715_NOTAGERR:FM1715_PARITYERR:FM1715_CRCERR:CRCFM1715_BYTECOUNTERR:FM1715_OK:FM1715_SELERR:ucharSelect_Card(void){ucharCRCPresetLSB=0x63;CWConductance=0x3f;buffer[0]=RF_CMD_SELECT;buffer[1]=0x70;for(i=0;i<5;{} {}{if((temp&0x02)==0x02)if((temp&0x04)==0x04)if((temp&0x08)==0x08)if(temp!=1) temp=iftemp==0x08||temp==0x88)||temp==0x53))判斷應(yīng)答信號是否正確}}

/*名稱: /*功能:該函數(shù)實現(xiàn)密碼認(rèn)證的過 /*輸入:UID:卡片序列號地 SecNR:扇區(qū) mode:模 /*輸出:FM1715_NOTAGERR:無 FM1715_PARITYERR:奇偶校驗 FM1715_CRCERR:CRC校驗 FM1715_OK:應(yīng)答正 FM1715_AUTHERR:權(quán)威認(rèn)證有 Authentication(ucharidata*UID,ucharSecNR,ucharmode){ucharidataucharidataCRCPresetLSB=0x63;CWConductance=0x3f;ModConductance=0X3f;temp1=Control;temp1=temp1&0xf7;Control=temp1;if(mode== buffer[0]=buffer[0]=buffer[1]=SecNR*4+3;for(i=0;i<4;i++){buffer[2+i]=}ChannelRedundancy=0x0f; temp=Command_Send(6,buffer,Authent1);if(temp=={return}temp=if((temp&0x02)==if((temp&0x04)==0x04)returnif((temp&0x08)==0x08)returnFM1715_CRCERR;temp=Command_Send(0,buffer,Authent2); if(temp==FALSE){return}temp=if((temp&0x02)==if((temp&0x04)==0x04)returnif((temp&0x08)==0x08)returnFM1715_CRCERR;temp1=temp1=temp1&0x08; if(temp1==0x08){return}return}/*/*MIFARE/*buff: Block_Adr:/*FM1715_NOTAGERR: FM1715_PARITYERR: FM1715_CRCERR:CRC FM1715_BYTECOUNTERR: FM1715_OK:ucharMIF_READ(ucharidata*buff,ucharBlock_Adr){ucharidataCRCPresetLSB=0x63;CWConductance=0x3f;ModConductance=0X3f;ChannelRedundancy=0x0f;//Int_Req=0x7f;=RF_CMD_READ;=temp=Command_Send(2,buff,Transceive);if(temp==0){return}temp=if((temp&0x02)==0x02)returnFM1715_PARITYERR;if((temp&0x04)==0x04) returnFM1715_FRAMINGERR;if((temp&0x08)==0x08)returnFM1715_CRCERR;temp=FIFO_Length;iftemp {return}elseiftemp {}{}}

returnreturnbuff:Block_Adr:FM1715_NOTAGERR:FM1715_NOTAUTHERR:FM1715_EMPTY:FM1715_PARITYERR:FM1715_WRITEERR: FM1715_OK:應(yīng)答正 ucharMIF_Write(ucharidata*buff,ucharBlock_Adr){ucharidatatemp;ucharidataCRCPresetLSB=0x63;CWConductance=0x3f;F_buff=buff+0x10;ChannelRedundancy=0x07;*F_buff=*(F_buff+1)=temp=Command_Send(2,F_buff,Transceive);if(temp==FALSE){}temp=FIFO_Length;if(temp==0){}temp=*F_buff;switch(temp){case0x00 case0x04:case0x0a:casecase0x05:}temp=Command_Send(16,buff,if(temp=={}{

temp=if((temp&0x02)==0x02)elseif((temp&0x04)==0x04)elseif((temp&0x08)==0x08)}}

buff:Block_Adr:FM1715_NOTAGERR:FM1715_BYTECOUNTERR:FM1715_NOTAUTHERR:FM1715_EMPTY:FM1715_CRCERR:CRCFM1715_PARITYERR:FM1715_INCRERR:FM1715_OK:ucharMIF_Increment(ucharidata*buff,ucharBlock_Adr){ucharucharidataCRCPresetLSB=0x63;CWConductance=0x3f;F_buff=buff+4;*F_buff=*(F_buff+1)=Block_Adr;ChannelRedundancy=0x07;temp=Command_Send(2,F_buff,Transceive);if(temp==FALSE){return}temp=FIFO_Length;if(temp==0){return}temp=*F_buff;{case0x00 case0x04:case0x0a:casecase0x05:}temp=Command_Send(4,buff,Transmit);if(temp==FALSE){return}return}buff:Block_Adr:FM1715_NOTAGERR:FM1715_BYTECOUNTERR:FM1715_NOTAUTHERR:FM1715_EMPTY:FM1715_CRCERR:CRCFM1715_PARITYERR:FM1715_DECRERR:FM1715_OK:ucharMIF_Decrement(ucharidata*buff,ucharBlock_Adr){ucharucharidataCRCPresetLSB=0x63;CWConductance=0x3f;F_buff=buff+4;*F_buff=*(F_buff+1)=Block_Adr;ChannelRedundancy=0x07;temp=Command_Send(2,F_buff,Transceive);if(temp==FALSE){return}temp=FIFO_Length;if(temp==0){return}temp=*F_buff;switch(temp){case0x00 case0x04:case0x0a:casecase0x05:}temp=Command_Send(4,buff,Transmit);if(temp==FALSE){}return}/*/*MIFARE/*Block_Adr:/*FM1715_NOTAGERR: FM1715_BYTECOUNTERR: FM1715_NOTAUTHERR: FM1715_EMPTY:FM1715_PARITYERR:FM1715_OK:ucharMIF_Restore(ucharBlock_Adr){ucharCRCPresetLSB=0x63;CWConductance=0x3f;ChannelRedundancy=*buffer=*(buffer+1)=temp=Command_Send(2,buffer,Transceive);if(temp==FALSE){return}temp=FIFO_Length;if(temp==0){return}temp=*buffer;switch(temp){case0x00 case0x04:case0x0a:casecase0x05:}for(i=0;i<4;i++)buffer[i]=0x00;temp=Command_Send(4,buffer,Transmit);if(temp==FALSE){return}return}Block_Adr:FM1715_NOTAGERR:FM1715_BYTECOUNTERR:FM1715_NOTAUTHERR:FM1715_EMPTY:FM1715_CRCERR:CRCFM1715_PARITYERR:FM1715_TRANSERR:FM1715_OK:ucharMIF_Transfer(ucharBlock_Adr){ucharCRCPresetLSB=0x63;CWConductance=0x3f;ChannelRedundancy=0x07;buffer[0]=RF_CMD_TRANSFER;buffer[1]=Block_Adr;temp=Command_Send(2,buffer,Transceive);if(temp==FALSE){return}temp=FIFO_Length;if(temp==0){return}temp=*buffer;switch(temp){case0x00 case0x04:case0x0a:case0x01:case0x05:}}/*名稱: /*功能:該函數(shù)實現(xiàn)高級MIFARE卡激活命 /*輸入:Secnr:扇區(qū) Block_Adr:塊地 /*輸出:操作狀態(tài)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論