您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > RFID实验2-HF13.56MHz-ISO-15693多数据块的读写
RFID实验二HF13.56MHzISO-15693多数据块的读写3.3HF13.56MHzISO-15693多数据块的读写3.3.1协议原理当附近式耦合设备VCD(VicinityCouplingDevice)寻址模式标志为“1”时发送一次请求,请求中包含附近式卡VICC(VicinityIntegratedCircuitCard)的唯一标识符UID(UniqueIdentifier),任何VICC在收到寻址标志为“1”的请求后,将收到的UID与自身的UID作比较,如果匹配,VICC将执行相应的操作并且向VCD发送一个响应。如果不匹配,VICC不做任何响应。ISO15693标准中规定的命令假定物理内存以固定大小的块(或页)出现。(1)达到256个块可被寻址。(2)块大小可至256位。(3)这可导致最大的内存容量达到8KB(64Kb)。本标准中规定的命令集允许按块操作(读和写)。关于其他操作方式,没有暗示或明示的限制。每个地址后带4个字节存储空间。3.3.2操作步骤(1)打开上位机软件,启动RFID原理机的电源,建立通信连接。(2)读取卡片的UID。进行数据读取操作,首先需要进行寻卡操作。将卡片放到识别区(如果连接了外接天线,将卡片放置在天线旁边。本书所有实验均采用外接天线为例),打开寻卡命令,选中“单卡识别”单选按钮,单击“寻卡”按钮,寻卡成功返回如图3-15所示的信息。图3-15寻卡操作(3)数据块数据读取。选择读取数据模块,选择卡号、填写地址、长度、数量(系统已经默认,可以不改写)。单击“读取多个模块数据”按钮。读取成功返回如图3-16所示的信息,地址“0”表示读取第0块,数量“2”则是读取2块数据,读取到的数据为1234567887654321,表示0块的8个字节。图3-16数据块读取(4)获取卡片的信息,读取到卡的块数和每个块的字节数,如应用族AFI、数据存储标识DSFID等。选择获取系统信息命令,单击“获取系统信息”按钮,读取成功返回如图3-17所示的信息,其中“应用族标识”“00”,“数据存储格式标识”为“00”,“数据块数量”为“1B”个,由于块的编号是从0-1B开始的,故共有数据模块1B+1个,同理每个数据模块的长度也是3+1个,即4个字节。图3-17获取系统信息(5)数据块数据写入。单击“写入数据块”按钮,选择卡号,输入地址“0”、块长度“4”、数量“1”块,输入“11223344”,执行“写入多个数据模块”,写入命令执行成功,如图3-18所示。图3-18写入数据块(6)验证写入是否成功。再次执行(3)读取第0块的操作,能够读取到写入的数据则为写入成功。(7)锁定数据块。选中“锁定数据块”单选按钮,进行锁块操作(锁定数据块后,数据块数据将被锁定,被锁定的数据块只支持读取,不支持写入)。3.3.3程序设计:多数据块数据读写功能的实现1.设计内容在MicrosoftVisualStudio2010开发环境上创建C#窗体应用程序;编写代码,实现多数据块数据读写功能。主要目的是了解MicrosoftVisualStudio2010开发环境及窗体应用程序建立;掌握程序通过串口与RFID实验系统平台建立连接并通信的原理和方法;了解RFID实验平台COM协议并实现多数据块读写功能。本设计所需设备如下。(1)硬件:PC(Pentium500以上,硬盘80GB以上,内存大于1GB,Windows操作系统),ISO15693M(高频13.56MHz)RFID原理模块(基于8位AT89C54嵌入式处理器),ISO15693卡片,串口线,USB转串口线。(2)软件:MicrosoftVisualStudio2010。本设计主要原理:上位机应用程序采用C#语言开发,遵守C#编程规范,读卡功能根据RFID原理模块COM协议实现,使用串口线和USB转串口线将PC与RFID原理模块连接;通过串口与RFID原理模块进行通信,上位机程序根据RFID原理模块COM协议实现寻卡功能后,最终完成多数据块读写的功能。2.设计步骤第一步:创建C#窗体应用程序。启动MicrosoftVisualStudio2010开发平台,选择“文件”→“新建”→“项目”命令,如图3-19所示。打开如图3-20所示的“新建项目”对话框,选择“VisualC#”→“Windows窗体应用程序”,填写“名称”,单击“确定”按钮,得到Windows窗体,如图3-21所示。图3-19新建项目图3-20选择Windows应用程序图3-21新建窗体第二步:设计功能界面。(1)在“视图”中选择“工具箱”命令将会出现一些控件,把相应的控件直接拖动到空白的界面中,再根据需要调整它的大小和位置,本实验的功能界面如图3-22所示。(2)项目创建完成后,右击界面,在弹出的快捷菜单中选择“属性”选项,将属性Text改为“多数据块读写”。(3)建立串口连接属性模块:在工具箱中拖出GroupBox放在“多数据块读写”窗体上,并将属性窗口中的Text属性修改为“串口操作”;拖出两个Label,将Text属性分别改为“串口号:”和“波特率:”,拖出两个“ComboBox”,将Name属性分别改为“serialPortCombo”和“baudRateCombo”,选中“buadRateCombo”的ComboBox,设置Items的集合为9600、19200、57600、115200,如图3-23所示。图3-22数据块操作界面图3-23字符串集合编辑器拖出3个Button,选中相应的控件,修改Text属性分别为“打开”、“关闭”、“刷新”,修改Name属性分别为“openSerialBtn”、“closeSerialBtn”、“refreshSerialBtn”。(4)建立寻卡功能模块:在工具箱中拖出GroupBox控件,放置在窗体上,选中该控件,将Text属性改为“寻卡操作”;拖出两个RadioButton,设置属性Name分别为singleRadionBtn与mutilRadioBtn,设置Text分别为“单卡识别”与“多卡识别”;拖出两个Button控件,设置Name属性分别为“findCardBtn”与“autoFindCardBtn”并修改Text属性分别为“寻卡”与“自动寻卡”;拖出一个ListBox控件,设置Name属性为“cardList”。(5)建立多数据块读写操作模块,在工具箱中拖出GroupBox控件,放置在窗体上,选中该控件,将Text属性改为“多数据块读写操作”;拖出四个Label,将Text属性分别改为“卡号”、“地址”、“长度”、和“数量”;拖出两个ComboBox,将Name属性分别改为“uidCombo”和“lengthCombo”;拖出两个TextBox,将Name属性分别改为“addressText”和“numBlockText”;拖出两个Button控件,设置Name属性分别是“readMutilBlockBtn”和“writeMutilBlockBtn”,并设置Text属性分别为“读取多个数据块”和“写入多个数据块”;拖出一个RichTextBox空间,设置属性为“resultText”。(6)建立信息输出模块:在工具箱中拖出ListBox控件,放置在窗体上,选中该控件,将name属性改为“ReadAndWriteMutilBlock”;拖出1个Button控件,设置Name属性为“clearBtn”,Text属性为“清空”。第三步:编写代码实现功能(此处只附部分主要代码及解析)。程序执行流程图如图3-24所示。图3-24程序执行流程图部分主要代码解析如下://读取多个卡按钮监听事件privatevoidbtn_ReadMultiBlock_Click(objectsender,EventArgse){if(uidList.Count1)//判断是否寻到卡片{AddList(错误:未发现卡片,请先寻卡!);return;//返回}if(cmb_UID_3.SelectedIndex0)//判断是否选择操作的卡片{AddList(错误:请选择您要读取的卡片!);cmb_UID_3.Focus();return;}if(cmd_Length_3.SelectedIndex0)//判断是否选择了正确的数据长度{AddList(错误:请选择正确的数据块长度!);cmd_Length_3.Focus();return;}Stringstruid=cmb_UID_3.Text.Trim();//字符串类型,保存卡片Bytecommand=0x07;//读卡命令Byte[]data=newByte[10];//字节数组,10字节长度for(Bytei=0;i8;i++)//其中8个字节保存卡号{data[i]=Convert.ToByte(struid.Substring(i*2,2),16);}data[8]=Byte.Parse(txt_Address_3.Text.Trim());//第9个字节保存地址data[9]=Byte.Parse(txt_Number_3.Text.Trim());//第10个字节保存数量sendAFrame(command,isSelected,data);//发送读卡命令}//写入数据按钮事件privatevoidbutton2_Click(objectsender,EventArgse){if(uidList.Count1){//判断是否寻卡成功AddList(String.Format(错误:还没有卡片,请先寻卡!));return;}if(uidCombo.SelectedIndex0)//判断是否选择卡片{AddList(String.Format(错误:你还没有选择卡片,请先选择!));uidCombo.Focus();return;}if(lengthCombo.SelectedIndex0)//判断数据长度是否合法{AddList(String.Format(请选择正确的数据块长度!));lengthCombo.Focus();return;//非法则跳出}Byteaddress;//起始地址BytenumBlock;//数据块数量BytelengthBlock;//数据块长度try{address=Byte.Parse(addressText.Text.Trim());//保存写入的地址}catch//在保存地址过程中出现异常则抛出异常并返回{AddList(String.Format(错误:地址输入格式出错!));addressText.Focus();return;}try{numBlock=Byte.Parse(numBlockText.Text.Trim());//保存写入的数量}catch//在保存数量过程中出现异常则抛出异常并返回{AddList(String.Format(错误:数量格式出错!));numBlockText.Focus();return;}try{lengthBlock=Byte.Parse(lengthCombo.Text.Trim());}catch{AddList(String.Format(错误:数量格式出错!));lengthCombo.Focus();return;}BytenumByte=(Byte)(numBlock*lengthBlock);//数据块总字节数Byte[]dataForWrite=newByte[numByte];//新建字节数组,长度为写入数据的长度StringstrForWrite=resultText.Text.Trim();//写入的数据try//将写入的数据进行数据类型转换{for(inti=0;idataForWrite.Length;i++){dataForWrite[i]=Convert.ToByte(strForWrite.Substring(2*i,2),16);}}catch(Syste
本文标题:RFID实验2-HF13.56MHz-ISO-15693多数据块的读写
链接地址:https://www.777doc.com/doc-7293241 .html