试验16—RFID自动读卡_第1页
试验16—RFID自动读卡_第2页
试验16—RFID自动读卡_第3页
试验16—RFID自动读卡_第4页
试验16—RFID自动读卡_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、实验题目:实验16RFID自动读实验时间:2016.1.4实验目的:了解RFID相关知识。掌握RFID模块自动识别IC卡工作原理。实验原理及程序分析:1、STM8处理器概述本实验所使用RFID模块由STM处理器和MFRC531高集成非接触读写芯片)两片 芯片搭建而成的。STM先基于8位框架结构的微控制器,其 CPU内核有6个内部寄存器,通过这 些寄存器可高效地进行数据处理。STM8勺指令集支持80条基本语句及20种寻址模式,而且CPU6个内部寄存器都拥有可寻址的地址。STM8内部的FLASIW序存储器和数据 EEPROM一组通用寄存器来控制。用户可 以使用这些寄存器来编程或擦除存储器的内容、设

2、置写保护、或者配置特定的低功 耗模式。用户也可以对器件的选项字节(Option byte)进行编程。FLASHSTM8S EEPROMb为两个存储器阵列: 最多至128K字节的FLASHY序存储器,不同的器件容量有所不同。 最多至2K字节的数据EEPROM(括option byte 选择字节),不同的器件容 量有所不同。编程模式字节编程和自动快速字节编程 (没有擦除操作)一字编程块编程和快速块编程(没有擦除操作)在编程/擦除操作结束时和发生非法编程操作时产生中断读同时写(RWW助能。该特性并不是所有 STM8器件都拥有。在应用编程(IAP)和在线编程(ICP)能力。保护特性存储器读保护(ROP

3、)基于存储器存取安全系统(MASS密钥)的程序存储器写保护基于存储器存取安全系统(MASS密钥)的数据存储器写保护可编程的用户启动代码区域 (UBC)写保护在待机(Halt) 模式和活跃待机(Active-halt)模式下,存储器可配置为运行状态和掉电状态。数据EEPROM(DATA区域可用于存储用户具体项目所需的数据。默认情况 下,DATA区域是写保护的,这样可以在主程序工作在IAP模式时防止DATA区域被无意地修改。只有使用特定的MASS密钥才能对DATA区域的写保护解锁。2、MFR531 概述MF RC531是应用于13.56MHz非接触式通信中高集成读写卡芯片系列中的一员。该读写卡芯片

4、系列利用了先进的调制和解调概念,完全集成了在13.56MHz下所有类型的被动非接触式通信方式和协议。芯片管脚兼容 MFRC50O MFRC530 和 SL RC400OMFRC53伎持ISO/IEC14443A/B 的所有层和 MIFAR歌典协议,以及与该标准兼容的标准。支持?高速MIFAREIE接触式通信波特率。内部的发送器部分不需要增加有源电路就能够直接驱动近操作距离 ?的天线(可达 100mm。接收器部分提供一个坚固而有效的解调和解码电路,用于ISO14443A兼容的应答器信号。数字部分处理ISO14443A帧和错误检测(奇偶& CRC。此外,它还支持快速 CRYPTO1加密算法,用于验

5、证 MIFARE系列产品。与主机通信模式有 8位并行和 SPI模式,用户可根据不同的需求选择不同的模式,这样给读卡器/终端的设计提供了极大的灵活性。图 1.1 MFRC531特性高集成度的调制解调电路;采用少量外部器件,即可输出驱动级接至天线;最大工作距离100mm支持 ISO/IEC14443 A/B 和 MIFARES典协议;支持非接触式高速通信模式,波特率可达424kb/s ;采用Crypto1加密算法并含有安全的非易失性内部密匙存储器;管脚兼容 MF RC500 MF RC530 SL RC400;与主机通信的2种接口:并行接口和 SPI ,可满足不同用户的需求;自动检测微处理器并行接

6、口类型;灵活的中断处理;64字节发送和接收 FIFO缓冲区;带低功耗的硬件复位;可编程定时器;唯一的序列号;用户可编程初始化配置;面向位和字节的帧结构;数字、模拟和发送器部分经独立的引脚分别供电;内部振荡器缓存器连接13.56MHz石英晶体;数字部分白电源(DVDD)可选择3.3V或5V;在短距离应用中,发送器(天线驱动)可以用 3.3V供电。MF RC531适用于各种基于ISO/IEC 14443标准,并且要求低成本、小尺寸、高 性能以及单电源的非接触式通信的应用场合。公共交通终端;手持终端;板上单元;非接触式p(M端;计量;非接触式公用电话。杆制残)c物掘工Classic并行微控制器接口自

7、动检测连接的8位并行接口的类型。它包含一个的双向FIFO缓冲区和一个可配置的中断输出。这样就为连接各种MCU提供了很大的灵活性。即使使用非常低成本的器件也能满足高速非接触式通信的要求。带FIFO的SPI从机接口,其串行时钟SCK由主机提供。数据处理部分执行数据的并行-串行转换。它支持的帧包括CRG口奇偶校验。它以完全透明的模式进行操作,因而支持ISO14443A的所有层。状态和控制部分允许对器件进行配置以适应环境的影响并使性能调节到最佳状态。当与MIFAREStandard和MIFARE产品通信时,使用高速 CRYPTO流密码单元和一个可靠的非易失性密匙存储器。模拟电路包含了一个具有非常低阻抗

8、桥驱动器输出的发送部分。这使得最大操作距 离可达100mm接收器可以检测到并解码非常弱的应答信号。由于采用了非常先进的技术,接收器已不再是限制操作距离的因素了。该器彳为32脚SO封装。器彳使用了 3个独立的电源以实现在 EMC1性和信号解耦方 面达到最佳性能。MFRC53俱有出色的RF性能并且模拟和数字部分可适应不同的操作电 压。1N | |3TTIOSCOUTF MiireMl IN |T2111 tHIlilMUX 1 4,h,n-nn rR JUrX佗田加 I M UUMF RC53I包a doNrs$032扫I A2NiWrnr23 J MlNRIO | TTH |阳DV 5S JTT

9、T ALTi叫HITd i nrD2 rrri丁口$di piFIU国1.3跨邸图非接触式天线使用以下4个管脚:类型功TX1.TX2输出线冲天线驱动器WMID模拟参若电压RX输入模拟天线输入信号表1尺纹管脚描述为了驱动天线,MF RC531!过TX1和TX2提供13.56MHz的能量载波。根据寄存 器的设定对发送数据进行调制得到发送的信号。卡采用R四的负载调制进行响应。天线拾取的信号经过天线匹配电路送到 RX脚。MF RC531内部接收器对信号进行检测和 解调并根据寄存器的设定进行处理。然后数据发送到并行接口由微控制器进行读取。MFRC531支持MIFAREW源天线的概念。它可以处理管脚腥 F

10、IN和MFOUT的MIFARE 核心?模块的基带信号 NPAUSE口 KOMP。名称类型|功能MHN带牖甯特触发器的输入MIFARE接口愉入M1OUT愉山MIFARL接11愉出我12MIFARE接口管脚描述MIFAR破口可采用下列方式与腥 F RC531的模拟或数字部分单独通信:模拟电路可通过 MIFARE接口独立使用。这种情况下,MFIN连接到外部产生的NPAUSE 信号。MFOU能供KOMP言号。数字电路可通过MIFAR报口驱动外部信号电路。这种情况下,腥FOUTI供内部产生的NPAUSE言号而MFIN连接到外部输入的KOMP信号。4线SPI接口:名称类型功能AO带施密特触发器而LQMOS

11、1A2带施密特触发器的I/OSCKDO带施密特触发器的I/OM1SOALE带施帝特触发器的1NSS表13 SPI接口背脚描述代码实现如下/功能:寻卡/参数说明:req_codeIN:寻卡方式/ 0 x52 =寻感应区内所有符合 14443A标准的卡/ 0 x26 =寻未进入休眠状态的卡/ pTagTypeOUT:卡片类型代码/ 0 x4400 = Mifare_UltraLight/ 0 x0400 = Mifare_One(S50)/ 0 x0200 = Mifare_One(S70)/ 0 x0800 = Mifare_Pro/ 0 x0403 = Mifare_ProX/ 0 x4403

12、 = Mifare_DESFire返回:成功返回MI_OK/signed char PcdRequest(unsigned char req_code,unsigned char *pTagType) signed char status;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MFRC531_WriteReg(RegChannelRedundancy,0 x03);MFRC531_ClearBitMask(RegControl,0 x08);MFRC531_WriteReg(R

13、egBitFraming,0 x07);MFRC531_SetBitMask(RegTxControl,0 x03);MFRC531_SetTimer(4);MfComData.MfCommand = PCD_TRANSCEIVE;MfComData.MfLength = 1;MfComData.MfData0 = req_code;status = MFRC531_ISO14443_Transceive(pi);if (!status)if (MfComData.MfLength != 0 x10) status = MI BITCOUNTERR; )*pTagType = MfComDat

14、a.MfData0;*(pTagType+1) = MfComData.MfData1;return status;)/将存在RC531EEPROM的密钥匙调入RC531白FIFO/input: startaddr=EEPROM 地址/char PcdLoadKeyE2(unsigned int startaddr) char status;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MfComData.MfCommand = PCD_LOADKEYE2;MfComData.MfLe

15、ngth = 2;MfComData.MfData0 = startaddr & 0 xFF;MfComData.MfData1 = (startaddr 8) & 0 xFF;status = MFRC531_ISO14443_Transceive(pi);return status;)/功能:将已转换格式后的密钥送到RC531FIFO中input:keys=密钥/signed char PcdAuthKey(unsigned char *pKeys) signed char status;struct TransceiveBuffer MfComData;struct Transceive

16、Buffer *pi;pi = &MfComData;MFRC531_SetTimer(4);MfComData.MfCommand = PCD_LOADKEY;MfComData.MfLength = 12;memcpy(&MfComData.MfData0, pKeys, 12);status = MFRC531_ISO14443_Transceive(pi);return status;)/功能:用存放RC531FIFO中的密钥和卡上的密钥进行验证/input:auth_mode= 验证方式,0 x60:验证砒钥,0 x61:验证B密钥 / block= 要验证的绝对块号/ g_cSNR

17、=序列号首地址/signed char PcdAuthState(unsigned char auth_mode,unsigned char block,unsigned char *pSnr)(signed char status;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MFRC531_WriteReg(RegChannelRedundancy,0 x0F);MFRC531_SetTimer(4);MfComData.MfCommand = PCD_AUTHENT1;MfCom

18、Data.MfLength = 6;MfComData.MfData0 = auth_mode;MfComData.MfData1 = block;memcpy(&MfComData.MfData2, pSnr, 4);status = MFRC531_ISO14443_Transceive(pi);if (status = MI_OK)(if (MFRC531_ReadReg(RegSecondaryStatus) & 0 x07) status = MI_BITCOUNTERR; elseMfComData.MfCommand = PCD_AUTHENT2;MfComData.MfLeng

19、th = 0;status = MFRC531_ISO14443_Transceive(pi);if (status = MI_OK)if (MFRC531_ReadReg(RegControl) & 0 x08) status = MI_OK; else status = MI_AUTHERR; return status;/读mifare_one卡上一块(block)数据(16字节)/input: addr = 要读的绝对块号output:readdata = 读出的数据/signed char PcdRead(unsigned char addr,unsigned char *pRead

20、data) signed char status;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi= &MfComData;MFRC531_SetTimer(4);MFRC531_WriteReg(RegChannelRedundancy,0 x0F);MfComData.MfCommand = PCD_TRANSCEIVE;MfComData.MfLength = 2;MfComData.MfData0 = PICC_READ;MfComData.MfData1 = addr;status = MFRC531_I

21、SO14443_Transceive(pi); if (status = MI_OK) if (MfComData.MfLength != 0 x80) status = MI_BITCOUNTERR; else memcpy(pReaddata, &MfComData.MfData0, 16); return status;/写数据到卡上的一块signed char status;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MFRC531_SetTimer(5);MFRC531_W

22、riteReg(RegChannelRedundancy,0 x07);MfComData.MfCommand = PCD_TRANSCEIVE;MfComData.MfLength = 2;MfComData.MfData0 = PICC_WRITE;MfComData.MfData1 = addr;status = MFRC531_ISO14443_Transceive(pi); if (status != MI_NOTAGERR)if(MfComData.MfLength != 4) status=MI_BITCOUNTERR; else MfComData.MfData0 &= 0 x

23、0F;switch (MfComData.MfData0) case 0 x00:status = MI_NOTAUTHERR;/input:adde= 要写的绝对块号 / writedata= 写入数据/signed char PcdWrite(unsigned char addr,unsigned char*pWritedata)(signed char status;struct TransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MFRC531_SetTimer(5);MFRC531_WriteR

24、eg(RegChannelRedundancy,0 x07);MfComData.MfCommand = PCD_TRANSCEIVE;MfComData.MfLength = 2;MfComData.MfData0 = PICC_WRITE;MfComData.MfData1 = addr;status = MFRC531_ISO14443_Transceive(pi);if (status != MI_NOTAGERR)(if(MfComData.MfLength != 4) status=MI_BITCOUNTERR; elseMfComData.MfData0 &= 0 x0F;swi

25、tch (MfComData.MfData0)case 0 x00:status = MI_NOTAUTHERR;break;case 0 x0A:status = MI_OK;break;default:status = MI_CODEERR;break;if (status = MI_OK)MFRC531_SetTimer(5);MfComData.MfCommand = PCD_TRANSCEIVE;MfComData.MfLength = 16;memcpy(&MfComData.MfData0, pWritedata, 16);status = MFRC531_ISO14443_Tr

26、ansceive(pi);if (status != MI_NOTAGERR)MfComData.MfData0 &= 0 x0F;switch(MfComData.MfData0)(case 0 x00:status = MI_WRITEERR;break;case 0 x0A:status = MI_OK;break;default:status = MI_CODEERR;break; MFRC531_SetTimer(4);return status;/命令卡进入休眠状态/signed char PcdHalt() (signed char status = MI_OK;struct T

27、ransceiveBuffer MfComData;struct TransceiveBuffer *pi;pi = &MfComData;MfComData.MfCommand = PCD_TRANSCEIVE;MfComData.MfLength = 2;MfComData.MfData0 = PICC_HALT;MfComData.MfData1 = 0;status = MFRC531_ISO14443_Transceive(pi);if (status) (if (status=MI_NOTAGERR | status=MI_ACCESSTIMEOUT) status = MI_OK

28、;MFRC531_WriteReg(RegCommand,PCD_IDLE);return status;/硬件版本号const unsigned char hardmodel12 = SL601F-0512;unsigned char g_bReceOk; /正确接收到上位机指令标志unsigned char g_bReceAA; /接收到上位机发送的 AA字节标志unsigned char g_bRc531Ok; /RC531 复位正常标志unsigned int g_cReceNum; / 接收到上位机的字节数unsigned int g cCommand; 接收到的命令码10unsig

29、ned char g_cSNR4; /M1卡序列号unsigned char g_cIcdevH; /设备标记unsigned char g_cIcdevL; /设备标记unsigned char g_cFWI; /unsigned char g_cCidNad; /unsigned char g_cReceBuf64; /和上位机通讯时的缓冲区UART2_Cmd(ENABLE);/响应上位机发送的读取硬件版本号命令/void ComGetHardModel(void)memcpy(&g_cReceBuf0, &hardmodel0, sizeof(hardmodel);AnswerOk(&g

30、_cReceBuf0, sizeof(hardmodel);/响应上位机发送的设置RC53协议命令,ISO14443A/B/void ComPcdConfigISOType(void)if (MI_OK = MFRC531_CfgISOType(g_cReceBuf6) AnswerCommandOk(); else AnswerErr(-1);/响应上位机发送的天线命令/void ComPcdAntenna(void)char status;if (!g_cReceBuf6) status = MFRC531_CloseAnt(); elsedelay_ms(10);status = MFR

31、C531_OpenAnt();delay_ms(10);if (status = MI_OK) AnswerCommandOk(); else AnswerErr(FAULT10); 11)/响应上位机发送的A 卡休眠命令/void ComHlta(void) (if (MI_OK = PcdHalt() AnswerCommandOk(); else AnswerErr(FAULT10); /正确执行完上位机指令,应答(有返回数据)/input : answerdata =应答数据/ answernum =数据长度/void AnswerOk(unsigned char *answerdat

32、a, unsigned int answernum) unsigned char chkdata;unsigned int i;disableInterrupts();UART2_SendByte(0 xAA); / 发送命令头UART2_ SendByte(0 xBB);chkdata = (unsigned char)(answernum + 6) & 0 xFF); /长度字,包括状态字和效验字UART2_SendByte(chkdata);chkdata = (unsigned char)(answernum + 6)8) & 0 xFF);UART2_SendByte(chkdata

33、);UART2_SendByte(g_cIcdevH);/发送设备标识if (g_cIcdevH = 0 xAA)UART2_SendByte(0);UART2_SendByte(g_cIcdevL);if (g_cIcdevL = 0 xAA)UART2_SendByte(0);i = (unsigned char)(g_cCommand & 0 xFF); /发送命令码UART2_SendByte(i);chkdata A= i;i = (unsigned char)(g_cCommand 8) & 0 xFF);UART2_SendByte(i);chkdata a= i;UART2 S

34、endByte(0); / 发送状态字12chkdata A= g_cIcdevH A g_cIcdevL;for (i=0; i ;LK_H5IPrescalerConfigCLI.KlcckSecuritySyateffZrLJIIH4_Ccnfig(voidJlE4_3eInit);LH4_TiireBafleInit (TIM4_PMIM4_ITConfig(IIM4_IT_UPDJENABLE ;Total number of errors: 0Tot&l number of warnings: 05)编译完后我们要把程序烧到模块里, Debu嘴录成功会听到蜂鸣器响一声。“中间的 D

35、ownload and点击“用串口测试一下,把我们的传感器模块连接到我们的串口转 PCM的us端口,然后打开串口工具,配置好串口,波特率 一个停止位,无校验位,串口开始工作,无卡时串口返回:6)USB模块上再连接到115200, 8个数据位,EE CCFE NO01 00 0000 00 00 00 00 00 FF ,当有卡时串 口返回 EE CC FE NO 01 01 00 7B DA 08 E4 00 00 FF。14产聿 口猎人 t Serial Hu nter ) V31-gSSii高去发吗一COM4已趋开言摹启起立瓢琼主售止忆=1姑200, n 8 I玛去提示飨意资料版权信息EE CC FE 010100 00 00 00 00 00 00 00 FF EE CC FE 010100 DO GO 00 00 00 00 FF EECC FE 01010000 M 0C t)01)0 DO 00FFEE CC FE (JIOfl00 OD 00 00 00 00 00 00 FF EE CC FE 010100 00 00 DO 00 00 00 00 FF EECC FE )1010000 00 00 DO QG

温馨提示

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

评论

0/150

提交评论