电子信息网-电子电器电气站
电子信息网
电子系统 显示光电 接口电路 存储器 无线通信 电子控制 EDA/PLD 单片机 DSP技术 模拟技术 通信网络 电测仪表 视频音频 芯片应用 电子通信 IC电子 电子设计 自控测量 IC嵌入式 IC系统 EDA系统 通信网络 传感控制 电源技术 单片机技术 显示光电 接口电路 无线通信 消费电子 DSP产品 元件工艺 电测仪表 模拟技术 存储器设备 设计应用 智能网应用 集成电路 电子电源 IC智能设计 PLD系统 电子传感
>>首 页->电子信息网->Mifare 1非接触式IC卡读写核心模块MCM200->正 文 
[电子信息]:Mifare 1非接触式IC卡读写核心模块MCM200

    摘要:介绍了Philips公司的Mifare 1非接触IC卡读写器芯片MCM200的主要特性、引脚功能、内部的物理功能寄存器和基本指令集。重点介绍了Mifare 1非接触IC卡和MCM200数据通信的一些重要模块的编程思路和编程方法,给出了两个编程实例。

    关键词:非接触IC卡 MCM200 读写器

Mifare 1 IC智能(射频)卡的核心是Philips 公司的Mifare 1 IC S50(-01,-02,-03,-04)系列微模块(微晶片)。其相应的读写器模块为Philips公司的MCM200和MCM500。其中,MCM200模块主要应用于操作距离在 25mm的卡片读写器中;MCM500模块主要应用于操作距离在100mm的卡片读写器中。1 MCM200模块的主要特性

MCM200读写器模块的主要特性如下:

●采用标准的双列直插式32引脚封装

●工作频率为13.56MHz,采用标准的+5V电源供电,典型电流消耗为40mA;

●读写卡片距离可达25mm以上;

●与卡片的通信速率可达106kbps;

●每个扇区均包含有3套密码,同时包含有认证密码用的存储器;

●有防卡片重叠功能;

●带有16字节的FIFO(先进先出)队列接收/发送缓冲寄存器;

●在模块与卡片通信时可自动侦查错误,对数据流可自动分析;

●可对RF(射频)通道进行自动监控;

●有内建8位/16位CRC协处理器,可提供CRC、PARITY等数据校验;

●支持多种方式的活动天线,并且不需天线调节系统即可对天线进行补偿调节;

●带有标准的Mifare 并行接口可直接由标准的MCU接口信号控制。

2 MCM200模块的引脚说明

MCM200的引脚排列如图1所示。各引脚的功能如下:

D0~D7:8位双向数据总线;

A0~A3:4位地址线;

BP:后备电池输入端,用于保护MCM内部密码RAM;

NPAUSE1:串行数据输出,用于驱动RF单元,该引脚必须连到RF单元的TP端。

NWR:写信号使能端;

NRD:读信号使能端;

NCS:该脚为低电平时选中MCM;

KOMP1:RF的比较器输入端,使用时必须连到RF单元的RX端;

NIRQ:MCU数据处理控制端。当该端为低时,MCU将用MCM状态寄存器中的内容来对MCM中的数据进行处理;

ALE:地址锁存使能端;

USEALE:选择从内部地址锁存器或A0~A3引脚取地址;

DGND:数字电路接地端;

DVDD:+5V电源端。

MODE:并行协议模式选择引脚,可用高电平驱动。

AVDD:+5V模拟电源输入引脚,用于RF射频单元;

AGND:RF射频单元(模拟电路)接地端;

NANT、ANT:天线连接端。

3 MCM200内部特殊功能寄存器

MCM200器件内部共有16个特殊功能寄存器,表1所列是这16种特殊功能寄存器的地址和读写情况。实际上,MCU主要通过对MCM寄存器的读写来控制MCM的工作。MCM是MCU与非接触式IC卡之间进行信息交换的接口,系统对卡片上的数据进行任何读写均须通过MCM 来传递。

表1 MCU200中的物理功能寄存器

寄存器名 地  址 读(READ) 写(WRITE)
DATA 00H READ-BYTE WRITE-BYTE
STACON 01H DV TE PE CE BE AE - - - - SOR RFS - - - - 1 1 NRF AC
ENABLE 02H N/A 1 PR CE CR - - - - - - - -
BCNTS 03H N/A BIT-COUNT-SEND
BCNTR 04H N/A BIT-COUNT-RECEIVE
BAUDRATE 05H N/A - - - - - - - - 1 1 1 BR
TOC 06H N/A TIMEOUT-COUNTER
MODE 07H N/A 1 1 0 0 0 P2 P1 P0 P0
CRCDATA 08H CRC-BYTE-READ CRC-BYTE-WRITE
CRCSTACON 09H CV - - - - - - - - - - - - CZ C8 - - - - - - - - - - - - CR
KEYDATA 0AH N/A KEY-BYTE-WRITE
KEYSTACON 0BH - - - - - - - - - - - - - - - - AL 0 - - - - - - - - KS1 KS0
KEYADDR 0CH N/A AL AB A5 A4 A3 A2 A1 A0
  0DH    
RCODE 0EH N/A - - - - - - - - 0 0 RC1 RC0

表2 MCM2000的基本指令集

指    令 指令代码(hex) 相关的出错标志 接收卡片上数据
Answer to Request(Request的应答)   TE,BE Tagtype
Request std 26
Request all 52
AntiCollision(防重叠) 93 TE,BE Serial Number
Select Tag(选卡片) 93 TE,BE,PE,CE Size
Authentication(认证)   TE,BE,PE,CE /
Auth-1a 60
Auth-1b 61
Load KEY(存取密码) / AE  
Read(读) 30 TE,BE,PE,CE Data
Write(写) A0 TE,BE /
Increment(增值) C1 TE,BE /
Decrement(减值) C0 TE,BE /
Restore(重储) C2 TE,BE /
Transfer(传送) B0 TE,BE /
Halt(停机) 50 TE,BE /

4 MCM200的指令和软件设计

MCU通过特殊指令来启动MCM200并运行,同时将这些指令传输到Mifare 1卡片上。MCM200的基本指令集如表2所列。Mifare 1 IC卡与MCM200之间的通信使用握手式半双工通信协议,卡片带有高速CRC协处理器,符合CCITT标准。卡片的ROM中固化了其运行所需的必要程序指令,它能使卡片有条不紊地与卡片读写器进行数据通信。但MCU对MCM200的指令操作通常不是简单的一条指令,而是用一个程序序列来完成,其中包括对MCM200硬件内核寄存器的设置。MCM对IC卡的操作流程如图2所示。现将其中各主要子程序模块的编程方法作以说明。

    4.1 Request操作子程序

Request 指令用于通知MCM200在天线有效的工作距离内寻找Mifare 1卡片。如果 Mifare 1卡片存在,就和Mifare 1通信,并读取卡片类型号TAGTYPE(2个字节),然后由MCU根据TAGTYPE区别不同类型的卡片。Request 指令分为Request std指令和Re-quest all指令。Request std指令是连续性的读卡指令。Request all指令是非连续性的读卡指令,只读一次。Request all指令在成功地读取一张卡片之后,会一直等待使用者拿走这一张卡片,直到有新一张卡片进入MCM的天线有效工作范围之内。Request操作的汇编语言程序如下:

Request: MOV A,#0CH ;设置MCM中的STACON 寄存器为0CH

MOV R0,#01H

MOVX @R0,A

MOV A,#0EH ;设置MCM中的BAU-DRATE寄存器为0EH

MOV R0,#05H

MOVX @R0,A

MOV A,#0C0H ;设置MCM中的ENABLE寄存器为0C0H

MOV R0,#02H

MOVX @R0,A

MOV A,#0C6H ;设置MCM中的MODE寄存器为0C6H

MOV R0#07H

MOVX @R0A

MOV A#02H ;设置MCM中的RCODE

寄存器为02H

MOV R0#0EH

MOVX @R0A

MOV A#07H ;设置MCM中的BCNTS

寄存器为07H

MOV R0#03H

MOVX @R0A

MOV A#10H ;设置MCM中的BCNTR

寄存器为10H

MOV R0#04H

MOVX @R0A

JB F0, RSTD ;根据F0标志判断是执

行Request std操作还是

Request all操作

REQALL MOV A#52H ;Request all指令代码→A

AJMP RQTMCM

RSTD: MOV A#26H ;Request std 指令代码→A

RQTMCMMOV R0#00H

MOVX @R0A ;Request all指令或Request

std 指令写入DATA

MOV A #0AH TOC = 0AH

MOV R0#06H

MOVX @R0A

MOV R0#01H ;读STACON状态

MOVX A@R0

JNB ACC.7RD STACON  TAGTYPE没

有到FIFO(DV=0)重新读STACON状态

MOV R7,A  stacon值暂存在R7中

MOV A, #00H TOC=00H

MOV R0,#06H

MOVX @R0,A

MOV A,R7 ; 取暂存在R7中stacon值到A

JB ACC.6TE_ERR ; 定时计数器溢出错转TE_ERR

JB ACC.3,BE_ERR ; 位计数器错转BE_ERR

MOV R0,#00H  ;读卡片的卡片类型号TAGTYPE 0存入45H单元

MOVX A,@R0

MOV 45HA

MOV R0,#00H

MOVX A,@R0 ;读卡片上的卡片类型号TAGTYPE1存入46H单元

MOV 46H,A

RET ; RET

TE_ERR: ;“TE” 错误处理

RET

BE_ERR: ; “BE”错误处理

RET

4.2 “AntiCollision”防卡片重叠 操作子程序

如果有多张Mifare 1卡片处在卡片读写器的天线工作范围之内,AntiCollision指令将启动AntiColli-sion模块的防重叠功能,同时MCM200将有序地读所有处在其天线有效工作距离内的Mifare 1卡片的40bit长的序列号SN。MCU接收到这5个字节的SN后,会进行校验。其校验、计算卡片序列号的方法是:采用相邻两个字节相互异或得出的结果与下一个字节再异或,前四个字节异或的结果与第5个字节应该相同,否则认为MCU读到的卡片的序列号有错,因此卡片的序列号的前四个字节是有意义的,第5个字节仅仅用于校验之用。这五个字节被存储在IC卡片的第0扇区的第0块中,它由卡片的生产商制定并固化,不得更改,所以在市面上流通的Mifare 1 S50系列的非接触式IC射频卡中,每一张卡片的序列号都是唯一的。“AntiCollision”防卡片重叠 操作子程序清单如下:

anti NOP

MOV A #10H BCNTS = 10H,控制

MCU向DATA寄存器

发送 2个字节数据

MOV R0#03H

MOVX @R0A

MOV A #0CH ;设置MCM中的

STACON寄存器

SETB ACC.0 AC =“1”,启动防重

叠状态机

MOV R0#01H

MOVX @R0A

ACALL D1000US DELAY 1000US

MOV A #93H ;AntiCollision防卡片

重叠指令码写入DATA

MOV R0#00H

MOVX @R0A

MOV A #20H

MOV R0#00H

MOVX @R0A

MOV A #28H

MOV R0#04H

MOVX @R0A BCNTR = 28H ,接

收5个字节的数据

MOV A #0AH

MOV R0#06H

MOVX @R0A TOC = 0AH

MOV R0#01H

AGAIN: MOVX A@R0  读STACON状态

JNB ACC.7 AGAIN 如果 DV=“0”重

读STACON

MOV R7,A

MOV A #00H

MOV R0#06H

MOVX @R0A TOC = 00H

MOV A,R7

JB ACC.6 TE ERR  定时计数器溢出

错转TE ERR

JB ACC.3 BE ERR 位计数器错转

BE ERR

MOV R7#04H 读4个字节的SN值

存入40H~43H单元,

前四个字节进行异或

MOV B#00H

MOV R1#40H

MOV R0#00H

LOOP MOVX A@R0

MOV @R1A 存SN的前四个字节在

单片机内部RAM的

40H41H42H43H单元

XRL BA 相邻字节相互异或

INC R1

DJNZ R7 LOOP

MOVX A@R0 前四个字节异或的结

果和接收的第5个字

节进行比较,若不等则

XRL AB 转错误处理

JNZ ANTIERR

RET

TE ERR

RET

BE ERR

RET

ANTIERR:

RET

4.3 “Select”选卡片 操作子程序

该程序用于MCM200与卡片的真正联络。选择一张卡片通常由MCU向MCM200发送“SELECT”命令来完成。MCU发送“SELECT”命令后,会同时在“AntiCollision” 操作中得到Mifare 1卡片的40bit长的序列号的前四个字节以及前四个字节的异或结果,同时再重新发送给Mifare 1卡,只有本身的序列号和接收的序列号相同的卡片才被真正地选中。Select指令成功执行后,MCU将得到MCM DATA寄存器传来的一个字节长的卡片容量信息(SIZE字节)。SIZE字节被存储在Mifare 1卡片上的第00H扇区中的第00h 块中。

4.4 “Authentication”认证操作子程序

Mifare 1卡的每个扇区的块3包含该扇区的密码A6个字节、存取控制4个字节、密码B6个字节,它是一个特殊的块。在确认了上述三个步骤后,就表示已经选择了一张卡片,在对卡片进行读写操作之前,还必须对卡片上已经设置的密码进行认证,如果匹配,则允许进一步的Read/Write操作。也可以通过选择存储在MCM的RAM密码集中的一组密码来进行认证操作。MCM能够存储3个密码集KEYSET0、KEYSET1和KEYSET2。每一个KEYSET又包含了KEYA及KEYB 等。在"Authentication"指令发出之前,必须设置密码控制寄存器KEYSTACON,使AL=1,然后设置KS0和KS1以指定一套密码集。同时,还必须设置密码地址寄存器KEYADDR,当AB为“1”时,选择KEYA,AB为“0”时选择KEYB,A5~A0用于选择MCM-RAM中存放密码的扇区地址(0~63), KEYADDR寄存器中的“AB”设置必须匹配"Authentication"命令,因为在"Authentication"命令中,60h代码用于认证KEYA;61h代码用于认证KEYB。正确地设置KEYSTACON 和KEYADDR寄存器之后,通过写"Authentication" 认证命令代码和写“地址”(Mifare 1卡要认证的扇区地址是0~15)到DATA寄存器认证密码操作的模块便开始启动执行。如果三遍认证的每一个环都为“真”,且都能正确通过验证,则整个认证成功。这时读写器即可对刚刚认证通过的卡片上的这个扇区进行下一步READ/WRITE 等操作。

4.5 “Read"或“Write"操作子程序

Read指令允许MCU通过MCM来读取Mifare 1卡片上完整的16个Bytes的数据块。Read指令操作只能一个块(Block)一个块地读,即一次只能读取16个字节。如果只要求读取某Block中的几个字节的数据,也只能一个整块16个字节一起读取,再由程序员选取指定的字节。从卡片上读到的数据必须由MCU进行校验,以确保数据的有效。

“Write” 写指令允许用户写数据到MIFARE卡片上(完整的16 个BYTEs的数据块)。只有在“Authentication” 认证指令完成后,才允许对数据扇区或数据块进行“Write”写指令操作。写入的数据块的数据结构如下:

15 14 13 12 11 10 9 8
address address address address V A L UE
7 6 5 4 3 2 1 0
V A L UE V A L UE

通过一个写操作可将存储的数据在每一个block块中写3次并反写1次,从而完成数据块的初始化。块的地址必须写4次,其中2次为反向写入。正/负数据值将以标准的二进制补码格式来表示。

4.6 “Increment”或 “Decrement”增值或减值子程序

通过Mifare 1内部电路能够执行“Increment” &“Decrement”增值/减值操作,在根据KEY A 和KEY B 进行“Increment”&“Decrement”增值/减值操作时; “Increment”增值表示将指定的值加到卡片的存储器中;“Decrement”减值则表示从卡片的存储器中减去指定的值。每一个“Increment”& “Decrement”增值/减值操作都必须跟随一条“Transfer” 传送指令,这样才能真正地将数据结果传送到卡片上。如果没有传送指令,数据结果仍将保持在数据缓冲寄存器中。



◆ 相关电子资料:Mifare 1非接触式IC卡读写核心模块MCM200...
◆ 更多电子资料:Mifare 1非接触式IC卡读写核心模块MCM200...
·Google:"Mifare 1非接触式IC卡读写核心模块MCM200电子资料信息"
·Baidu:"Mifare 1非接触式IC卡读写核心模块MCM200电子资料信息"
·Sogou:"Mifare 1非接触式IC卡读写核心模块MCM200电子资料信息"
·Zhongsou:"Mifare 1非接触式IC卡读写核心模块MCM200电子资料信息"

网站简介 |  网站导航 |  广告服务 |  联系我们 |  诚聘英才 |  意见反馈 |  版权声明 |  友情链接
Copyright (C) 2003 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
 电子信息网-电子电器电气站 www.ELEcn.net