首页 Mifare ONE命令说明

Mifare ONE命令说明

举报
开通vip

Mifare ONE命令说明Mifare ONE命令说明 1 . “Answer to Request” (“Request”应答)指令 Request 指令将通知MCM在天线有效的工作范围(距离)内寻找MIFARE 1卡片。如果有MIFARE 1卡片存在,这一指令将分别与MIFARE 1进行通信,读取MIFARE 1卡片上的卡片类型号TAGTYPE(2个字节),由MCM传递给MCU,进行识别处理。 程序员可以根据TAGTYPE来区别卡片的不同类型。 对于MIFARE 1卡片来说,返回卡片的TAGTYPE(2个字节)可能为0004h。...

Mifare ONE命令说明
Mifare ONE命令说明 1 . “Answer to Request” (“Request”应答)指令 Request 指令将 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 MCM在天线有效的工作范围(距离)内寻找MIFARE 1卡片。如果有MIFARE 1卡片存在,这一指令将分别与MIFARE 1进行通信,读取MIFARE 1卡片上的卡片类型号TAGTYPE(2个字节),由MCM传递给MCU,进行识别处理。 程序员可以根据TAGTYPE来区别卡片的不同类型。 对于MIFARE 1卡片来说,返回卡片的TAGTYPE(2个字节)可能为0004h。 从一个指定的卡片开始,后续的卡片可以根据TAGTYPE而被选择。当使用 “Request std“指令来寻卡时,只有那些卡片上没有被设置成“HALT_MODE ”(停机模式)的卡片将响应这一指令。 Request all指令的使用是很重要的,它可以防止MCM选择同一卡片好几次。当某一张卡片在MCM之天线的有效的工作范围(距离)内,Request all指令在成功地读取这一张卡片之后,将一直等待卡片的使用者拿走这一张卡片,直到有新一张的卡片进入MCM之天线的有效的工作范围(距离)内。当然,这里的“新一张的卡片”亦可以是刚刚拿开的那张卡片。 Request all指令是非连续性的读卡指令。只读一次。但有个例外,当某一次Request all指令读卡片失败时,例如,卡片没能通过密码认证或其他原因而出错时,Request all指令将连续地读卡,直到读卡成功才进入非连续性的读卡模式。 Request all指令适用于那些需要有人工干预的场合。 Request std指令的使用和Request all指令刚巧相反,Request std指令是连续性的读卡指令。当某一张卡片在MCM之天线的有效的工作范围(距离)内,Request std指令在成功地读取这一张卡片之后,进入MCM对卡片的其他操作。如果其他操作完成之后,程序员又将MCM进入Request std指令操作,则Request std指令将连续性地再次进行读卡操作,而不管这张卡片是否被拿走。只要有一张卡片进入MCM之天线的有效的工作范围(距离)内,Request std指令将始终连续性地再次进行读卡操作。 Request std指令是连续性的读卡指令。 Request std指令适用于那些不需要有人工干预的场合,即全自动的场合。例如,宾馆,酒店,高级写字楼等场所的门禁控制系统(Door Access Control),高速公路,停车场等的不停车收费系统(Non-Stop Road Tolling),等等。 2.“AntiCollision” 防重叠 如果有多于一张的Mifare 1卡片在MCM之天线的有效的工作范围(距离)内 ,必须使用AntiCollision指令,使MCM能够在这一叠 Mifare 1卡片中选择个别的一张卡片。 AntiCollision指令开始于一个“AntiCollision loop”(防重叠循环)。结束时,AntiCollision指令将提供给用户在这些卡片叠中选择的那张个别的卡片的一个有效的40 bit长的序列号SN(serial number)。 一般地,AntiCollision指令将有序地读所有的处在MCM之天线的有效的工作范围(距离)内的Mifare 1卡片。读完第Xi张卡片后,MCM 及MCU对这Xi张卡片进行处理,完毕之后,读 第Xi+1张卡片,然后MCM 及MCU对这Xi+1张卡片进行处理。循序渐进,直至所有的卡片。 AntiCollision指令的启动必须是在程序员完成了对STACON寄存器中的AC位的成功的设置之后。 注意:AntiCollision指令事实上并不实际地选择一张个别卡片,而仅仅是读取Mifare1 卡片上的序列号SN。MCM与卡片的真正联络,选择某一张卡片,是由程序员向MCM发送“SELECT”命令来完成的。 AntiCollision指令读取的Mifare 1卡片上的一个有效的40 bit长的序列号SN(serial number)被存储在Mifare 1卡片上的第00H扇区中的第00h 块(Block)中。共5个字节。 事实上,对于程序员来说,实际有意义的SN只有前4个字节,最后一个字节只是一个SN的校验码。 程序员在控制MCM及MCU,发送AntiCollision指令,而获得SN之后,一般地应在程序中对所接收到的SN进行校验,以确保数据的正确性。具体的方法是对所接收到的SN的bit位进行异或校验,这在后面的具体程序编制中将会阐述。 对于MIFARE 1卡片来说,返回某一张卡片的有效序列号SN(4个字节)可能为:007e0a42h。 3(“Select Tag” 选择卡片操作 在一个成功的AntiCollision指令之后,或在任何时候当程序员想实际地与已知序列号的卡片进行通信时,必须使用Select指令,以建立与所选卡的通信。 为了允许在Select指令以后对卡片能进行Read/Write等指令的操作,Select指令是很重要的,必须首先被使用。被选择的卡片将给出其自己的存储器容量---已编码的一个BYTE(字节)。 Select指令成功地完成后,MCU将得到MCM之DATA寄存器传送来的一个字节长的卡片容量信息---SIZE字节。 SIZE字节被存储在Mifare 1卡片上的第00H扇区中的第00h 块(Block)中。共1个字节(8bits)。 对于MIFARE 1卡片来说,返回卡片的SIZE(个字节)可能为88h。 4(Authentication” 认证操作 在MCU将运算获得的数据,准备存储到卡片上的存储器之前,或MCU希望能读取Mifare 1卡片上的数据之前,程序员必须证明他的读/写请求操作是被允许的。 这可以通过选择秘密地存储在MCM之RAM中的密码集(KEYSET)中的一组密码来进行认证而实现。如果这一组密码匹配与Mifare 1卡片上的密码,这一次的操作被允许进行。 卡片上的存储器的每一个block(块)(128 bits ) 都分别地指定了该BlOCK(块)的存取条件。这些存取条件是根据密码A或B(它们对整个sectors (扇区)始终有效)而定。这样一来,不同的操作可能会被允许对一个sector中的4个不同blocks的每一个block进行操作。 MCM能够存储3个密码集KEYSET0,KEYSET1,KEYSET2。每一个KEYSET又包含了KEY A 及 KEYB 等,以存取最高达32Kbit内存容量的MIFARE卡片。 用户必须在KEYSTACON(0B H地址)寄存器中指定一套密码,即设置KS0, KS1。 KEYADDR寄存器(0C H地址)中的AB位用于选择KEYA(当AB=“1”时)和KEYB(当AB=“0”时)。 KEYADDR寄存器(地址0C H) 中的“AB”设置必须匹配”Authentication”命令(指令代码60和 61 hex),这是很重要的。否则,”Authentication”命令将失败。 即,在”Authentication”命令中,60h代码用于认证KEYA;61h代码用于认证KEYB。 当用60h代码时,在KEYADDR寄存器中只能设置AB=“1”,用于选择KEYA; 当用61h代码时,在KEYADDR寄存器中只能设置AB=“0”,用于选择KEYB; 当用60h代码时,在KEYADDR寄存器中不能设置AB=“0”,否则认证命令将出错; 当用61h代码时,在KEYADDR寄存器中不能设置AB=“1”,否则认证命令将出错; KS1和KS0的设置选择与上述的认证命令的指令代码60和 61 hex的选择无关; KS1和KS0的设置选择与上述的KEYADDR寄存器中AB的设置无关。 在MCM中,KEY-RAM(密码存储器)的实际存储器范围是: MCM中另外还包含了KEY-ROM (密码只读存储器),用以存储一套传输密码(one set of transport keys) 和一个维护密码(one service KEY)。 传输密码对于用户想在KEY-RAM(密码存储器)中自己定义密码而编程序时,很有用。 KEY-ROM (密码只读存储器)的存储器容量为: 5(“Load KEY” 存取密码 在MCM中,每一个认证扇区(Authentication sector)中包含了一套传输密码Tkey(one transport KEY)。这些密码在制造产品时,可以编程。它们可以被传输到系统的集合器(例如,用户开发的硬件系统)中,集合器负责存取新的用户定义的密码到MCM-WOM(密码只读存储器)中。此时,可以通过“Load KEY”指令来完成任务。 对于一个单独扇区(sector)中的密码提取,则相应的传输密码必须被预先指定。 在用“Load KEY”指令来完成存取密码过程中,KEYSTCON寄存器和KEYADDR寄存器的设置与“Authentication”的操作相似。但也有些区别。这将在后面的编程中具体介绍。 6(“Read” 读指令操作 Read (读)指令允许MCU通过MCM来读取MIFARE 1卡片上完整的16 个Bytes的数据块(Data blocks)。 只有在预先“Authentication” 认证指令完成后,才允许进行对Mifare 1卡片上的某一数据扇区进行Read (读)指令操作。 Read (读)指令操作只能一个块(Block)一个块地读,即只能16个字节一次性地读取。如果只要求某Block中的几个字节的数据,也只能一个整块16个字节一起读取,由程序员选取指定的字节。 从卡片上读到的数据必须由MCU进行校验,以确保数据的有效性。 密码数据不能被读取。 7( “Write” 写指令操作 “Write“ 写指令允许用户写数据到MIFARE卡片上(完整的16 个BYTEs的数据块(Data blocks))。只有在先“Authentication” 认证指令完成后,才允许进行对要求的数据扇区或数据块(Block)进行“Write“ 写指令操作。 为了提供最大的数据集成度,以及包含大量密码值的密码数据块的保密性,我们必须保持一个大数据结构。这样可以允许MIFARE卡片执行增值/减值(Increment/Decrement)指令。 数据块通过一个写操作,将存储的数据在每一个block块中写3次,1次反写,从而完成数据块的初始化。此外,一个地址引导位代码域必须写4次,其中2次为反向写入。正/负数据值将以 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的2的补码格式来表示。 注意:在将数据写到卡片上的某一扇区时,一定要小心。因为有些block中存储了密码数据以及存储允许使能数据。特别是每一个扇区的Block3中存放了该扇区的存取条件,包含有KEYA,KEYB及该扇区的控制字。Mifare 1卡片出厂时的Block3有缺省值,为:“a0a1a2a3a4a5ff078069b0b1b2b3b4b5”,共16个Bytes。 涉及Mifare 1卡片的存储结构等信息,请参考本文的关于Mifare 1 卡片章节。 程序员在使用Mifare 1卡片做应用时,一定要清清楚楚记住每一个扇区的Block3的数据,这样也就记住了扇区的密码和存取控制字。否则,扇区的存储空间将不能被READ/WRITE等操作而失效。 任何人试图用任何方式来读写不知密码的卡片或某一扇区都是徒劳无益的。 卡片应放在安全的地方,即不要放在离MCM天线较近的地方。因为当MCM在执行某些指令时,有可能无意对这一卡片进行了读/写等操作。 8(“Increment “ & “ Decrement “ & “ Restore” 增值/减值/重储 通过Mifare 1内部电路,MIFARE 1卡片能够执行“Increment “ & “ Decrement “增值/减值 操作,如果: #用合适的写指令对数据块“value block”进行了初始化; #根据KEY A 和KEY B ,允许进行“Increment “ & “ Decrement “增值/减值 操作; #“Increment “ 增值 0 操作和“ Decrement “减值0 操作是不允许的; “Increment “ 增值:加指定的值到卡片的存储器中 “ Decrement “减值:从卡片的存储器中减去指定的值 “ Restore” 重储: 执行一个“Decrement 0”(减 0)指令 上述指令的计算结果将被存储在MCM的一个内部的数据缓冲寄存器中,直达以后的指令来存取。为了将结果写到卡片上,紧接着必须执行“Transfer”指令。Transfer”指令并不改变数据缓冲寄存器中的数据值。这一操作保持数据块中的数据结构,直到数据块中的值被自动地反写及校验为止。存储的地址也被正确地传送存储到数据块中。 数据块的长度为4 字节(BYTES)。 万一数据值溢出,即数据值远大于最大的正数值 或 远小于最小的负数值时,MIFARE卡片将停止操作,并返回一个NACK代码。 9(“Transfer” 传送指令 每一个“Increment “ & “ Decrement “增值/减值 操作都必须跟随一条“Transfer” 传送指令,这样真正地将数据结果传送到卡片上去。否则,没有传送指令,数据结果仍保持在数据缓冲寄存器(value buffer register)。“Transfer” (传送) 指令的目标地址可能会相同与“Increment “ & “ Decrement “增值/减值指令时的源地址。然而,如果有了完善的后备管理软件,这样的事可能不会发生。 除了“Transfer”指令之外,其他所有的指令将改变内部数据缓冲寄存器(value buffer register)的内容。这将要求使用“Restore”指令。“Restore”指令将重建“Read“指令之后的数据缓冲寄存器(value buffer register)的内容。 如果“Transfer” (传送) 指令存取了一个新的存储器位置时,将被要求一个相同于源地址的存储条件的 目标地址。 即,对于两个内存位置,要求执行“Increment “ & “ Decrement “增值/减值指令。“Transfer” (传送) 指令自动地保持正确的数据结构,包括存储数据的地址。 10(“ Halt” 停机指令 “Halt” 停机指令将MIFARE 1卡片设置为“HALT MODE”。例如,卡片已经退出使用等。卡片将保持“HALT MODE”状态,直到被复位(例如:重新用于通信 等)。 anticollision: ANTI_REPEAT: MOV A, #10H MOV R0,#03H MOVX @R0,A ;BCNTS = 10H MOV A, #0CH SETB ACC.0 ;AC = 1 MOV R0,#01H MOVX @R0,A MOV R7,#02H ;DELAY 1000US ACALL D500US MOV A, #93H MOV R0,#00H MOVX @R0,A ;DATA = 93H (ANTICOLLISION OPERATION CODE) MOV A, #20H MOV R0,#00H MOVX @R0,A ;DATA = 20H MOV A, #28H MOV R0,#04H MOVX @R0,A ;BCNTR = 28H MOV A, #0AH MOV R0,#06H MOVX @R0,A ;TOC = 0AH ANTI_RD_STACON: MOV R0,#01H MOVX A,@R0 ;READ: STACON ==> A JNB ACC.7,ANTI_RD_STACON ;IF DV = 1? NO,IT WILL READ AGAIN ;--------------------- NOW DV=1, JUDG OTHER FLAGS--------------------- MOV A, #00H MOV R0,#06H MOVX @R0,A ;TOC = 00H JB ACC.6, ANTI_TE_ERR ;TE ERR JB ACC.3, ANTI_BE_ERR ;BE ERR ;----------------NOW NO ERRORS OCCUR,CAN READ SNR ---------------- MOV R7,#04H ;R7 IS A COUNTER,FOR READING 4-BYTE SERIAL NUMBER MOV B,#00H MOV R1,#40H MOV R0,#00H ANTI_LOOP: MOVX A,@R0 MOV @R1,A ;STORE SNR(1)--(4) IN 40H,41H,42H,43H XRL B,A ;CACULATE INC R1 DJNZ R7,ANTI_LOOP MOVX A,@R0 ;READ 5th CHK_SUM_VALUE XRL A,B ;CACULATE JNZ ANTI_CHK_ERR_EXIT ;If Z=0? If Not,CHK_SUM_VALUE ERROR ;------------------------- NOW THE SNR IS VALID ---------------------------- _OK: ;MOV B,#00H ;IF SNR OK,THEN (B) = 00H <----RETURN_VALUE MOV R1,#40H ;(40H) ==> SNR(1) MOV A,@R1 ACALL SEND_TO_BUF01 ;SEND SNR(1) TO DISP_BUF_LOW INC R1 ;(41H) ==> SNR(2) MOV A,@R1 ACALL SEND_TO_BUF23 ;SEND SNR(2) TO DISP_BUF_HIGH INC R1 ;(42H) ==> SNR(3) MOV A,@R1 ACALL H_SEND_TO_BUF01 ;SEND SNR(3) TO H_DISP_BUF_LOW INC R1 ;(43H) ==> SNR(4) MOV A,@R1 ACALL H_SEND_TO_BUF23 ;SEND SNR(4) TO H_DISP_BUF_HIGH SETB P2.6 ;OK LAMP NOW WORKING P2.3 ACALL SPK_ON ;if ok then spk on MOV B,#00H ;IF SNR OK,THEN (B) = 00H <----RETURN_VALUE AJMP ANTI_OK_EXIT ;----------------------ERROR PROCESS------------------------------- ANTI_TE_ERR: MOV B,#01H ;IF TE_ERR, THEN (B) = 01H AJMP ANTI_ERR_EXIT ANTI_BE_ERR: MOV B,#0AH ;IF BE_ERR, THEN (B) = 01H AJMP ANTI_ERR_EXIT ;------------------------------ exit process ----------------------------- ANTI_CHK_ERR_EXIT: MOV B,#08H MOV A,B ;ACALL H_SEND_TO_BUF23 ;SEND RETURN_ERR_VALUE TO DISP_BUF_HIGH ANTI_ERR_EXIT: ANTI_OK_EXIT: END
本文档为【Mifare ONE命令说明】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_105949
暂无简介~
格式:doc
大小:30KB
软件:Word
页数:12
分类:互联网
上传时间:2017-09-27
浏览量:109