MIFARE技术资料: 关于非接触式IC智能(射频)卡 及其读写设备内核技术的研究与应用开发
前 言
当今的信息技术又到了一个关键的十字路口。单独的PC甚至局域网的时代已为"全球化网络"时代所代替。互联网INTERNET的产生和今天的飞速发展和广泛渗透就是典范。
IC(集成电路)智能卡正在并已经融入当今信息技术的主流。她以其高度的信息集成,高度的安全性,正日渐其辉煌和灿烂。
随着金融行业的不断发展,社会经济的日新月异,特别是公共交通行业,无线通信领域,卫生保健行业,封闭式场所管理,身份识别,电话通信,大楼保安系统等等,人们已愈来愈多地开始接受和使用IC智能卡。特别是银行服务系统,IC智能卡替代古老的磁卡而服务于大众已日渐成熟。并且"一卡通",一卡多用,给我们的生活质量带来了很大的提高。IC智能卡自动电表抄表系统,煤气/自来水抄表系统,公交/地铁自动售票/检票系统,移动通信手机中IC 智能SIM卡等等,IC智能卡已愈来愈贴近我们的生活,成为我们生活的一步分。"刷卡"已成为人们日常生活中不可或缺的一部分。
近几年来,随着IC智能卡中的接触式CPU 卡以及非接触式IC智能射频卡(内建MCU,ASIC等)的高度安全保密性,使之在IC智能卡领域中异军突起,成为当今IC智能卡中的流行宠物,应用前景十分广阔。
国外对IC卡的研究和应用较早,特别是在美国,欧洲国家等。IC卡遍布社会各个方方面面。就象在美国,国民消费总额的20 %~~30 %是由"刷卡"消费完成的,由此可见IC智能卡流行和使用的程度。
尽管国外对IC卡已有多年的研究,但真正在IC智能卡中特别是CPU卡类, 非接触式IC智能射频卡(内建MCU,ASIC等)方面的研究也仅有1~~2年的成熟期。因为他们也看到了CPU 卡,特别是非接触式IC智能射频卡(内建MCU,ASIC等)代表了整个"刷卡"领域的发展方向,前景光明。
我国对IC卡行业的发展始于1993年左右,当时的中央领导特别是江泽民同志高度重视IC卡行业,高瞻远瞩,指示要发展我国自己的IC卡事业,建立"金卡工程"。虽然至今也只有短短的6年左右时间,但已取得了不小的成就。已研制成功我国自主版权的较大容量的存储卡,逻辑加密卡等,但是对于尖端的CPU卡及非接触式IC智能射频卡(内建MCU,ASIC等)的制卡技术及其相应的读/写卡设备技术,仍处于落后状态。这极大地制约了IC卡行业的发展,特别是在要求有极高安全性和保密性的金融行业中,制约了我国金卡工程的实施和发展。
为了加快IC卡行业的发展,特别是尖端的CPU卡及非接触式IC智能射频卡(内建MCU,ASIC等)的推广应用,让IC卡行业及其他行业的同行尽快掌握CPU卡及非接触式IC智能射频卡(内建MCU,ASIC等)的核心技术及其读写设备的软硬件技术及应用设计,跟上国外的IC卡研究和应用步伐,甚至走在其前面,在上海华东计算机研究所,上海计算机协会等领导同志的关怀下,在上海华东磁记录设备电子公司吴文总经理的直接支持下,经过一段时间全身心投入的研发之后,笔者已基本上比较全面地掌握了PHILIPS公司的非接触式IC智能射频卡(内建MCU,ASIC等)MIFARE 1卡(S50系列)及其卡片读写设备核心模块MCM(Mifare Core Module )的软硬件技术。使我们发展,应用,甚至超越PHILIPS公司的非接触式IC智能射频卡(内建MCU,ASIC等)技术及其读写设备技术成为可能。
当今世界上非接触式IC智能射频卡(内建MCU,ASIC等)中的主流主要为PHILIPS公司的MIFARE技术,已经被制定为国际标准:ISO/IEC 14443 TYPE A标准 。欧洲一些较大的IC卡片制造商以及IC卡片读写器制造商以及IC卡片软件设计公司等(例如法国的GEMPLUS公司)大都以MIFARE技术为标准,而发展和推进IC卡行业。
通过阅读本文,相信有一定IC卡经验,技术及具有一定的计算机软/硬件技术(尤其是微处理单片机MCU技术)的同行定能将本文消化之后而能设计出诸多应用场合的产品,例如,门禁控制系统(Door Access System),高速公路不停车收费系统,停车场收费管理系统,地铁非接触式IC智能射频卡的"刷卡"读写器,机关/企业内部考勤管理系统,医疗保险管理系统,公共交通收费管理系统,出租车收费管理系统,银行服务"一卡通"等等。
第一章Mifare 1 非接触式IC智能(射频)卡
一. Mifare 1非接触式IC智能射频卡特点
Mifare 1 IC智能(射频)卡的核心是Philips 公司的Mifare 1 IC S50 (-01,-02,-03,-04)系列微模块(微晶片)。它确定了卡片的特性以及卡片读写器的诸多性能。
Mifare 1 IC智能(射频)卡采用先进的芯片制造工艺制作。内建有高速的CMOS EEPROM,MCU等。卡片上除了IC微晶片及一副高效率天线外,无任何其他元件。
卡片上无源(无任何电池),工作时的电源能量由卡片读写器天线发送无线电载波信号耦合到卡片上天线而产生电能,一般可达2V以上,供卡片上IC工作。工作频率 13.56MHZ。
Mifare 1射频卡所具有的独特的MIFARE RF(射频)非接触式接口标准已被制定为国际标准:ISO/IEC 14443 TYPE A 标准。
射频卡标准操作距离为100mm(由MCM500 作为读写器核心模块)和25 mm (由MCM200 作为读写器核心模块)。与卡片读写器的通信速率高达106Kbit/s。
Mifare 1IC智能(射频)卡上具有先进的数据通信加密并双向验证密码系统;且具有防重叠功能:能在同一时间处理重叠在卡片读写器天线的有效工作距离内的多张重叠的卡片。
Mifare 1IC智能(射频)卡与读写器通信使用握手式半双工通信协议;卡片上有高速的CRC协处理器,符合CCITT标准。
卡片制造时具有唯一的卡片系列号,没有重复的相同的两张MIFARE 卡片。
卡片上内建8K(bit) EEPROM存储容量并划分为16个扇区,每个扇区划分为4个数据存储块,每个扇区可由多种方式的密码管理。
卡片上还内建有增值/减值的专项的数学运算电路,非常适合公交/地铁等行业的检票/收费系统。典型的检票交易时间最长不超过100ms(0 .1秒)(包括卡片的认证,6个扇区的读(768bit,2个扇区的认证),2个扇区的写操作(256bit))。
卡片上的数据读写可超过10万次以上;数据保存期可达10年以上,且卡片抗静电保护能力达2KV以上。
二. Mifare 1非接触式IC智能射频卡功能组成
如图所示为MIFARE 1 S50非接触式IC智能射频卡的功能组成图。

(一). RF射频接口电路
在RF射频接口电路中,主要包括有波形转换模块。它可将卡片读写器上的13.56MHZ的无线电调制频率接收,一方面送调制/解调模块,另一方面进行波形转换,将正弦波转换为方波,然后对其整流滤波,由电压调节模块对电压进行进一步的处理,包括稳压等,最终输出供给卡片上的各电路。
POR模块主要是对卡片上的各个电路进行POWER-ON -RESET(上电复位),使各电路同步启动工作。
(二). 在数字电路部分模块中:
1. ATR模块:Answer to Request("请求之应答")
当一张Mifare 1卡片处在卡片读写器的天线的工作范围之内时,程序员控制读写器向卡片发出REQUEST all(或REQUEST std) 命令后,卡片的ATR将启动,将卡片Block 0 中的卡片类型(TagType )号共2个字节传送给读写器,建立卡片与读写器的第一步通信联络。
如果不进行第一步的ATR工作,读写器对卡片的其他操作(Read/Write等)将不会进行。
class="L30"卡片的类型(TagType )号共2个字节,可能为:0004H
2.AntiCollision模块:防止(卡片)重叠功能
如果有多张Mifare 1 卡片处在卡片读写器的天线的工作范围之内时, AntiCollision 模块的防重叠功能将被启动工作。 在程序员控制下的卡片读写器将会首先与每一张卡片进行通信,取得每一张卡片的系列号。由于Mifare 1 卡片每一张都具有其唯一的系列号, 决不会相同,因此卡片读写器根据卡片的序列号来识别,区分已选的卡片, 卡片读写器中的MCM中的AntiCollision防重叠功能配合卡片上的防重叠功能模块,由程序员来控制读写器,根据卡片的序列号来选定一张卡片。 被选中的卡片将直接与读写器进行数据交换,未被选择的卡片处于等待状态,随时准备与卡片读写器进行通信。
AntiCollision模块(防重叠功能)启动工作时,卡片读写器将得到卡片的序列号Serial Number。序列号Serial Number存储在卡片的Block 0 中,共有5个字节,实际有用的为4个字节,另一个字节为序列号Serial Number的校验字节,这在以后章节中详细论述,包括对序列号Serial Number的校验方法等。
序列号Serial Number中实际有用的4个字节,可能为:007e0a42h 。
3.Select Application 模块:主要用于卡片的选择。
当卡片与读写器完成了上述的二个步骤,程序员控制的读写器要想对卡片进行读写操
作,必须对卡片进行"Select" 操作。以使卡片真正地被选中。
被选中的卡片将卡片上存储在Block 0中的卡片的容量"Size " 字节传送给读写器。 当读写器收到这一字节后,将明确可以对卡片进行深一步的操作了。 例如,可以进行密码验证等等。
读写器收到的"Size " 字节可能为:88h
4. Authentication & Access Control 模块: 认证及存取控制模块
在确认了上述的三个步骤,确认已经选择了一张卡片时,程序员对卡片进行读写操作之前,必须对卡片上已经设置的密码进行认证,如果匹配,则允许进一步的Read/Write操作。
Mifare 1 卡片上有16个扇区,每个扇区都可分别设置各自的密码,互不干涉。因此每个扇区可独立地应用于一个应用场合。整个卡片可以设计成"一卡通"形式来应用。
三遍认证:
如图所示为三遍认证的令牌原理框图。
认证过程是这样进行的:
(A)环 :由Mifare 1卡片 向读写器 发送一个随机数据 Rndom B;
(B)环 :由读写器收到RB后向Mifare 1卡片发送一个令牌数据TOKEN AB,其中包含了读写器发出的一个随机数据 Rndom A;
(C)环 :Mifare 1卡片收到 TOKEN AB 后,对TOKEN AB 的加密的部分进行解密,并校验第一次由(A)环中Mifare 1卡片 发出去的随机数RB是否与(B)环中接收到的TOKEN AB中的RB相一致;
(D)环 :如果(C)环校验是正确的,则Mifare 1卡片 向读写器 发送令牌TOKEN BA给读写器;
(E)环 :读写器 收到令牌TOKEN BA后,读写器将对令牌TOKEN BA中的RB(随机数)进行解密;并校验第一次由(B)环中读写器发出去的随机数RA是否与(D)环中接收到 的TOKEN BA中的RA相一致;
如果上述的每一个环都为"真",都能正确通过验证,则整个的认证过程将成功。读写器将能对刚刚认证通过的卡片上的这个扇区可以进入下一步的操作(READ/WRITE 等操作)。
卡片中的其他扇区由于有其各自的密码,因此不能对其进行进一步的操作。如想对其他扇区进行操作,必须完成上述的认证过程。
认证过程中的任何一环出现差错,整个认证将告失败。必须从新开始。
如果事先不知卡片上的密码,则由于密码的变化可以极其复杂,因此靠猜测密码而想打开卡片上的一个扇区的可能性几乎为零。
这里提醒一下程序员和卡片的使用者,必须牢记卡片中的16个扇区的每一个密码,否则,遗忘某一扇区的密码,将使该扇区中的数据不能读写。没有任何办法可以挽救这种低级错误。但是,卡片上的其他扇区可以照样使用。
上述的叙述已经可以充分地说明了Mifare 1 卡片的高度安全性,保密性,及卡片的应用场合多样性,一卡多用(一卡通)。
5.Control & Arithmetic Unit 控制及算术运算单元:
这一单元是整个卡片的控制中心,是卡片的"头脑"。它主要进行对整个卡片的各个单位进行微操作控制,协调卡片的各个步骤;同时它还对各种收/发的数据进行算术运算处理,递增/递减处理,CRC运算处理,等等。是卡片中内建的中央微处理机(MCU)单元。
6. RAM/ROM 单元:
RAM主要配合控制及算术运算单元,将运算的结果进行暂时存储,如果某些数据需要存储到EEPROM,则由控制及算术运算单元取出送到EEPROM存储器中;如果某些数据需要传送给读写器,则由控制及算术运算单元取出,经过RF射频接口电路的处理,通过卡片上的天线传送给卡片读写器。RAM中的数据在卡片失掉电源后(卡片离开读写器天线的有效工作范围内)将被清除。
同时,ROM中还固化了卡片运行所需要的必要的程序指令,由控制及算术运算单元取出去对每个单元进行微指令控制。使卡片能有条不紊地与卡片的读写器进行数据通信。
7. Crypto Unit 数据加密单元:
该单元完成对数据的加密处理及密码保护。加密的算法可以为DES标准算法或其他。
8. EEPROM INTERFACE/EEPROM MEMORY EEPROM存储器及其接口电路:
该单元主要用于存储数据。EEPROM中的数据在卡片失掉电源后(卡片离开读写器天线的有效工作范围内)仍将被保持。用户所要存储的数据被存放在该单元中。Mifare 1卡片中的这一单元容量为8196bit(1 Kbyte )。分为16个扇区。
三.Mifare 1 IC智能(射频)卡的物理组成及卡片上天线的研究
在卡片上的微晶片外面一般封装了保护层。保护层可以防止微晶片被折叠,扭曲等众多对卡片实施非正常的物理性损坏。同时也防止微晶片受到紫外线的辐射,使卡片能长久地被使用。
但从电性能的角度来看,由于加入了保护层,使IC与卡片上的天线组成的振荡回路的频率将发生变化。因为,保护层给IC微晶片增加了一个输入回路电容Cmount。尽管这个电容只有几个pf 至几十个pf,但对于要求频率精度,稳定度等都很高的非接触式IC智能射频卡来说,也将是很重要的。
Mifare 1 IC智能(射频)卡
卡片上的等效电路如下:
(不带IC微晶片的天线 ) (IC 微晶片)
整个卡片的自由振荡频率计算方法:
/p>
说明:
fres :卡片的振荡频率,应为13.56MHz
Rcoil :天线线圈的电阻,约6.07欧娒
Lcoil :天线线圈的电感,约 3.6 μH
Ccoil :天线线圈的电容,约 5pf
Cpack :天线线圈的封装后引入的电容, 约 5pf
Cic :IC微晶片的电容,约 16pf
Cmount :IC微晶片的安装后引入的电容, 约 几个pf ~ 几十个pf
La :天线线圈与IC微晶片的接触点a
Lb :天线线圈与IC微晶片的接触点b
其中,
天线线圈的电感:
Lcoil[nH] = 2 * L [cm] * ( ln ( L [mm] / D [mm] – 1.04 ) * N p
L : 天线线圈一圈的长度
N :天线线圈圈数,一般为4圈
D :天线线圈直径或导体的宽度
P :由天线线圈的技术而定的N的指数因子,如下表所示:
P值: | 天线线圈结构: |
1.8 | 环绕线圈 |
1.7 | Etched(蚀刻)线圈 |
1.5 ~~ 1.7 | 印刷电路板线圈 |
上述天线线圈的电感的公式只能作为首次估测之用,实际的天线线圈的电感必须通过仪器测量而定,但偏差不会很大。
一般 天线线圈的电感 :Lcoil < 4.2μH, 实际中推荐在 3.6μH 左右为最优。
天线线圈的品质因数 Qcoil :
一般天线线圈的品质因数 30 < Qcoil < 60 。
实际中,品质因数 Qcoil在>30后的增加量, 对卡片的操作距离的增加无明显帮助;品质因数 Qcoil必须 < 60 ,以确保数据通信稳定,可靠,否则天线的有效工作距离内有死区,而不能可靠地进行数据通信。
天线线圈的矩形面积S总:
S总 必须 > 11200 mm2 S总 = S 平均 *N圈
所以 S 平均 必须 > 11200 mm2 / N 圈
一般,S 平均 >= 2778 mm2 (当卡片上的天线线圈的矩形面积的 长 X宽 =40mm X70 mm时)。
实际中,推荐 S >平均 在 3330 mm2左右。即,实际设计时,卡片上的天线线圈的矩形面积的长和宽应为:74mm 和45mm, 天线线圈的圈数N为4圈, 则这样制作出的卡片将能保证通信的距离。
四.Mifare 1卡片的存储结构
Mifare 1卡片的存储容量为8192 BIT X 1位字长(即1K X8位字长),采用EEPROM作为存储介质,整个结构划分为16个扇区,编为扇区0 ~~ 15。每个扇区有4个块(Block),分别为块0 ,块1,块2和块3。每个块有16个字节。一个扇区共有 16 Byte X 4 = 64 Byte 。如下图:
每个扇区的块3(即第四块) 包含了该扇区的密码A(6个字节)、存取控制(4个字节)、密码B(6个字节),是一个特殊的块。其余三个块是一般的数据块。
但扇区0的块0是特殊的,是厂商代码,已固化,不可改写。
其中:
第0 ~4个字节为卡片的序列号,第5个字节为序列号的校验码;
第6个字节为卡片的容量"SIZE"字节;
第7,8个字节为卡片的类型号字节,即Tagtype字节;
其他字节由厂商另加定义。
Mifare 1 卡片的扇区0中的块0 (Block 0 )存储的16个字节的内容可能为:420a7e00368804004481740630373937h。
下面将对密码A,密码B,存取控制与数据区的关系加以说明:
存取控制的结构如下:(四个字节中的各位依次命名为)
位: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
C2X3_b | C2X2_b | C2X1_b | C2X0 _b | C1X3_b | C1X2_b | C1X1_b | C1X0 _b | |
C1X3 | C1X2 | C1X1 | C1X0 | C3X3_b | C3X2_b | C3X1_b | C3X0 _b | |
C3X3 | C3X2 | C3X1 | C3X0 | C2X3 | C2X2 | C2X1 | C2X0 | |
BX7 | BX6 | BX5 | BX4 | BX3 | BX2 | BX1 | BX0 |
_b 表示取反,如C2X3_b 即C2X3取反;X表示扇区号;Y表示第几块;C表示控制位;B表示备用位;
存取控制对块3的控制如下:(X=0 -15)
密码A | 密码A | 存取控制 | 存取控制 | 密码B | 密码B | |||
C1X3 | C2X3 | C3X3 | read | Write | read | write | read | write |
0 | 0 | 0 | never | KEYA|B | KEYA|B | never | KEYA|B | KEYA|B |
0 | 1 | 0 | never | Never | KEYA|B | never | KEYA|B | never |
1 | 0 | 0 | never | KEYB | KEYA|B | never | never | KEYB |
1 | 1 | 0 | never | Never | KEYA|B | never | never | never |
0 | 0 | 1 | never | KEYA|B | KEYA|B | KEYA|B | KEYA|B | KEYA|B |
0 | 1 | 1 | never | KEYB | KEYA|B | KEYB | never | KEYB |
1 | 0 | 1 | never | Never | KEYA|B | KEYB | never | never |
1 | 1 | 1 | never | Never | KEYA|B | never | never | never |
KEYA|B 表示密码A或密码B;never表示没有条件实现。
对数据块的控制如下表:
(X=0 -15扇区、Y=每个扇区的0 -2块)
C1XY | C2XY | C3XY | Read | Write | Increment | Decr,Transfer,restore |
0 | 0 | 0 | KEYA|B | KEYA|B | KEYA|B | KEYA|B |
0 | 1 | 0 | KEYA|B | never | never | never |
1 | 0 | 0 | KEYA|B | KEYB | never | never |
1 | 1 | 0 | KEYA|B | KEYB | KEYB | KEYA|B |
0 | 0 | 1 | KEYA|B | never | never | KEYA|B |
0 | 1 | 1 | KEYB | KEYB | never | never |
1 | 0 | 1 | KEYB | never | never | never |
1 | 1 | 1 | Never | never | never | never |
块3的初始化值为:a0 ,a1,a2,a3,a4,a5,ff,07,80 ,69,b0 ,b1,b2,b3,b4,b5共16个字节,其中 KEYA是{a0 ,a1,a2,a3,a4,a5},KEYB是{b0 ,b1,b2,b3,b4,b5},控制存取的四个字节为{0xff,0x07,0x80 ,0x69}。
存取控制位表示如下(请用户去对照上表以确定初始化状态):
位: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Ffh | |
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 07h | |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 80h | |
0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 69h |
程序员可以根据自已应用的具体情况,对不同的扇区可选用不用的存取控制,不同的密码,但应注意其每一位的格式,以免误用!
数据块有两种应用方法,一种是用作一般的数据保存用,直接读写。另一种用法是用作数值块,可以进行初始化值、加值、减值、读值的运算。系统配用相应的函数完成相应的功能。
MCM 内核技术说明
第二章MCM的硬件内核电路
一.MCM200 /MCM500读写模块说明
Mifare Core Module是MCM的全称,意为Mifare 核心模块。
Philips公司的MCM 主要有两种产品型号,为MCM200和MCM500 。这两种智能模块均被用于读写Mifare 1非接触式IC智能射频卡的读写器中,负责读写器中对非接触式IC智能射频卡片的读写等功能,一般在读写器中还必须有MCU(微处理单片机)来对MCM进行控制,及对读写器的其他方面进行控制,例如对键盘,显示,通信等部分的控制等等。
MCM200模块主要应用于对卡片操作距离在 25mm的卡片读写器中;
MCM500模块主要应用于对卡片操作距离在100mm的卡片读写器中。
Mifare所具有的独特的MIFARE RF(射频)非接触式接口标准已被制定为国际标准:ISO/IEC 14443 TYPE A 标准。
(一)。 MCM200模块说明
A.特性:
1.标准的双列直插32引脚
2.工作频率:13.56MHZ
3.标准的+5V 电源供电,供电范围4.75V至5.25V
4.(典型)电流消耗40MA,最大不超过80MA,最小10MA左右
5.读写卡片距离可达25MM以上
6.与卡片的通信速率可达106KBps
7.模块与卡片通信时,数据加密
8.每个扇区设有3套密码及其认证和密码存储器
9.有防卡片重叠功能
10 .16个字节的FIFO(先进先出)队列接收/发送缓冲寄存器
11.在模块与卡片通信时自动侦查错误,自动对数据流分析
12.对RF(射频)通道自动监控
13.内建8位/16位的CRC协处理器,提供CRC,PARITY等数据校验
14.支持多种方式的活动天线,并且不需"天调系统"(天线调节系统)对天线进行补偿调节
15.标准的MIFARE并行接口与MCM500 100 %全兼容
16.MCM200 的软件与MCM500模块 100 %全兼容
17.可控制,级联MCM500模块
18.工作温度范围在:-20 ~ +70度
B.MCM200模块引脚说明
如图所示是该模块的引脚排列示意图:
MCM200模块
MCM200引脚说明如下:
引脚 | 引脚名称 | 引脚类型 | 将来使用类型 | 引脚 | 引脚名称 | 引脚类型 | 将来使用类型 | |
1 | D7 | I/O(PU) | I/O(PU) | 17 | RX | I(analog) | I(analog) | |
2 | D6 | I/O(PU) | I/O(PU) | 18 | AGND | SUPPLY | SUPPLY | |
3 | D5 | I/O(PU) | I/O(PU) | 19 | ACDD | SUPPLY | SUPPLY | |
4 | D4 | I/O(PU) | I/O(PU) | 20 | ANT | O | O | |
5 | D3 | I/O(PU) | I/O(PU) | 21 | NANT | O | O | |
6 | D2 | I/O(PU) | I/O(PU) | 22 | MODE | I(PU) | I(PU) | |
7 | D1 | I/O(PU) | I/O(PU) | 23 | USEALE | I(PU) | I(PU) | |
8 | D0 | I/O(PU) | I/O(PU) | 24 | ALE | I(PU) | I(ST,PU) | |
9 | Bp | SUPPLY | SUPPLY | 25 | A3 | I(PU) | I(ST,PU) | |
10 | NPAUSE1 | O | O | 26 | A2 | I(PU) | I(ST,PU) | |
11 | KOMP1 | I(PU) | I(PU) | 27 | A1 | I(PU) | I(ST,PU) | |
12 | NRST | I | I | 28 | A0 | I(PU) | I(ST,PU) | |
13 | DVDD | SUPPLY | SUPPLY | 29 | NRD | I(PU) | I(ST,PU) | |
14 | DGND | SUPPLY | SUPPLY | 30 | NWR | I(PU) | I(ST,PU) | |
15 | NIRQ | O | O | 31 | NCS | I(PU) | I(ST,PU) | |
16 | TP | O(analog) | 32 | KPROG | NC | SUPPLY |
C.其他说明
MCM200是Philips 公司的产品,另外还有其他公司与之相兼容的产品。
UniVision Engineering Limited (联视工程有限公司)持有Mifare 制造专利,其生产的相当与MCM200的产品命名为SB201。
SB201与MCM200模块在硬件上有一处不同,表现在软件上有一个MODE方式寄存器的设置不同。SB201 的MODE 设置为0xD6H;MCM200 的设置为0xC6H(这在以后的章节中还会论述)。除此以外,两者软/硬件100 %全兼容。
法国的GEMPLUS公司向PHILIPS公司购买MCM中核心ASIC RC150或RC170芯片制造的MCM200模块及读写器与MCM200全兼容等。
(二).MCM500模块说明
A.. 特性:
1. 工作频率:13.56MHZ
2. 标准的+12V电源供电,
3. 工作频率:13.56MHZ
4. 读写卡片距离可达100MM以上
5. 与卡片的通信速率可达106KBps
6. 模块与卡片通信时,数据加密
7. 每个扇区设有3套密码及其认证和密码存储器
8. 有防卡片重叠功能
9.16个字节的FIFO(先进先出)队列接收/发送缓冲寄存器
10 .在模块与卡片通信时自动侦查错误,自动对数据流分析
11.对RF(射频)通道自动监控
12.内建8位/16位的CRC协处理器,提供CRC,PARITY等数据校验
13.支持多种方式的活动天线,并且不需"天调系统"(天线调节系统)对天线进行补偿调节
14.标准的MIFARE并行接口与MCM200 100 %全兼容
15.MCM200 的软件与MCM500模块 100 %全兼容
16.可遥控,级联MCM500模块
17.工作温度范围在:-20 ~ +70度
B.MCM500模块引脚说明
如图所示是该模块的引脚排列示意图:

如图所示是该模块的引脚排列示意图:
引脚 | 引脚名称 | 引脚类型 | 功 能 描 述 |
1 | NPAUSE1 | O | 串行数据输出,驱动RF1单元,该引脚必须连到RF单元的TxNPAUSE端。 该引脚的"LOW"信号指示一个能量暂停。 |
2 | NWR | I | 写信号使能端 |
3 | GATE1 | O/NC | (未使用) |
4 | NRD | I | 读信号使能端 |
5 | MOD1 | O/NC | (未使用) |
6 | MODE | I | 并行协议模式,必须用"HIGH"高电平来驱动。 |
7 | SYNC1 | I/NC | (未使用) |
8 | NCS | I | (Not Chip Select)当MCU用"LOW"低电平来驱动 该引脚时,将选中MCM |
9 | WKOMP1 | I | (未使用) |
10 | CS | I | (Chip Select)当MCU用"HIGH"高电平来驱动 该引脚时,将选中MCM |
11 | KOMP1 | I | (Compartor input of RF1)RF1的比较器输入端,必须连到RF单元的RXKOMP端 |
12 | N .T.C. | (未使用) | |
13 | DGND | 数字电路接地端 | |
14 | N .T.C. | (未使用) | |
15 | DVDD | 电源供应端+5V。内部在RxKOMP端上有上拉电阻。 | |
16 | CLOCK | O/NC | (未使用) |
17 | RFVDD | +12V电源输入,供给RF射频单元 | |
18 | N .T.C. | (未使用) | |
19 | RFGND | RF射频单元(模拟电路)接地端 | |
20 | N .T.C. | (未使用) | |
21 | RxKOMP | O | RF射频单元的输出信号端。它提供与数字电平兼容的接收信号。其对地(DGND)为集电极开路输出,并有上拉电阻2K2接到DVDD端 |
22 | KOMP0 | I | (Compartor input of RF0 )RF0的比较器输入端,必须连到RF单元的RXKOMP端 |
23 | RxWKOMP | O | (未使用) |
24 | WKOMP0 | I | (未使用) |
25 | SYNC | O/NC | (未使用) |
26 | SYNC0 | I/NC | (未使用) |
27 | TxMOD | I/NC | (未使用) |
28 | MOD0 | O/NC | (未使用) |
29 | RxGATE | I/NC | (未使用) |
30 | GATE0 | O/NC | (未使用) |
31 | TxNPAUSE | I | CMOS兼容电平输入信号至RF射频单元。该信号参考与RFGND接地端。 |
32 | NPAUSE0 | O | 串行数据输出,驱动RF0单元,该引脚必须连到RF单元的TxNPAUSE端。该引脚的"LOW"信号指示一个能量暂停。 |
33 | A0 | I | A0 ~ A3为4位地址线 |
34 | D0 | I/O | D0 ~ D7为8位双向数据总线 |
35 | A1 | I | A0 ~ A3为4位地址线 |
36 | D1 | I/O | D0 ~ D7为8位双向数据总线 |
37 | A2 | I | A0 ~ A3为4位地址线 |
38 | D2 | I/O | D0 ~ D7为8位双向数据总线 |
39 | A3 | I | A0 ~ A3为4位地址线 |
40 | D3 | I/O | D0 ~ D7为8位双向数据总线 |
41 | ALE | I | Address Latch Enable地址锁存使能端 |
42 | D4 | I/O | D0 ~ D7为8位双向数据总线 |
43 | USEALE | I | 选择器:从内部地址锁存器或A0 ~A3引脚取地址 |
44 | D5 | I/O | D0 ~ D7为8位双向数据总线 |
45 | NIRQ | O | 当该端为"LOW"时,通知MCU应该按评估MCM的状态寄存器内容,并存取MCM中的数据 |
46 | D6 | I/O | D0 ~ D7为8位双向数据总线 |
47 | BP | 后备电池输入端,保护MCM内部密码RAM | |
48 | D7 | I/O | D0 ~ D7为8位双向数据总线 |
上述MCM500引脚功能说明表中,与MCM200引脚定义相一致的,同样适用与对MCM200的引脚说明。
C.其他说明
MCM500是Philips 公司的产品,另外还有其他公司与之相兼容的产品。
UniVision Engineering Limited (联视工程有限公司)持有Mifare 制造专利,其生产的相当与MCM200的产品命名为SB601。
SB601与MCM500模块在硬件上有一处不同,表现在软件上有一个MODE方式寄存器的设置不同。SB601 的MODE 设置为0xD6H;MCM500 的设置为0xC6H(这在以后的章节中还会论述)。除此以外,两者软/硬件100 %全兼容。这一点与上述的MCM200模块/SB201模块相一致。
法国的GEMPLUS公司向PHILIPS公司购买MCM中核心ASICRC150或RC170芯片制造的MCM500模块及读写器与MCM500全兼容。等等。
二.MCM的硬件内核寄存器描述
MCU是通过对 MCM内核特殊的内存寄存器的读写来控制 MCM 的。这些寄存器位于 MCM中的ASIC(特殊应用IC)的内部。共有16个寄存器可存取。在对 MCM 进行读/写操作时,各寄存器担负着不同的功能和作用,并且不是所有的寄存器都是可写或可读的,即有些寄存器只能读而不能写,有些则反之。
读取 MCM, 一般的指向MIFARE 1 卡请求。 MCM 实际上是 MCU 与非接触式IC智能(射频)卡之间信息(数据)交换的"中间人"。任何读取卡片上的数据,或写进卡片上的数据`均必须通过 MCM来传递。写 MCM 意味着去控制 MCM ,例如,送一些类型的指令给它。
以下是 MCM 中ASIC内核特殊寄存器一览表。
MCM —ASIC 寄存器
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
DATA | 00H 0 | READ-BYTE | WRITE-BYTE |
STACON | 01H 1 | DV TE PE CE BE AE -- -- | SOR RFS -- -- 1 1 NRF AC |
ENABLE | 02H 2 | N /A | 1 PR CE CR -- -- -- -- |
BCNTS | 03H 3 | N /A | BIT-COUNT-SEND |
BCNTR | 04H 4 | N /A | BIT-COUNT-RECEIVE |
BAUDRATE | 05H 5 | N /A | -- -- -- -- 1 1 1 BR |
TOC | 06H 6 | N /A | TIMEOUT-COUNTER |
MODE | 07H 7 | N /A | 1 1 0 0 0 P2 P1 P0 P0 |
CRCDATA | 08H 8 | CRC-BYTE-READ | CRC-BYTE-WRITE |
CRCSTACON | 09H 9 | CV -- -- -- -- -- -- CZ | C8 -- -- -- -- -- -- CR |
KEYDATA | 0AH10 | N /A | KEY-BYTE-WRITE |
KEYSTACON | 0BH 11 | -- -- -- -- -- -- -- -- | AL 0 -- -- -- -- KS1 KS0 |
KEYADDR | 0CH12 | N /A | AL AB A5 A4 A3 A2 A1 A0 |
0DH13 | |||
RCODE | 0EH 14 | N /A | -- -- -- -- 0 0 RC1 RC0 |
0FH 15 |
表1 :MCM –ASIC寄存器
各种特殊寄存器材的具体说明如下:
1. DATA 寄存器地址:OOH
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
DATA | 00H 0 | READ-BYTE | WRITE-BYTE |
任何传递到MIFARE 1卡的数据 或 来自MIFRAE 1卡的数据 都必须分别地 被写入DATA寄存器 或 从DATA寄存器中 读出。
例如, MCU向卡片写数据Xi, 则Xi必须首先被写入到 DATA寄存器中, 然后在 MCM 与Mifare 1 卡片进行通信, 由卡片上的ASIC将>DATA寄存器中的数据读取并存放在指定的卡片上的存储器中, 从而完成 MCU 向 MIFRAE 1卡片写数据的过程。 反之亦然。
DATA寄存器中有一个16 BYTE 的FIFO(先进先出)队列寄存器。 数据写到DATA寄存器后,被存放在这个16 BYTE 的FIFO(先进先出)队列寄存器中, 等待向卡片上或 MCU 传送。
如要进行传送DATA寄存器中数据, 则首先必须先设定要传输 多少位(BIT) 或多少字节(BYTE), 即必须对BCNTS寄存器进行有效的正确设置,以确定有多少字节将要被传送。
当卡片上的数据流接收 结束或没有被接收时, STACON 寄存器中的DV标志被置位"1",并且 MCM上的引脚NIRQ也将由"HIGH"变为"LOW"。
如果设置了DV-bit,则STACON寄存器中的error-bits (出错位)将被设置。如果没有相关的error-bit 被设置,则FIFO寄存器中的数据将被假设为正确,且可以被读出。
2. STACON 寄存器地址:01H
SATCON是STATUSCONTROL (状态控制)的缩写,是一个状态控制寄存器。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
STACON | 01H 1 | DV TE PE CE BE AE -- -- | SOR RFS -- -- 1 1 NRF AC |
将数据写到STACON寄存器中将对 MCM 进行状态控制,见如下表:
Bit Name 位名 | Name名称 | Function功能 |
SOR | Soft Reset(软复位) | "0" ----表示无作用 "1":----reset MCMA1,自动地清楚一切 |
RFS | RF-Select(RF选择) | "0"----RF单元0被选中激活 "1"---- RF单元1被选中激活 |
NRF | NO RF(无RF) | "0"----将活动(激活)RF单元接上 "1"----将活动(激活)RF单元关闭 |
AC | Anti Collision (防重叠) | "0"----无作用 "1"----启动防重叠状态机 |
这里,应该注意, 当写数据到STACON寄存器时(即对STACON寄存器进行设置),在写数据到STACON寄存器的这一写周期中,RFS位的设置必须与RF单元相互一致。
另外,设置了AC位,即"AC=1",将使防重叠状态机启动工作,执行内部存取。这一存取在设置 AC位后的12us开始,至35us结束。在这一间隙时间,不允许 MCU 向 MCM 进行写( WRITE )数据操作。必须延迟 35us。 这是为了保证防重叠状态机处理软件的正确运行,让其能识别叠放在一起的多张 Mifare 1卡片,为下一步进行选择一张指定SN (Serial Number)的 Mifare 1 卡片进行数据读/写而作准备。Philips公司(或UniVision Engineering Limited 联视工程公司)推荐至少延迟 35us ,然后进行写 DATA,TOC寄存器 等操作。
读取 STACON 寄存器,将告诉我们一系列的 MCM 及卡片的当前状况信息。以下是读取STACON寄存器后的一系列标志位表。
Bit Name位名 | Name名称 | Function功能 |
DV | Data Valid(数据有效) | 卡上的数据传输到FIFO寄存器中 或一个定时记数器溢出(以在确定TE标志时,是二者中的那一个溢出)。DV位也可以在正确的Authentication (认证)操作完成后而被设置。 |
TE | Timeout Error(溢出出错) | 一个定时记数器溢出发生。 |
PE | Parity Error(奇/偶校验错) | 在通讯时有奇/偶校验错 |
CE | CRC Error(CRC错) | 在通讯时有CRC错 |
BE | Bitcount Error(位记数器出错) | 在BCNTR寄存器中有大量的指定bits(位)没有收到。 |
AE | Authentication (认证出错) | 卡的认证应答码不正确或当执行一个取密码(KEY Error Load) 操作时指定的ROM KEY(只读存储器中密码)不正确。 |
在上述表中,仅当 DV(Data Valid数据有效)位被设置有效时(即 DV ="1") ,TE,PE,CE,BE及AE标志才有效。但有一例外,即 当认证( Authentication )正确完成后, AE标志也直接有效。
SOR是Software Reset(软件复位)的缩写。当执行 SOR 后,所有的这些标志将被清除,且当对 MCM 的任何一个寄存器执行写周期时,所有的这些标志也将被清除。详见SOR后的复位表。
当对 MCM 内的任何一个寄存器执行写周期时,所有的这些标志也将被清除;仅当FIFO是空时,DV标志将被写周期清除。, 及 AE 标志。
在 MCU 与 MCM , MCM与 Mifare 1 卡片进行数据通信时,经常会出现各种错误。例如,卡片没能认证(Authentication ) 通过, 则会使AE出错位置位,等等。
以下是在检查 DV 位之后,相关的出错情况,列为下表:
Command Name(命令名): | Relevant Error Flags (相关的出错标志): |
Answer to Request(Request应答) | TE,BE |
Anti Collision (防重叠) | TE,BE |
Select Card (卡片选择) | TE,BE, PE,CE |
Authentication (认证) | TE,BE,PE,AE |
Read Command (读命令) | TE,BE |
Read DATA (读数据) | TE,BE,PE,CE |
Write Command ( 写命令) | TE,BE |
Write DATA (写数据) | TE,BE |
InCR。/DeCR。/Rest。 Command (增/减/复位 命令) | TE ,BE |
InCR。/DeCR。/Rest。 Value (增/减/复位 值) | TE , BE |
Halt(停机) | TE , BE |
出 错 表
注意,送到卡片上的所有的命令和数据都提供奇/偶校验(parity)和 CRC检查( 但"REQUEST"命令操作除外)。这是由卡片上的ASIC负责检查。
3。 ENABLE寄存器,地址:02H
ENABLE 寄存器的设置将影响卡片在通信时对 parity 和 CRC的校验。在 ENABLE寄存器中有针对parity和 CRC 校验的复位允许位(reset ENABLE bits)。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
ENABLE | 02H 2 | N /A | 1 PRE CEN CRE -- -- -- -- |
对 ENABLE寄存器进行写操作,将执行对parity 和CRC块的控制。
Bit Name位名 | Name名称 | Function功能 |
PR | Parity reset (Parity复位) | "0"-----无效 "1"-----复位parity 块,自动清除 |
CE | CRC ENABLE(CRC 使能) | "0"----- 关闭CRC发生器及校验 "1"---- 打开CRC发生器及校验 |
CR | CRC Reset(CRC 复位) | "0"----- 无效 "1"----- 复位CRC 块,自动清除 |
在对MCM进行编程的开始时,必须对ENABLE寄存器进行写操作,即必须将CE位关闭。仅当执行"Select"命令操作时才打开CE位:
由于MCM在电源接通时或在任何数据通信开始时,都会复位 parity 和CRC块,因此无须额外地去执行这一操作。
4. BCNTS 寄存器,地址: 03H
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
BCNTS | 03H 3 | N /A | BIT-COUNT-SEND |
BCNTS是英文Bit-Counter-for-Sending的缩写,意为传送时的位计数器(寄存器)。 这里的传送指的是CPU向 MCM 的DATA寄存器写数据。因此 BCNTS 寄存器实际上是一个字节发送控制器,它控制了 MCU 向DATA寄存器中写进的数据字节数目。
例如,设置BCTRS=10H,则可向 MCM 的DATA寄存器写进的数据字节数目为2个(8位字长的数据,因为总的bit数目=10H=16D),多余的数据,MCM将不予接收。
由于 BCNTS寄存器是控制向DATA寄存器写数据的字节数目,因此这一操作必须在数据写入 DATA寄存器之前完成。使用2进制代码来操作。
在大量的字节数据被写入 DATA寄存器之后, MCM 自动地与卡片进行通信。写入 DATA寄存器的bits数量由 BCNTS寄存器制定,保持。
5。BCNTR寄存器, 04H
BCNTR是英文Bit-Counter-for-Receiving的缩写,意为接收时的位计数器(寄存器)。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
BCNTR | 04H 4 | N /A | BIT-COUNT-RECEIVE |
与 BCNTS 寄存器相反, BCNTR寄存器控制了 MCU 读取DATA寄存器的数据字节数目
例如,设置BCNTR=20H,则可向 MCM 的DATA寄存器读取的数据字节数目为4个(8位字长的数据,因为总的bit数目=20H=32D),多余的数据,MCM将不予理会。
由于 BCNTR寄存器是控制向DATA寄存器读取数据的字节数目,因此这一操作必须在读 DATA寄存器之前完成。使用2进制代码来操作。
BCNTR寄存器中的值将与实际接收到的数据字节相比较,如果有差别,则STACON寄存器中的 BE 标志被设置。
6。 BAUDRATE 寄存器, 地址: 05H
BAUDRATE 意为数据传输到卡片上或卡片上的数据传到 MCM 时通信的位速率。虽然 BAUDRATE 寄存器的后四位相关与指定的位速率,但是实际有用于 MIFARE 1 卡的只是最后一位。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
BAUDRATE | 05H 5 | N /A | -- -- -- -- 1 1 1 BR |
BAUDRATE 寄存器的设置将直接影响着 MCM 与>Mifare 1卡片之间的数据通信速率。
MCM 中有一个时钟发生器。写数据至 BAUDRATE寄存器,可以控制 时钟发生器(CLOCK GENERATOR)。以下是位速率的计算公式:
tbit = (BRX+2)X 8 [μs]
13.56
如果BRX = 0x0Eh则有: tbit= 9.44 (us) = 1 / 105.94 kHz
上述BRX = 0x0Eh 为对BAUDRATE 寄存器进行设置的推荐值(对于MIFRARE1卡来说BRX(大约)值为0X0Eh,即初始化时BAUDRATE 寄存器应设置为: "0000 1110b"=0Eh。
7。 TOC 寄存器, 地址: 06H
TOC 是Out Counter ((定)时间溢出记数器 ) 的缩写。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
TOC | 06H 6 | N /A | TIMEOUT-COUNTER |
对TOC 寄存器的设置即对定时时间的控制。写数据至TOC 寄存器,可以控制定时溢出记数器。
定时溢出的计算公式如下:
tTO=10.128 X TOC [us] = 100 xTOC [us]
13.56
如果用0x00 H 写给 TOC,即 TOC = 0x00 H ,则将关闭定时溢出记数器,即t TO= 0 。
TOC 寄存器中的值 必须在 MCM 与 MIFARE 1 卡片通信时被设置;
TOC 寄存器常用的设置值为:0AH,即定时t TO = 100 X 10 uS = 1 ms。
TOC 寄存器中的值 (非零值) 将在 没有通信时,永久地被递减。因此,在没有通信时,或通信刚结束时,TOC 寄存器>中的值必须被设置,即设置 TOC = 0x00H. 例如: 在 FIFO 中的数据有效时,就必须这样做。否则将影响 STACON 寄存器的TE出错标志。
如果有溢出出现,则 TE 标志被设置, DV 标志被激活。
在完成写数据到 DATA寄存器,定时溢出记数器 应该经常被初始化。但有个例外,即 在认证操作( AUTHENCATION )的开始时段,定时溢出记数器 应该在存取"KEYSTACON" 和"KEYADDR"寄存器之后,在存取 DATA寄存器之前 被初始化。
一般地在读取(Read)和保存(save )了STACON寄存器中的数据之后 定时溢出记数器必须被关闭。
8. MODE寄存器, 地址: 07H
MODE 意为在与卡片数据相互往来时的数据编码模式(MODE of DATA coding)。MODE寄存器的设置控制了 MCM 在与卡片数据相互通信时的数据编码模式.
MODE寄存器的每一位都与数据通信模式有关,但在使用 MIFARE 1 卡时,只有最后3 位(BITS)最为关联。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
MODE | 07H 7 | N /A | 1 1 0 0 0 P2 P1 P0 |
写数据至 MODE寄存器,可以控制 接收器和发生器。
以下是通信时的脉冲长度(pause length)(宽度)的计算公式:
tpause =(13+P)/6.78[us]
MODE寄存器中的P2 ,P1 ,及P0 位决定了在NPAUSE0 和NPAUSE1引脚上的各自的脉冲宽度。 脉冲宽度的可变范围在 2 ~ 3 us 之间。
在使用 MIFARE 卡时, P2 ,P1 ,及P0 位应被设置为 111 b或110 b。
这里必须提醒读者注意的是,当我们使用 CM200 (Philiphs产品)时与使用 SB201 (UniVision Engineering Limited联视工程有限公司的产品)时 ,MODE 寄存器的设置值将不一样。
使用 CM200 (Philiphs产品)时,MODE 寄存器的设置值应为: "1100 0110b",即C6H,但在使用 SB201 (UniVision Engineering Limited联视工程有限公司的产品)时, MODE 寄存器的设置值应为: "1101110b",即D6H。这是两个产品唯一存在的硬件上的不兼容,导致软件的设置值不同。 否则由于数据通信时的数据编码模式不相同,MCM将不能正常工作,不能读/写 Mifare 1 卡片。在实际应用中已有此经验教训。
9.CRCDATA 寄存器, 地址: 08H
被计算CRC的数据必须被写入CRCDATA寄存器中。 计算后的 CRC 必须从CRCDATA 寄存器中读出。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
CRCDATA | 08H 8 | CRC-BYTE-READ | CRC-BYTE-WRITE |
在写入一个BYTE(字节)到CRCDATA 寄存器后,计算将开始。计算完成后,STACON 寄存器的CV标志被设置。当我们要写下一个字节到CRCDATA 寄存器之前,或在读取CRCDATA寄存器以得到 CRC 之前,或在检查CZ标志之前,都必须先读取CV标志,检查CV标志。
10 . CRCSTACON寄存器, 地址: 09H
CRCSTACON寄存器是指 CRC 处理器状态和控制寄存器。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
CRCSTACON | 09H 9 | CV -- -- -- -- -- -- CZ | C8 -- -- -- -- -- -- CR |
写数据到CRCSTACON寄存器中,即执行对 CRC -处理器的控制。
Bit Name 位名 | Name名称 | Function功能 |
C8 | 8-bit-CRC(8位CRC) | "0"---- 选择16位CRC处理器 "1" ---- 选择8 位CRC处理器 |
CRE | CRE(CRC-复位) | "0" ---- 无效 "1" ---- 复位CRC处理器 |
读取CRCSTACON寄存器后 用户将知道 CRC -处理器数据传输的状态。当标志被设置为"1"时,标志被激活。
Bit Name 位名 | Name名称 | Function功能 |
CR | CRC-Ready(CRC-准备) | 最后一个字节(BYTE)被处理完成 |
CZ | CRC-Zero(CRC-零) | CRC-寄存器内容=00H,意味着CRC-校验OK |
8-bit CRC 寄存器值的多项式计算公式为 : X7 + X5 +X4 +X3 +1 一般其初值 = 0xE3H
16-bit CRC 寄存器值 多项式计算公式为 : X15 + X10 +X3 +1 一般其初值 = 0x31E3 H
读取16-bit CRC模式时的CRC寄存器 需要2个读周期。第一个读到的字节是16-bitCRC 中的低字节, 第二个读到的字节是16-bitCRC 中的低字节。
11. KEYDATA 寄存器, 地址: 0A H (10 )
被存储在MCM中 RAM 的密码数据必须先被写入KEYDATA 寄存器。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
KEYDATA | 0AH10 | N /A | KEY-BYTE-WRITE |
为了能够存取 MCM 内部 RAM 中的密码,密码的存放地址必须首先在 KEYSTACON 寄存器和 KEYADDR寄存器两者中指定。
在做存放密码操作或做密码验证操作之前,首先必须对 KEYSTACON 寄存器进行设置; 在密码被准确无误地存进RAM之前, 相关的传输密码(Transport KEY)Tkey必须被写入 KEYDATA - 寄存器中。传输密码TKey和写入 RAM 中的密码都是6字节( BYTE)长,连续被写入KEYDATA 寄存器中。但是,在" AUTHENCATION "(认证)操作时,这一寄存器不必使用。
12.KEYSTACON – 寄存器地址:0BH(11)
KEYSTACON 寄存器是指(密码)KEY状态和(密码)KEY控制寄存器。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
KEYSTACON | 0BH 11 | AL 0 X X X X KS1 KS0 |
写入 数据到 KEYSTACON– 寄存器进行设置,将确定存取RAM中的密码(KEY)或传输密码(KEY)的密码地址的一部分。
存放在 MCM 的RAM中的密码对程序员来说是透明的,不得而知的。因此也是不可读的。
(这里指的是密码本身及存放密码的地址不可读)。
Bit Name 位名 | Name名称 | Function功能 |
AL | Authenticate (认证) /Load Keys | "0" ---- 准备提取密码 "1" ---- 准备认证 |
KS1,KS0 | Key-Set密码集 | "00 " ---- 选择RAM,KEY-set 0 "01" ---- 选择RAM,KEY-set 1 "10 " ---- 选择RAM,KEY-set 2 "11" ---- 选择传输密码(Transport KEY) |
提取密码: AL =0 , 表明将要提取密码;
密码认证(Authentication ): AL =1, 表明将要认证 "AUTHENTICATION " 操作。
RAM中的密码 和传输密码 TKey 二者中允许被选择。
注意: KEYSTACON– 寄存器中的值必须根据所使用的" AUTHENTICATION "命令(60 hex 或61 hex指令代码)来确定。
此外,密码地址通过写数据到 KEYSTACON和 KEYADDR寄存器之后而在 MCM 中被确定,之后,通过写"命令"( Command )和写"地址"(address)到 DATA寄存器之后,认证密码" AUTHENTICATION " 操作便开始启动执行。
13. KEYADDR-寄存器, 地址:0C H(12)
KEYADDR寄存器将存放RAM(密码)KEY和 传输(密码)KEY各自的 密码地址的一部分。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
KEYADDR | 0CH 12 | N /A | AL AB A5 A4 A3 A2 A1 A0 |
写入 数据到KEYADDR – 寄存器 将确定存取 MCM 的RAM中的密码(KEY)或传输密码(KEY)的密码地址的一部分。
程序员不可能知道密码实际存放在 MCM 的RAM中的地址,否则密码便没有秘密可言了。
Bit Name 位名 | Name名称 | Function功能 |
AL | Authenticate (认证) /Load KEYs | "0" ---- 准备提取密码 "1" ---- 准备认证 |
AB | KEY’A’ 或 KEY ‘B’ | "0" ---- 使用密码‘A’ "1" ---- 使用密码‘B’ |
A5 … A0 | KEY address | 密码地址A5至A0 指定密码的sector |
提取密码: AL =0 , 表明将要提取密码;
认证Authentication : AL =1, 表明将要认证 "AUTHENTICATION " 操作。
14. RCODE –寄存器,地址:0D H (14)
RCODE –寄存器用于代码接收。
寄存器名 | 地址 | 读(READ) | 写(WRITE) |
RCODE | 0EH 14 | N /A | X X X X 0 0 RC1 RC2 |
写入 数据到 RCODE寄存器对其进行设置,将使接收器的译码器参数化。
Bit Name位名 | Name名称 | Function功能 |
RC1,RC0 | Receive(接收) | KOMP引脚上用于引起中断("HIGH"高电平)的必不可少的(脉冲)边界数目。 |
RCODE –寄存器中的值一般应设置为 0X02 H。 然而,在有些环境中,设置为 0x03 H> 时,对 Mifare 1 卡片的操作距离可能会稍为好(远)一点。
三. MCM硬件初始化
为了与MIFARE 1 卡通信,必须对MCM各硬件寄存器进行初始化设置。
寄存器 | 地址 | 初始化设置(16进制值) |
STACON | 1 | 0x0C |
0x4C | ||
ENABLE | 2 | 0xC0 |
BAUDRATE | 5 | 0x0E |
MODE | 7 | 0xC6或0xD6 |
RCODE | 13 | 0x02 |
一般地,应该先对MCM执行软复位(soft-reset),然后对MCM进行初始化设置,再进行数据通信。
在任何数据通信之前必须先执行"REQUEST"命令, 以和卡片建立第一步的通信联络。
以下是MCM各硬件寄存器在上电时或在软件复位时的复位表。
MCM 复 位 表
寄存器 | 地址 | POR硬件上电复位 | SOR软复位 | 初始化设置 |
DATA | 0 | xxxx xxxx | uuuu uuuu | |
STACON | 1 | 00nn 0100 | 0unn uu00 | 0x0C/0x4C |
ENABLE | 2 | 0000 nnnn | 0000 nnnn | 0xC0 |
BCNTS | 3 | 0000 0000 | uuuu uuuu | |
BCNTR | 4 | 0000 0000 | uuuu uuuu | |
BAUDRATE | 5 | Nnnn 1111 | Nnnn uuuu | 0x0E |
TOC | 6 | 0000 0000 | uuuu uuuu | |
MODE | 7 | 0000 0000 | uuuu uuuu | 0xC6/0xD6 |
CRCDATA | 8 | xxxx xxxx | xxxx xxxx | |
CRCSTACON | 9 | xxxx xxxx | xxxx xxxx | |
KEYDATA | 10 | xxxx xxxx | uuuu uuuu | |
KEYSTACON | 11 | 00nn nnxx | 00nn nnuu | |
KEYADDR | 12 | 1000 0000 | 1uuu uuuu | |
13 | nnnn nnnn | nnnn nnnn | ||
RCODE | 14 | Nnnn 0011 | Nnnn uuuu | 0x02 |
15 | nnnn nnnn | nnnn nnnn |
说明:上表中的POR和SOR两列中:
X :表示此位不必关注;N :表示此位没有使用; U :表示此位不变。
四. MCM的硬件内核包括了如下几大部分接口电路:
1. 与 MCU (微处理机CPU)接口电路
2. RF模块接口电路
3. 与天线射频接口电路
4. 与电源接口电路
(一) MCM与MCU(微处理机CPU)接口电路
MCM可以由标准的MCU接口信号来控制。这些标准的控制信号可以控制MCM的 ASIC进行工作。其间使用了标准的微控制器和微处理机通信协议。
MCM可由外部MCU发出特殊命令来启动运行。任何情况下,MCM都可以由对地址
的选择来启动工作。例如,MCM的RST引脚,-CS引脚和CS引脚的信号设置等。
对MCM内部存储器的存取,意味着将激活-CS和CS信号,以及对地址为00H~~0FH的寄存器的合适的设置。
通过读特殊I/O地址的信息,可以得到MCM的状态信息。采用不同的MCU及其连接方法,将会有不同的硬件信号时序及数据信息流信息等。
(二) RF模块接口电路
MCM与RF模块的接口一般有如下几个引脚来实现:
通过KOMP0与NPAUSE0可与RF0模块相连接;
通过KOMP1与NPAUSE1可与RF1模块相连接;(仅有MCM500有RF1)
通过RXKOMP与TXNPAUSE可与其他的级联MCM模块相连接;

(三) 与天线射频接口电路
有二个引脚ANT和GND接口可直接与正极性天线相联接。其间用同轴电缆。阻抗欧娒。连接长度一般应小于50CM。
MCM的外部金属屏蔽盒(仅MCM500有)必须连接到同轴电缆的外屏蔽包裹线,以使信号不能扩散,且免受外界电磁辐射信号等的影响。如果天线工作不正常,可用"天线调谐器"来调谐,使之能将Mifare 1卡片的有效操作距离保持在10CM/2.5CM以上。
(四)与电源接口电路
与电源的接口包括这样几组信号:
DVDD—数字电路正电源端(+5V);
DGND--数字电路接地端(0V);
BP ---WOM缓冲器供电(通电工作时为+5V;不通电工作时为+3V );
RFVDD—RF电路正电源端(MCM500 :+12V/MCM200 : +5V);
RFGND-- RF电路接地端(0V);
注意,RFGND和DGND有条件的话应该分开接地,否则应接到系统的接地端,并且连接线应该具有高导电特性,且应愈短愈粗愈好。
MCM供电电源端与GND端必须跨接100NF的电容,这些电容应尽可能靠近MCM,以免引起接地环路。
整个系统应有单一电源供电,且应稳压,纹波电压小于50mv。
第三章 MCM 软件编程指令
(一) 指令集
MCM能执行有限的一些指令,并将这些指令传输到 MIFARE 1 卡片上。
每一个指令包含7个独立的步骤,程序员在编程执行这些指令时必须小心每一个正确的(步骤)时序,这些步骤在不同的 MCM 指令执行中而不一样。以下是 MCM 通信基本指令集。
通信基本指令集
MCU《==》MCM《===》MIFARE 1卡片
指 令 | 指令代码(hex ) | 相关的出错标志 | 接收卡片上数据 |
Answer to Request(Request的应答) | TE,BE | Tag type | |
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 | / |
指令代码表
在与 MIFARE 卡片进行任何通信之前,程序员必须按照下述方法预先设置 MODE寄存器:
MODE= " 110 0 0 1 1 0 "bin=C6 hex
注意,使用 CM200 (Philiphs产品)时, MODE 寄存器的设置值应为: "1100 0110b",即C6H,但在使用 SB201 (UniVision Engineering Limited联视工程有限公司的产品)时, MODE 寄存器的设置值应为: "1101 0110b",即D6H。
出错处理:
DV 标志指明了 MCM 与 MIFARE 卡片之间的传输已经完成,并且主处理机可能已经从 MCM 中收到数据。 DV 标志保持"1"的持续时间,出错标志亦将保持有效。
在有效的数据被存储进 FIFO寄存器时, DV 标志将持续保持。在向 MCM 写数据时的写指令周期内, DV 标志将被清除。 DV 标志也可能会被软复位(soft-reset)清除。
有时,为了确认有些操作的成功完成,必须使用定时溢出(TE)标志。
1 。"Answer to Request" ("Request"应答)指令
指 令 | 指令代码(hex ) | 相关的出错标志 | 接收卡片上数据 |
Answer to Request (Request的应答) | TE,BE | Tagtype | |
Request std | 26 | ||
Request all | 52 |
Request 指令将通知 MCM 在天线有效的工作范围(距离)内寻找 MIFARE 1 卡片。如果有 MIFARE 1 卡片存在,这一指令将分别与 MIFARE 1 进行通信,读取 MIFARE 1 卡片上的卡片类型号 TAGTYPE (2个字节),由 MCM 传递给 MCU ,进行识别处理。
程序员可以根据 TAGTYPE 来区别卡片的不同类型。
对于 MIFARE 1 卡片来说,返回卡片的 TAGTYPE (2个字节)可能为0004h。
从一个指定的卡片开始,后续的卡片可以根据 TAGTYPE 而被选择。当使用 " Requeststd"指令来寻卡时,只有那些卡片上没有被设置成" HALT _ MODE"(停机模式)的卡片将响应这一指令。
Requestall指令的使用是很重要的,它可以防止 MCM 选择同一卡片好几次。当某一张卡片在 MCM 之天线的有效的工作范围(距离)内, Requestall指令在成功地读取这一张卡片之后,将一直等待卡片的使用者拿走这一张卡片,直到有新一张的卡片进入 MCM 之天线的有效的工作范围(距离)内。当然,这里的"新一张的卡片"亦可以是刚刚拿开的那张卡片。
Requestall指令是非连续性的读卡指令。只读一次。但有个例外,当某一次 Requestall指令读卡片失败时,例如,卡片没能通过密码认证或其他原因而出错时, Requestall指令将连续地读卡,直到读卡成功才进入非连续性的读卡模式。
Requestall指令适用于那些需要有人工干预的场合。
Requeststd指令的使用和 Requestall指令刚巧相反, Requeststd指令是连续性的读卡指令。当某一张卡片在 MCM 之天线的有效的工作范围(距离)内, Requeststd指令在成功地读取这一张卡片之后,进入 MCM 对卡片的其他操作。如果其他操作完成之后,程序员又将 MCM 进入 Requeststd指令操作,则 Requeststd指令将连续性地再次进行读卡操作,而不管这张卡片是否被拿走。只要有一张卡片进入 MCM 之天线的有效的工作范围(距离)内, Requeststd指令将始终连续性地再次进行读卡操作。
Requeststd指令是连续性的读卡指令。
Requeststd指令适用于那些不需要有人工干预的场合,即全自动的场合。例如,宾馆,酒店,高级写字楼等场所的门禁控制系统(Door Access Control),高速公路,停车场等的不停车收费系统(Non -Stop Road Tolling),等等。
8. "AntiCollision "防重叠
指 令 | 指令代码(hex ) | 相关的出错标志 | 接收卡片上数据 |
AntiCollision (防重叠) | 93 | TE,BE | Serial Number |
如果有多于一张的 Mifare 1 卡片在 MCM 之天线的有效的工作范围(距离)内 ,必须使用 AntiCollision 指令,使 MCM 能够在这一叠Mifare 1 卡片中选择个别的一张卡片。
AntiCollision 指令开始于一个" AntiCollisionloop"(防重叠循环)。结束时, 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"选择卡片操作
指 令 | 指令代码(hex ) | 相关的出错标志 | 接收卡片上数据 |
Select Tag(选卡片) | 93 | TE,BE, PE,CE | Size |
在一个成功的 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 " 认证操作
指 令 | 指令代码(hex ) | 相关的出错标志 | 接收卡片上数据 |
Authentication (认证) | TE,BE, PE,CE | / | |
Auth_1a | 60 | ||
Auth_1b | 61 |
在 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。
KS1KS0 = 00 | 选择KEYSET0 |
KS1KS0 = 01 | 选择KEYSET1 |
KS1KS0 = 10 | 选择KEYSET2 |
KS1KS0 = 11 | 选择KEYSET3 |
KEYADDR寄存器(0C H地址)中的AB位用于选择KEYA(当AB="1"时)和KEYB(当AB="0"时)。
AB = "1" | 选择KEYA |
AB = "0" | 选择KEYB |
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(密码存储器)的实际存储器范围是:
注意:KEY-RAM(密码存储器)中的数据不能读出芯片之外。
MCM中另外还包含了KEY-ROM (密码只读存储器),用以存储一套传输密码(one set of transport keys) 和一个维护密码(one service KEY)。 传输密码对于用户想在KEY- RAM (密码存储器)中自己定义密码而编程序时,很有用。
KEY-ROM (密码只读存储器)的存储器容量为:
注意:KEY-ROM (密码只读存储器)是掩膜方式编程的,不能读出芯片之外。
5. "Load KEY" 存取密码
指 令 | 指令代码(hex ) | 相关的出错标志 | 接收卡片上数据 |
Load KEY(存取密码) | / | AE |
在 MCM 中,每一个认证扇区(Authentication sector)中包含了一套传输密码 Tkey(one transport KEY)。 这些密码在制造产品时,可以编程。它们可以被传输到系统的集合器(例如,用户开发的硬件系统)中,集合器负责存取新的用户定义的密码到 MCM -WOM(密码只读存储器)中。此时,可以通过"Load KEY"指令来完成任务。
对于一个单独扇区(sector)中的密码提取,则相应的传输密码必须被预先指定。
在用"Load KEY"指令来完成存取密码过程中,KEYSTCON寄存器和KEYADDR寄存器的设置与"Authentication "的操作相似。但也有些区别。这将在后面的编程中具体介绍。
6. "Read" 读指令操作
指 令 | 指令代码(hex ) | 相关的出错标志 | 接收卡片上数据 |
Read (读) | 30 | TE,BE, PE,CE | Data |
Read (读)指令允许 MCU 通过 MCM 来读取 MIFARE 1 卡片上完整的16 个Bytes的数据块(Data blocks)。
只有在预先"AUTHENTICATION " 认证指令完成后,才允许进行对 Mifare 1 卡片上的某一数据扇区进行Read (读)指令操作。
Read (读)指令操作只能一个块(Block)一个块地读,即只能16个字节一次性地读取。如果只要求某Block中的几个字节的数据,也只能一个整块16个字节一起读取,由程序员选取指定的字节。
从卡片上读到的数据必须由 MCU 进行校验,以确保数据的有效性。
密码数据不能被读取。
7. "Write " 写指令操作
指 令 | 指令代码(hex ) | 相关的出错标志 | 接收卡片上数据 |
Write(写) | A0 | TE,BE | / |
"Write" 写指令允许用户写数据到 MIFARE 卡片上(完整的16 个BYTEs的数据块(Data blocks))。只有在先"AUTHENTICATION " 认证指令完成后,才允许进行对要求的数据扇区或数据块(Block)进行"Write" 写指令操作。
为了提供最大的数据集成度,以及包含大量密码值的密码数据块的保密性,我们必须保持一个大数据结构。这样可以允许 MIFARE 卡片执行增值/减值(Increment Decrement)指令。
"value block"(数据块)的数据结构:
表 :数据块
数据块通过一个写操作,将存储的数据在每一个block块中写3次,1次反写,从而完成数据块的初始化。此外,一个地址引导位代码域必须写4次,其中2次为反向写入。正/负数据值将以标准的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 " 增值/减值/重储
指 令 | 指令代码(hex ) | 相关的出错标志 | 接收卡片上数据 |
Increment (增值) | C1 | TE,BE | / |
Decrement (减值) | C0 | TE,BE | / |
Restore(重储) | C2 | TE,BE | / |
通过 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" 传送指令
指 令 | 指令代码(hex ) | 相关的出错标志 | 接收卡片上数据 |
Transfer (传送) | B0 | TE,BE | / |
每一个"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" 停机指令
指 令 | 指令代码(hex ) | 相关的出错标志 | 接收卡片上数据 |
Halt(停机) | 50 | TE,BE | / |
"Halt" 停机指令将 MIFARE 1 卡片设置为" HALT MODE"。例如,卡片已经退出使用等。卡片将保持" HALT MODE"状态,直到被复位(例如:重新用于通信 等)。
第四章 MCM应用开发
在这一章节里,将向广大 读者介绍MCM的具体的应用开发。 我们选用的卡片为Mifare 1 S50系列的标准的符合 ISO/IEC 14443 TYPE A 标准的非接触式IC射频卡。选用的读写器的核心模块为MCM200 (或是SB201)。
根据以上几个章节的介绍,相信读者可以理解如下的通用读写器DEMO电路的设计。
一. DEMO硬件电路的应用开发
通用读写器DEMO的硬件电路请见所附的图纸。具体说明如下:
1. DEMO电路中,对于MCU的说明:
笔者选用了市场上容易购置的美国ATMEL 公司的89C52芯片。其内建8K EEPROM,256 bytes 的RAM ,内设P0 ,P1,P2,P3 等四个端口,其中P0 ,P2为数据/地址双向的多用端口。内有3个定时器,T0 ,T1和T2。其振荡晶体选用11.0592MHz,以利于以后通信时的波特率的精确设计和设置。89C52中还内设8级中断控制系统,3级单向一次性可编程的密码内存,可以防止芯片内的程序被非法读写,拷贝等,保护知识产权。等等。
AT89C52 的软件指令完全兼容与MCS-51系列的MCU的标准,包括指令的寻址方式,各种数据的操作等等。
有关详细的资料,可以查阅ATMEL 公司的网页:HTTP://WWW.ATMEL.COM
2. Demo电路中,对MCM的说明:
在DEMO电路中,笔者选用了Philips公司的MCM200模块(也可用联视工程公司的SB201模块)。
将MCM的D0 ~ D7 连接到MCU的P0端口;MCM的读写线连接到MCU的-RD和-WR端上; A0 ~ A7空缺,使用ALE线,连接到MCU的第30脚上;MCM的天线端点上(ANT,-ANT等)必须对地接高频滤波电容,并串接高频电感;MCM的第9脚必须接3.6V的后备锂电池;MCM的第31脚及12脚分别接MCU的25脚和26脚,由程序员来控制MCM的启动和关闭。MCM上的模拟电路供电和数字电路的供电端必须跨接高低频滤波电容等。
3. Demo电路中,对显示电路的说明:
在DEMO电路中,笔者选用了Motorola 公司的MC14499显示模块。
每个MC14499模块可动态扫描4位段式LED(共阴)。DEMO电路中共使用了2个MC14499模块,以显示8位数据。
MC14499显示0 ~9数字时很直观,但是它是数字型的。由于我们经常要显示16进制的数据,因此对于A,B,C,D,E,F的显示,MC14499的显示可能不很直观,希望读者注意。
在新版本的DEMO电路中,笔者已经将显示电路改为LCD点阵式,多字行的液晶显示电路。这对于将这种低功耗的显示电路直接应用于所要求开发的应用设备中将提供很大方便。
两个MC14499模块的CLK和DATA信号将分时复用,以节省MCU有限的资源,分别接到MCU的21 和22引脚上,两个MC14499模块的--ENB信号分别接到MCU的23 和24引脚上。如果选通-ENB1,则第一个MC14499显示模块将接收数据;如果选通-ENB2,则第二个MC14499显示模块将接收数据。
4.Demo电路中,对键盘电路的说明:
在DEMO电路中,笔者选用了4 X 4方阵式样的键盘电路与MCU相连在P1端口上。
键盘电路中的4X4共16个键分别设置为0 ~ 9 十个键,一个"."键,以及其他一些功能键及字母键。
键盘电路的扫描值通过一个LS244,送到MCU的P1的高四位,供MCU采集;MCU的P1的低四位送出键盘的扫描信号。LS244的选通(MCU采集P1的高四位时)信号和显示电路的DATA线分时复用,以节省MCU有限的资源。
本键盘电路的软件设计不同于传统,而采用了比较直接,明了,快速的"位扫描法",这对于读者如果要求对键盘数目进行扩充,则读者在仔细阅读本文之后定能迎刃而解。
在软件设计说明章节中将详细介绍键盘扫描电路软件设计方法。
5. Demo电路中,对指示信号的说明:
LED1:指示MCM的-CS信号是否被选中,LED1亮,则指示MCM已被MCU选中,可对MCM进行操作。(此时,应注意MCM的RST端指示信号LED2应亮,否则MCM不能被操作)。
LED2:指示MCM的RST信号是否被选中,LED2亮,则指示MCM以被MCU选中,可对MCM进行操作。(此时,应注意MCM的-CS端指示信号LED1应亮,否则MCM不能被操作)。
LED1 和LED2的指示应该同时有效才能使MCM工作。
LED3:整个DEMO电路的"OK"指示信号。即在每次对MCM操作成功之后,LED3将指示为亮。例如在对MCM成功地进行了SELECT命令或REQUEST命令等操作之后,LED3将指示为亮。特别地,在本文的"门禁控制系统"应用程序中,LED3将直接作为门锁的驱动信号。在实际的装置中,如果"门禁控制系统"的读写器读到某一张写有该"门禁控制系统"密码的非接触式射频卡,则LED3将指示发亮,并驱动门锁,打开大门。(读者如果已完全理解,读通"门禁控制系统"应用程序的话,完全可在程序中适当的位置加入一段小程序,连同LED3的驱动信号,而作为门锁的复合驱动信号。这样的"门禁控制系统"将更具有安全性,可靠性。)
喇叭(蜂鸣器):DEMO电路的喇叭(蜂鸣器)指示音信号,在每次对MCM操作成功之后,喇叭(蜂鸣器)将发声。例如在对MCM成功地进行了SELECT命令或REQUEST命令等操作之后,喇叭(蜂鸣器)将发声。特别地,在本文的"门禁控制系统"应用程序中,喇叭(蜂鸣器)将直接作为门锁的驱动指示音信号。配合LED3的指示信号,仅当门锁被合法地打开时,喇叭(蜂鸣器)将给出指示音信号。否则,喇叭(蜂鸣器)将不会给出指示音信号。
读者如果已完全理解,读通"门禁控制系统"应用程序的话,完全可在程序中适当的位置对LED3或喇叭(蜂鸣器)进行任意的程序设置。
电源输入保护电路:在DEMO电路中,加入了简单的电源保护电路。即在电源的输入端加入一个反向二极管,当电源极性接反时,将输入的电源短路,而不会使DEMO电路损坏。
6. 其他电路
通信电路:在新版本的DEMO电路中,笔者已经将RS232的通信电路连接上。以利于用上位PC来具体地控制读写器,并能编制用户界面良好的应用软件,等等。
为了方便读者对于实际应用中不同的通信方式的要求,例如要求长线(长距离)方式(例如RS422/485等),笔者业已设计完成相应的"全双工RS232《==》RS422/485通信(双向)转接设备"。该转接设备非常轻巧,低功耗,成本很低,非常适合于各种不同应用类型的计算机与应用设备之间的转接。例如大楼中的门禁系统中各读写设备与上位计算机之间的长线方式的通信就应采用这种转接设备。其长线驱动可达1200米以上,且稳定可靠。传统的RS232通信至多不超过20米。(注:关于"全双工RS232《==》RS422/485通信(双向)转接设备"的介绍,笔者将会在另外文章中将做详细介绍。)
LCD显示电路:轻巧,低功耗的非接触式卡片读写器已越来越受到欢迎。因此大电流显示的LED将被LCD显示所取代。笔者在新版本的DEMO电路中,已经将LCD应用于读写设备中,且为图形方式点阵大屏幕显示。等等 。
二. DEMO电路的 软件 应用开发
DEMO电路的 软件 应用开发的目标是:主要根据所设计的DEMO硬件电路而进行第一步,最低层的面向微处理机MCU的应用程序的开发。
由于在DEMO电路中笔者选用的MCU为完全兼容与MCS-51系列微处理机的ATMEL公司的AT89C52,因此,笔者将重点介绍MCS-51系列的面向硬件操作的最低层的汇编语言的DEMO电路的应用程序的开发。
应用程序的开发将主要分为两大部分,即对MCM的应用程序的开发及对读写器的其他电路的应用程序的开发。
程序开发的方式将主要建立一系列的汇编语言函数子程序以供主控程序的随时调用。即对MCM模块或读写器的其他电路分别编制汇编语言函数子程序。
物联网常见通信协议RFID、NFC、Bluetooth、ZigBee等梳理[2020-06-02]
制作智能卡的卡基材料[2020-04-19]
CPU卡安全系统与逻辑加密系统的比较[2020-05-02]
RFID智能卡有哪些?[2020-06-09]
nfc功能是什么?手机nfc功能怎么用?[2022-01-06]
ETC和RFID技术真正实现一路畅通[2020-07-27]
RFID在物联网领域的应用[2020-09-23]
抗金属电子标签[2020-04-20]
CPU卡加密系统与M1加密系统比较[2020-09-03]
CPU卡应用方案和密码管理技术[2020-05-22]
Mifare Desfire[2020-05-26]
智能卡与COS技术简析[2014-12-03]
射频识别-防冲突[2020-05-25]
ISO/IEC14443-3 防冲突、防碰撞算法、TypeA、Type B[2020-05-31]
物联网之RFID二[2020-05-31]
物联网之RFID一[2020-05-31]