




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
—概 基本命 FM1715寄存 四、典型应用电 五、底层函数 头文 常用函 卡片复位应答信号的判 接收到的卡片UID号的判 保存卡片的UID 设置待发送数据的字节 FM1715基本函 总线选 FM1715初始 命令传 读FM1715中的EEPROM数 向FM1715的EEPROM中写入数 清除FM1715的FIFO中的数 向FM1715的FIFO中写入x字节数 从FM1715的FIFO中读出x字节数 六、例 卡片触 读 写 方便地使用FM1715模块MIFARE卡和标准卡.并在KEILC51V6.0编译环境下通过。二、ISO14443A卡片返回的代码说明0x00:对指定地址的被0x0A:控制单元射频Command:0x26or 射频卡控制 Data[0]:_TagType(低字节Data[1]:_TagType(高字节控制单元射频 射频卡控制Len: 卡片系 Data[4]:控制单元射频 卡片系列号 射频卡控制Len:Data[0]:_Size(卡片容量值:0x08控制单元射频Command:0x60or Data[0]:0x60or0x61(0x60KEYA,0x61KEYB 射频卡控制Len:控制单元射频 射频卡控制Len:将操作后的卡片置于haltrequest控制单元射频 块地址射频卡控制Len:Data[0]:数据块的第一Data[15控制单元射频 _Adr要写入数据的块地址射频卡控制DATA[0]: 射频卡控制Len:DATA[0]:控制单元射频 _Adr数值块的地址射频卡控制Len:DATA[0]: 射频卡控制 控制单元射频 _Adr数值块的地址射频卡控制Len:DATA[0]: 射频卡控制Len:控制单元射频 _Adr数值块的地址射频卡控制Len:DATA[0]:Data[1]:Data[2]:Data[3]:Data[4]:射频卡控制 控制单元射频 Adr要传输数据的卡片块地址射频卡控制Len:DATA[0]:三、FM1715简自动侦测微处理器接口类型在每一次上电或硬件复位后,FM1712/1714/1715会复位并行微处理器接口模式,并不同类型微处理器接口连接关系独立的地址独立的地址复用的地址/线 制寄存器组Page5:FIFO,Timer及IRQ控制寄存器组Page6:预留寄存器组001264byteFIFO3 FIFO4FIFObyte567189AB侦测到的第一个位的位CTimerDCRC8ECRC8F2TX1TX23调 4CRC8CRC85TimerIRQPinConfigIRQ67四、典型应用电路五、底层函数库头文件编制时间修改时间:20039#ifndef_MAIN_INCLUDED_#define #define #define #define #define #define 到KEY缓 #defineReq#define
#defineucharunsignedchar#defineuintunsignedint#define #define #define #define #define #define 1201010123 //*******************函数错误代码定义01234568//卡片序列号错误(anti-collision错误9 FM1715_BYTECOUNTERR12 //调用decrement//RF通道检验模式设//mfOUTsbitMFRSTP1^ ucharidata_at_ucharidatavalue[4]ucharidata_at__at_ucharidata_at_//16ucharidata_at_//16ucharidata_at_uchar _at_uchar _at_卡片复位应答信号的判断/*名称: /*功能:该函数实现对卡片复位应答信号的判 /*输入:*buff,指向应答数据的指 TRUE,卡片应答信号正 FALSE,卡片应答信号错 ucharJudge_Req(ucharidata*buff){uchartemp1=*buff;temp2=*(buff+1);if(((temp1==0x03)||(temp1==0x04)||(temp1==0x05)||(temp1==0x53))&&(temp2=={}return}注:temp1= ;标准TOKENtemp1 temp1 temp1= ;标准8K接收到的卡片UID号的判别/*名称: /*功能:该函数实现对收到的卡片的序列号的判 /*输入: TRUE:序列号正 FALSE:序列号错 ucharCheck_UID(void){uchartemp;uchari;temp=for(i=0;i<5;{temp=temp^}if(temp=={}return}保存卡片的UID/*名称: row:产生的 col:产生的 voidSave_UID(ucharrow,ucharcol,ucharlength){uchari;uchartemp;ucharif((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:产生的 col:产生的 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);}}总线选/*名称: /*功能:该函数实现对FM1715操作的总线方式(并行总线,SPI)选 /*输入: FALSE,总线选择失 ucharFM1715_Bus_Sel(void){ucharPage_Sel= //表示PageSelect的值做为寄存器地址 和A3,//三位寄存器地址A2-A0由//外部地址线A2-A0for(i0;iRF_TimeOut //{if(Command {Page_Sel=0x00;returnTRUE;}}return}FM1715初始/*名称: /*功能:该函数实现对FM1715初始化操 2:模 voidInit_FM1715(ucharmode){ucharidata MFRST for(i=0;i<0x1fff;{}MFRST=for(i=0;i<0x1fff;{}while(Command {} TimerClock= TimerControl TimerReload InterruptEn=0x7f; temp=InterruptEn;Int_Req=MFOUTSelect TxControl if(mode== {TypeSH=}{TypeSH=}if(mode {CoderControl=0x20;TypeBFraming=0x05;DecoderControl=0x19;ChannelRedundancy=0x24;TxControl=0x4b;CWConductance=0x3f;ModConductance=af;}}命令传/*名称: /*功能:该函数实现向FM1715发送命令集的功 /*输入:count,待发送命令集的长 buff,指向待发送数据的指 Comm_Set,命令 /*输出:TRUE,命令被正确执 FALSE,命令执行错 ucharCommand_Send(ucharcount,ucharidata*buff,ucharComm_Set){ ucharidataCommand=0x00;temp=Command for(j0;jRF_TimeOut {temp=MFOUTSelect;temp=Command;temp1=Int_Req&0x80;if((temp==0x00)||(temp1=={returnTRUE;}}returnFALSE;}FM1715中的EEPROM/*名称: /*功能:该函数实现从FM1715的EE中读出数 lsb,EE地址(低字节 msb,EE地址(高字节 count,待读出数据EE的字节个 buff,指向待读出数据的指 TRUE,EE数据正确读 Read_E2(ucharlsb,ucharmsb,ucharcount,ucharidata*buff){ucharif(temp==FALSE)}向FM1715的EEPROM中写入数据/*名称: /*功能:该函数实现向FM1715的EE中写入数 lsb,EE地址(低字节 msb,EE地址(高字节 count,待写入数据EE的字节个 buff,指向待写入数据的指 TRUE,EE数据正确写 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}清除FM1715FIFO中的数/*名称: /*功能:该函数实现清空FM1715中FIFO的数 /*输入: /*输出:TRUE,FIFO被清 ucharClear_FIFO(void){uchartemp; temp temp=(temp|0x01);Control=temp;for(i0;iRF_TimeOut {if(temp==0){}}return}FM1715FIFO中写入x/*名称: /*功能:该函数实现向FM1715的FIFO中写入xbytes数 /*输入:count,待写入字节的长 buff,指向待写入数据的指 /*输出: voidWrite_FIFO(ucharcount,ucharidata*buff){ucharfor(i=0;i<count;{FIFO=*(buff+}}FM1715FIFO中读出x/*名称: /*功能:该函数实现从FM1715的FIFO中读出xbytes数 buff,指向读出数据的指 ucharRead_FIFO(ucharidata*buff){uchartemp;uchari;temp=FIFO_Length;if(temp==0){return}iftemp //temp=255时,会进 temp= //yanshouli,2003-12-}for(i=0;i<temp;{*(buff+i)=}return} 卡片操作基本函数/*名称: /*功能:该函数实现暂停MIFARE /*输入: /*输出:FM1715_OK:应答正 ucharMIF_Halt(void){ 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&{}}}/*名称: /*功能:该函数实现把E2中存入FM1715的keybuffer r:EE起始地 /*输出:True:密钥装载成 False:密钥装载失 r,ucharMode){uchartemp;ucharlsb=0;temp= r*12;if(Mode==0){if(temp>= //计算存放地{lsb=temp-0x80;msb=0x01;}{msb=lsb=temp+}}{msb=lsb=temp+}buffer[0]=lsb;temp=Command_Send(2,buffer,LoadKeyE2);temp=ErrorFlag&0x40;if(temp=={return}}/*名称: /*功能:FM1715Request操作 FM1715_OK:应答正 FM1715_REQERR:应答错 ucharRequest(ucharmode){ idataCRCPresetLSB=0x63;buffer[0] //Request模式选Bit_Frame //ChannelRedundancy=0x03; temp=Control;temp=temp&Control= //CRYPTO1temp=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} /*功能:该函数实现对放入FM1715操作范围之内的卡片的防检 FM1715_BYTECOUNTERR:接收字节错 FM1715_SERNRERR:卡片序列号应答错 FM1715_OK:卡片应答正 {uchari;ucharrow,col;row=col=pre_row=CRCPresetLSB=0x63;CWConductance=0x3f;ModConductance=0X3f;buffer[0]=RF_CMD_ANTICOL;buffer[1]=0x20;ChannelRedundancy=0x03; mand_Send(2,buffer,Transceive);{{}temp= if((temp& if((temp& if(temp==0){return} //temp=ErrorFlag; temp=temp&0x01;if(temp=={temp=Check_UID(); if(temp==FALSE){}}{
temp= 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,}}}/*名称: /*功能:该函数实现对放入FM1715操作范围之内的某张卡片进行选 :::FM1715_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判断应答信号是否正确}}
/*功能:该函数实现认证的过 /*输入:UID:卡片序列号地 R:扇区 mode:模 /*输出:FM1715_NOTAGERR:无 FM1715_CRCERR:CRC校验 FM1715_OK:应答正 FM1715_AUTHERR:认证有 Authentication(ucharidata*UID,uchar R,ucharmode){ucharidataucharidataCRCPresetLSB=0x63;CWConductance=0x3f;temp1=Control;temp1=temp1&0xf7;Control=temp1;if(mode== buffer[0]=buffer[0]=buffer[1]= R*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)temp=Command_Send(0,buffer,Authent2); if(temp==FALSE){return}temp=if((temp&0x02)==if((temp&0x04)==0x04)returnif((temp&0x08)==0x08)temp1=temp1=temp1&0x08; if(temp1==0x08){return}return}/*/*/*buff:Block_Adr:/*FM1715_NOTAGERR:FM1715_PARITYERR:FM1715_CRCERR:CRCFM1715_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) if((temp&0x08)==0x08)returnFM1715_CRCERR;temp=FIFO_Length;iftemp {return}elseif(temp {}{}}
returnreturnBlock_Adr:FM1715_NOTAGERR:FM1715_NOTAUTHERR:认 FM1715_OK:应答正 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 casecase0x0a: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_NOTAUTHERR:认 FM1715_EMPTY: FM1715_CRCERR:CRC FM1715_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 casecase0x0a:casecase0x05:}temp=Command_Send(4,buff,Transmit);if(temp==FALSE){return}return}/*/*输入:buff:节数值起始地 Block_Adr:/*FM1715_NOTAGERR: FM1715_NOTAUTHERR:认 FM1715_EMPTY: FM1715_CRCERR:CRC FM1715_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 casecase0x0a:casecase0x05:}temp=Command_Send(4,buff,Transmit);if(temp==FALSE){}return}/*名称: /*输入:Block_Adr:块地 /*输出:FM1715_NOTAGERR:无 FM1715_NOTAUTHERR:认 FM1715_EMPTY:数据溢出错 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 casecase0x0a: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_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}te
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025建筑工程防蚁保障合同
- 2025年自建房租赁合同模板
- 2025工程合同范本2
- 《2025物业管理服务保函示范合同》
- 裁判员在不同文化背景下的执法方式探讨试题及答案
- 2025数码产品分销商合同范文
- 2025租房合同漫画范文
- 猪场股份制合同协议
- 电影股份代持协议合同
- 猪舍施工合同补充协议
- 辽宁协作校2024-2025学年度下学期高三第二次模拟考试语文试卷(含答案解析)
- 2025-2030汽车扬声器市场发展现状分析及行业投资战略研究报告
- 期中考试考后分析总结主题班会《全员出动寻找消失的分数》
- 2025年广东省广州市广大附中等校联考中考语文模拟试卷(4月份)
- 成都树德中学2025年高三第四次联考物理试题文试卷
- 民法典课程大纲
- 2025-2030中国数据安全服务行业市场深度分析及前景趋势与投资研究报告
- 医疗AI辅助康复管理
- 山东省天一大联考·齐鲁名校教研体2024-2025学年(下)高三年级第六次联考(物理试题及答案)
- 房地产市场报告 -2025年第一季度青岛写字楼和零售物业市场概况报告
- 2025年03月人力资源社会保障部所属单位笔试历年典型考题(历年真题考点)解题思路附带答案详解
评论
0/150
提交评论