SmartCardSmartCard
非接触式IC卡技术
电子与信息工程学院
SmartCardSmartCard
提 纲
非接触式IC卡概述
–系统构成/分类/国际标准
非接触式IC卡工作原理
–能量传递/信息传递/防冲突
非接触式IC卡芯片技术
– MIFARE 1
非接触式IC卡接口技术
– MIFARE 1
SmartCardSmartCard
为什么要使用非接触式IC卡?
在频繁操作的场合,如门禁、考勤、小额电子钱
包(公交收费、食堂收费、高速公路收费、停车
场收费)、身份认证等场合,接触式IC卡越来越
明显的暴露出其弊端: •容易磨损
•操作速度慢
•使用不方便
SmartCardSmartCard
什么是非接触式IC卡?
Contactless ICC
非接触式IC卡是在卡中敷设天线,利用天线的接
收发射,与读写器的天线交换信号,实现一种无
线通讯,非接触式IC卡又被称为射频卡(RFC—
—Radio Frequency Card),简称RF卡,非接触
式 IC卡系统被称为射频识别系统(RFID——
Radio Frequency Identification)。
SmartCardSmartCard
非接触式IC卡系统构成
非接触式IC卡:数据载体,应答器
非接触式IC卡读写器:卡接口设备,阅读器,
寻呼器
SmartCardSmartCard
非接触式IC卡的基本构成
非接触式IC 卡:芯片+天线+卡基
SmartCardSmartCard
SmartCardSmartCard
非接触式IC卡读写器的构成
高频模块(发送器和接收器)、
控制单元
耦合元件(天线)
SmartCardSmartCard
非接触式IC卡的特点
可靠性高、寿命长。
非接触式IC卡与读写器之间无机械接触,避免了由于接
触读写而产生的各种故障。非接触式ID卡表面无裸露的芯
片,无须担心芯片脱落、静电击穿、弯曲、损坏等问题,
既便于卡片的印刷,又提高了卡片使用的可靠性。
操作快捷便利。
动态处理。
成本较高。
SmartCardSmartCard
非接触式IC卡的分类
按片内IC:存储卡、逻辑加密卡、CPU卡
按工作距离:密耦合卡、近耦合和疏耦合卡
按工作频率的高低 :125kHz的低频卡(30
kHz ~300 kHz),的高频或射频卡
(3MHz~30 MHz),915MHz、的
超高频卡(300MHz ~3GHz)、的微
波卡(>3GHz)。
按卡内芯片供电方式:卡内带电池的有源卡和
卡内无电池、由读写器以无线感应方式供电的
无源卡
按使用过程中的读写方式:只读卡(ID卡)和
读写卡 (带EEPROM)
SmartCardSmartCard
EM ID厚卡
EM ID薄卡
PHILIPS
MIFARE 1卡
TI (德州仪器)
Tag-it电子标签
手表卡与钥匙扣卡
SmartCardSmartCard
特点
频段
工作频率 数据传输
速率
读写距离 读写区域
低频 125~134K
Hz
慢 适中(<1m) 较为均匀
高频 较快 适中(<1m) 较为均匀
超高频 860~960M
Hz
快 远(<10m) 很难定义
不同频段射频卡的特点
SmartCardSmartCard
非接触式IC卡的国际标准
标准组织 阵营 频段 技术规范
EPCglobal
全球产品电子代码
管理中心
欧美企业
沃尔玛、思科、敦
豪快递、麦德龙和
吉列等
UHF(860-
960 MHz )
电子产品代码(EPC)
、电子标签规范和互
操作性、识读器-电子
标签通信协议、中间
件软件系统接口等
ISO/IEC
国际标准组织/国
际电工委员会
全球非盈利
工业标准组
织
多个频段 识别卡与身份识别
ISO/IEC14443
自动识别
ISO/IEC15693
ISO/IEC18000
UID
泛在技术核心组织
日本电子厂
商、IT企业
和
电子标签超微芯片
部分规格
SmartCardSmartCard
注释:ICC——集成电路卡
CICC——Close-Coupled ICC,紧密(密耦合)卡;
PICC——Proximity ICC,称为接近(近耦合)卡;
VICC——Vicinity ICC,称为邻近(疏耦合)卡。
CD ——Coupling Device,是读写器中发射电磁波的部分
SmartCardSmartCard
ISO/IEC14443国际标准
现阶段ISO/IEC 14443(草案)主要有两个体系并存:
ISO/IEC14443-Type A、ISO/IEC14443-TypeB。
TypeA:以PHILIPS公司为代表,包括SIEMENS、
HITACHI、GEMPLUS、G&D和Schlumberger等公司
TypeB:以ST(意法半导体)、MOTOROLA、
ATMEL、韩国SAMSUNG和日本的NEC等公司为代
表。
SmartCardSmartCard
ISO/IEC18000国际标准
18000-1:物理层
18000-2:低于135KHz通信的空中接口的参数;
18000-3:在通信的空中接口的参数;
18000-4:在通信的空中接口的参数;
18000-5:通信的空中接口的参数;
18000-6:860-960MHz通信的空中接口的参数;
18000-7:433MHz通信的空中接口的参数;
SmartCardSmartCard
目前的产品主要包括:
ISO14443TypeA卡——Mifare 1 S50卡、Ultra Light卡
LEGIC Type A 卡、上海公交卡即华虹IC卡、复旦微电子
Type A 卡
ISO14443TypeB卡——ATMEL RF020
ISO15693(电子标签)卡——PHILIPS I-Code2、TI Tag
-it标签
I-CODE(电子标签)卡—— PHILIPS I-Code、上海贝岭
BL75R02
SONY Felica卡——香港八达通、深圳通
中国二代身份证
SmartCardSmartCard
目前125KHz的产品主要包括:
技术指标 EM 4100/4102标准卡 4001感应式ID厚卡 8803感应式ID厚卡
芯片 Swatch Group Em4102
Wafer
台湾4001 COB 台湾8803 Wafe
工作频率 125KHZ 125KHZ 125KHZ
感应距离 2-20cm 2-20cm 2-20cm
尺寸
封装材料 PVC、ABS PVC,ABS PVC
封装工艺 层压封装 手工粘贴 手工层压
号码 可选 连号喷码
典型应用 考勤系统、门禁系统、企
业一卡通系统等
考勤系统、门禁系统、
企业一卡通系统等
考勤系统、门禁系统、
企业一卡通系统等
此外,还包括ATMEL的TEMIC卡系列、TI的低频标签、HITAG卡等。
SmartCardSmartCard
非接触式IC卡工作原理
要解决的三大问题:
(1)非接触卡如何取得工作电压。
(2)读写器与IC卡之间如何交换信息。
(3)防冲突问题:多张卡同时进入读写器发射
的能量区域(即发生冲突)时如何对卡逐一进
行处理。
SmartCardSmartCard
非接触式IC卡与读写器接口电路
SmartCardSmartCard
(1)读写器发射激励信号(一组固定频率的电磁波),数字信
息调制在该射频信号上。
(2)IC卡进入读写器工作区内,被读写器信号激励。在电磁波
的激励下,卡内的LC串联谐振电路产生共振,从而使电容内有
了电荷,当所积累的电荷达到2V时,此电容可以作为电源为其
他电路提供工作电压,供卡内集成电路工作所需。(谐振、整
流、滤波、稳压)。
(3)同时卡内的电路对接收到的谐振信号进行解调,还原数字
信息,对信息进行分析处理,判断发自读写器的命令,如需在
EEPROM中写入或修改内容,还需将2V电压提升到15V左右,以
满足写入EEPROM的电压要求。
(4)IC卡对读写器的命令进行处理后,发射应答信息(将应答
信息调制到射频信号上)给读写器。
(5)读写器接收IC卡的射频信号并进行解调还原出应答信息。
SmartCardSmartCard
初始化与防冲突 (AntiCollion)
如果有2张或2张以上的IC卡进入读写器的工作范
围,称之为冲突(或碰撞Collion),此时就需要
解决如何对多张IC卡逐一处理的问题——防冲突
AntiCollion。
防冲突方案:
位帧防冲突(Bit AntiCollision)
动态时隙-ALOHA法(Slotted-ALOHA法)
SmartCardSmartCard
项目引入——IC卡公交收费机
定额收费
操作方便快捷
可显示余额
非法卡或余额不足报警
可将当班收款额上传总站数据库
总站可调整定额额度。
卡遗失可挂失。
SmartCardSmartCard
项目设计之一——卡型选择
接触式逻辑加密卡
——SLE4406
非接触式ID卡
——EM的4001卡
非接触式逻辑加密卡
——PHILIPS的Mifare卡
操作不方便
没有加密逻辑,不安全
容易实现定额收费,操作方便
快捷,安全性高,通用性强
SmartCardSmartCard
Mifare 1非接触式IC卡
基本性能指标:
卡内器件:
无线智能卡芯片Mifare MF1 IC S50 +天线线圈
标准:
遵从ISO/IEC 14443 Type A 标准
工作频率:
数据传送速率:
106kbit/s (μs/bit)
SmartCardSmartCard
Mifare卡与读写器之间的信号
SmartCardSmartCard
Mifare卡的信号调制方式
Type A与Type B调制程度的比较
TYPE A:
100%ASK
TYPE B:
10%ASK
SmartCardSmartCard
从读写器到卡的调制与编码
载波:fc=
数据传输速率:
调制方式:TYPE A用100%ASK, TYPE B用
10%ASK,
编码方式:TYPE A用改进的MILLER编码,
TYPE B用NRZ编码(不归零制数位编码)
SmartCardSmartCard
从卡到读写器的调制与编码
副载波:fc/16 =
数据传输速率:106kbit/s
调制方式:副载波调制
编码方式:TYPE A用MANCHESTER-ASK,
TYPE B用BPSK-NRZ(二进制相移键控数位编
码)
SmartCardSmartCard
Mifare 1卡片的存储结构
存储容量:1024×8位字
长(即1KB),
存储介质:EEPROM
分为16个扇区(扇区0
~15)
每个扇区有4个块
(Block)块0、块1、块
2和块3。
每个块有16个字节。
一个扇区共有 16
Byte×4 = 64 Byte
SmartCardSmartCard
块功能详解
1)厂商块
地址:扇区0块0
内容:IC卡厂商标志。其中:第0~4个字节为卡序列号
SN,第5个字节为序列号的校验码;第6个字节为卡容
量字节“SIZE” ;第7,8个字节为卡类型号Tagtype;
特性:基于保密性和系统的安全性,这一块在IC卡厂
商编程之后被置为写保护,因此该块不能再复用为应
用数据块。
例:420A7E00368804004481740630373937H
序列号SN:420A7E00H+校验码36H
容量字节SIZE:88H
卡类型号Tag Type:0400H
SmartCardSmartCard
块功能详解
2)数据块
每扇区3个数据块(扇区0只有2个),每块16字节。可由区尾
块中的存取控制位(access bits)配置为:
– 读写块:用作一般的数据保存,可用读/写命令直接读/写
整个块
– 值块:用作数值块,可以进行初始化值、加值、减值、读
值的运算,相应配用的命令为INC/DEC/RESTORE/TRANSFER
命令。
通常数据块中的数据都是需要保密的数据,对这些数据的读/
写/加值/减值均需:符合该块存取条件的要求+通过该扇区的
密码认证。
SmartCardSmartCard
块功能详解
3)区尾块
每个扇区的块3为区尾(Sector Trailer)块:
KEY A(6B)+ Access bits(4B)+KEY B(6B)
例: A0A1A2A3A4A5FF078069 B0B1B2B3B4B5
密钥A:A0A1A2A3A4A5H(缺省值)
密钥B:B0B1B2B3B4B5H(缺省值)
存取控制位:FF078069H (缺省值)
SmartCardSmartCard
Mifare 1 卡存取控制与数据区的关系
Access bits(存取控制位):定义该扇区中4个块的访问
条件,及定义数据块的类型(读写或值)
Mifare 1 卡出厂初始化时,所有扇区块3的初始化值均为
A0A1A2A3A4A5 FF078069 B0B1B2B3B4B5
卡初始化后的存取控制条件为:
密码A永不可读,校验密码A或密码B正确后可以修改;
密码B在校验密码A或密码B正确后可读,可修改;
数据块在校验密码A或密码B正确后可读,可修改。
SmartCardSmartCard
小结:MIFARE 1卡特点一
EEPROM存储器结构提供多应用:
1K字节EEPROM,16个扇区, 4数据块/扇区,16字
节/块。用户可以定义每一个存储器块的访问条件。
每个扇区(每应用)拥有各自独立的密钥,支持带密
钥层次的多应用。
SmartCardSmartCard
Mifare 1 卡的密码认证方式
Mifare 1 卡的密码的认证采用了三次相互认
证的方法,具有很高的安全性。
SmartCardSmartCard
(A)环 :Mifare 1卡向读写器发送一个随机数据RB;
(B)环 :读写器收到RB后向Mifare 1卡片发送一个令牌数据TOKEN
AB=用读写器中存放的密码加密后的RB+读写器发出的一个随机数据
RA;
(C)环 :Mifare 1卡片收到 TOKEN AB 后,用卡中的密码对TOKEN
AB的加密的部分进行解密得到RB’,并校验第一次由(A)环中Mifare
1卡片发出去的随机数RB是否与(B)环中接收到的TOKEN AB中的
RB’相一致;若读写器与卡中的密码及加/解密算法一致,将会有
RB=RB’,校验正确,否则将无法通过校验;
(D) 环 :如果(C)环校验是正确的,则Mifare 1卡片用卡中存放的
密码对RA加密后发送令牌TOKEN BA给读写器 ;
(E)环 :读写器 收到令牌TOKEN BA后,用读写器中存放的密码对
令牌TOKEN BA中的RA(随机数)进行解密得到RA’;并校验第一次
由(B)环中读写器发出去的随机数RA是否与(D)环中接收到 的
TOKEN BA中的RA’相一致;同样,若读写器与卡中的密码及加/解密算
法一致,将会有RA=RA’,校验正确,否则将无法通过校验;
SmartCardSmartCard
(A)环 :Mifare 1卡取随机数RB=1100,KEY1=1010,
加密/解密算法:异或,发送RB给读写器
(B)环 :读写器取随机数RA=0011,KEY2=1010,
加密/解密算法:异或,接收RB
对RB加密:TOKENB=RB异或KEY2=0110,发送
TOKENB+RA
(C)环 :Mifare 1卡片对TOKEN B解密:
RB‘=TOKENB异或KEY1=1100=RB,校验正确;
(D) 环 :Mifare 1卡片对RA加密
TOKENA=RA异或KEY1=1001 ;
(E)环 :读写器 收对TOKEN A解密:
RA’=TOKENA异或KEY2=0011=RA,校验正确
SmartCardSmartCard
小结:MIFARE 1卡特点二
高保密性:
全球唯一SN;
密钥及传输密码保护,各扇区密码独立且有
三套(KEYSET0、1、2)二个(KEY A、KEY B)
密码。
密码认证采用三次相互认证;
存取控制位保护,用户可以定义每一个存储
器块的访问条件
RF信道数据加密
SmartCardSmartCard
Mifare 1非接触式IC卡功能组成
SmartCardSmartCard
POWER OFF状态
IDLE状态
READY状态
ACTIVE状态
HALT状态
RESET
REQUEST 命令
ANTICOLLISION命令
启动防冲突循环
读取卡回送的UID(SN)
HALT命令
SELECT UID命令
应用:
AUTENTICATION/READ
/WRITE/INC/DEC命令
WAKE UP
命令
MIFARE MIFARE 卡卡
防冲突流程防冲突流程
SmartCardSmartCard
小结:MIFARE 1卡特点三
真正的防冲突:
卡芯片与读写芯片中都内嵌防冲突模块,可实
现真正的(硬件)防冲突,可高速识别天线范
围内的多张卡。
SmartCardSmartCard
小结:MIFARE 1卡其他特点
高可靠性:
无线通讯链路使用各种校验机制确保数据
可靠传输
用户更方便:
卡芯片中内建有增值/减值的专项数学运算
电路,非常适合公交/地铁等行业的定额收
费系统
SmartCardSmartCard
实训5 MIFARE 1卡的读写操作与存储结构
按标志连接非接触式IC卡读写器的电源线,电源指示灯
闪亮一下表示连接正确。注意电源+5V与地不可接反。
按标志连接非接触式IC卡读写器与PC机间的通信线,打
开MIFARE系列非接触式IC卡演示软件MWRF,确认通信正
常。
装载密码(Load Key)操作:在RFDEMO软件界面中选择
密码集0(KEYSET0),密码A(KEY A),将扇区0-14的
密码A设置为全F,而将扇区15的密码A设置为全0。启动
密码下载,下载过程中红色指示灯点亮;下载完毕后红
色指示灯熄灭。
SmartCardSmartCard
MIFARE 1卡读写操作:
将MIFARE 1卡按任意方向置入MIFARE开发板天线
有效工作范围内,对MIFARE 1卡的扇区0、1和15
的块0、1、2进行读/写操作。记录读取的卡数据,
标明各块的类型及卡的类型号、序列号、容量及
各扇区的密码和访问权限。
注意:不得随意修改各扇区块3的数据,特别是
访问权限字节,以免造成扇区被锁死。
SmartCardSmartCard
防冲突测试
(1)分别读出并记录二张MIFARE 1卡(分别记为1#卡、2#卡)的
序列号,及其扇区0块1的内容,记录在报告上。
(2)将二张MIFARE 1卡同时放置在读写器天线有效工作范围内,
在RFDEMO软件中执行读操作,根据读出的SN找出被选中的卡
(例如为1#卡)。
(3)在RFDEMO软件中执行写操作,修改扇区0块1的内容并将数
据记录在报告上。
(4)将被选中的卡撤离读写器天线有效工作范围,读出另一张卡
(例如2#卡)的扇区0块1的内容,并将数据记录在报告上。
(5)取走(4)中的卡,重新读出并记录被选中的卡的扇区0块1的
数据,并记录在报告上。
(6)比较上述实验数据,说明MIFARE1卡是否具备防冲突功能。
SmartCardSmartCard
存取控制设置:
(1)读出并记录扇区14块0的内容;修改内容并再次读出,
记录修改后的内容。说明该块的存取控制条件。
(2)修改扇区14的存取控制字节,将扇区14块0设置为校验
密码A/B正确可读,永不可修改。其他各块条件不变。
(3)重复(1),说明修改存取控制字节产生的结果。
(4)将存取控制位恢复为默认值。
注意:严禁修改对块3的设置,否则容易错误将存取控制位
设为永不可写,将无法恢复为默认值。
SmartCardSmartCard
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
存取控制位的结构
1 1 1 1 1 1 1 1
0 0 0 0 0 1 1 1
1 0 0 0 0 0 0 0
0 1 1 0 1 0 0 1
SmartCardSmartCard
存取控制位对块3的控制结构
密码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
SmartCardSmartCard
存取控制位对数据块的控制结构
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
SmartCardSmartCard
查表3:C1X0=0,C2X0=1,C3X0=0,
其他位不变。
对照表1:存取控制字节=EF 07 81 69H
将扇区14块3的内容修改为
FFFFFFFFFFFFEF078169FFFFFFFFFFFF
SmartCardSmartCard
项目设计之二——硬件设计
MCU MIFARE卡
读写模块
EEPROM
存储器
RS232接口
显示 报警
天线 卡
SmartCardSmartCard
Mifare 核心读写模块MCM
功能:读写器MCU与MIFARE卡之间的接口,负责读写卡,
其基本功能包括产生发送/接收射频信号、调制/解调、防
冲突处理和安全管理。
工作频率:。通信速率:106Kbps
工作距离:MCM200——25mm,MCM500——100mm
防冲突:真正的防冲突功能。
安全性与可靠性:每个扇区设有3套密码及其认证和密码
存储器 ,模块与卡片通信时,数据加密 ,多种通信校验
机制
接口:标准MIFARE并行接口
SmartCardSmartCard
MCM与MCU接口电路
直接用数据总线传送地
址和数据:MODE、
USEALE接高电平,
ALE对接;A0~A3悬空
驱动-CS,即
为低时选中(激活)
MCM200模块
MCM200的-IRQ接
;可用查询或中断方式
接收MCM发送的数据
SmartCardSmartCard
项目设计之三——软件设计
读写器与M1卡交换数据的过程:
1)由读写器MCU(微控制器)发送指令给MCM,
2)MCM执行指令并将其转换为射频信号发送给卡;
3)卡接收到来自MCM的指令后,按指令完成其内部的各
种处理,并回送应答信号/数据给MCM;
4)MCM接收卡回送的射频信号并将其转换为数字信号输
出给MCU,读写器MCU读取MCM接收到的应答/数据,
即可完成与M1卡的数据交换。
SmartCardSmartCard
M
C
M
基
本
通
信
指
令
集
SmartCardSmartCard
M
C
M
内
核
特
殊
寄
存
器
SmartCardSmartCard
MIFARE卡的读写操作步骤
激活MCM
MCM软复位
向MCM下载密码(LOAD KEY),校验传输密码正确
后可向MCM的KEY-RAM写入用户自己设定的密码,
以上操作与卡无关。
请求应答(ANSWER TO REQUEST):寻卡
防冲突(ANTICOLLISION):选择唯一一张卡
选择标记(SELECT):激活所选择的卡
认证 (AUTHENTICATION):安全性
读写操作(读、写、加值、减值):交换数据
(READ/WRITE/INCREAMENT/DECREMENT)
停止(HALT):置卡为停止模式,防止重复操作。
SmartCardSmartCard
SOR/LOAD KEY
REQUEST
ANTICOLLISION
READ/WRITE/INC/DEC
HALT
MIFARE MIFARE 卡操作步骤卡操作步骤
AUTHENTICATION
SELECT
卡应答:TAGTYPE(2B)
卡应答:SN(4B)+校验码(1B)
卡应答:SIZE(1B)
卡应答:AE位
SmartCardSmartCard
指令时序
每个指令由7个基本步骤组成,必须按此时序编程才能完成该指令:
(1)初始化,设置各寄存器,特别是BCNTS和BCNTR。
(2)送指令码到DATA,由MCM发送指令。
(3) 设置TOC,MCM准备接收来自卡的应答或数据。
(4)检查DV标志,查询数据接收是否完成。DV标志为”1”表明
MCM与MIFARE卡片之间的传输已经完成,并且主处理机可能已
经从MCM中收到数据,可以进行下一步操作。而DV=0表示数据
接收尚未完成或未能接收到数据,则程序循环检测DV标志直至
DV=1。有一种情况例外,既当定时器溢出时,无论接收是否完成
DV都将被设置为1,同样将进行下一步操作。
(5)清零TOC。
(6) 检查出错标志,若有标志被设置,则进行相应的出错处理,
例如设置出错标志等,并返回主程序;若没有标志被设置,表示
接收正确,将进行下一步操作
(7)MCU从DATA读出MCM接收到的应答或数据。
SmartCardSmartCard
Answer to Request (请求应答)指令
Request 指令将通知
MCM在天线有效的工
作范围(距离)内寻
找MIFARE 1卡。
命令码:26H或52H。
卡收到该指令将回送
卡类型号作为卡应答:TAGTYPE
(2个字节)
SmartCardSmartCard
With a “request std”(26H) instruction only
cards which are not set into a “HALT-
mode” will respond to this request,or it
may be expanded to all cards in the field
with a “request all” (52H) first
option is needed to prevent the MCM from
selecting one card several times.
Difference between
“request std” & “request all”
SmartCardSmartCard
Request:
NOP
NOP
MOV A,#0CH ;设置STACON
MOV R0,#01H
MOVX @R0,A
MOV A,#0EH ;设置BAUDRATE
MOV R0,#05H
MOVX @R0,A
MOV A,#0C0H ;设置ENABLE
MOV R0,#02H
MOVX @R0,A
MOV A,#0C6H ;设置MODE
MOV R0,#07H
MOVX @R0,A
MOV A,#0CH ;再次设置STACON
MOV R0,#01H
MOVX @R0,A
MOV A,#02H ;设置RCODE
MOV R0,#0EH
MOVX @R0,A
SmartCardSmartCard
MOV A,#07H ;设置BCNTS=7bits
MOV R0,#03H
MOVX @R0,A
MOV A,#10H ;设置BCNTR=2Bytes
MOV R0,#04H
MOVX @R0,A
JUDGE_COMMAND: ;选择REQ STD还是REQ ALL
MOV A,R2
XRL A,#01H
JNZ RQT_STD
RQT_ALL:
MOV A,#52H
SJMP RQT_NEXT
RQT_STD:
MOV A,#26H
RQT_NEXT:
MOV R0,#00H ;发送命令码
MOVX @R0,A
NOP
SmartCardSmartCard
MOV A,#0AH ;设置TOC=1ms
MOV R0,#06H
MOVX @R0,A
RQT_STACON:
MOV R0,#01H ;读 STACON
MOVX A,@R0
JNB ,RQT_STACON ;判断 DV=1?
MOV R7,A ;暂存STACON
MOV A,#00H ;清零TOC
MOV R0,#06H
MOVX @R0,A
MOV A,R7 ;判断是否出错
JB ,RQT_TE_ERR
JB ,RQT_BE_ERR
MOV R0,#00H ;读TAGTYPE
MOVX A,@R0
MOV 20H,A
MOV R0,#00H
MOVX A,@R0
MOV 21H,A
MOV B,#00H ;设置 OK 标志
SJMP RQT_EXIT
SmartCardSmartCard
RQT_BE_ERR: ;错误处理
MOV B,#01H
SJMP RQT_EXIT
RQT_TE_ERR:
MOV B,#02H
SJMP RQT_EXIT
RQT_EXIT:
RET
SmartCardSmartCard
AntiCollision 防冲突
如果有多于一张的Mifare 1卡处在MCM天线的有效工作范围(距离)
内,则发生了冲突。AntiCollision操作使MCM能在多张Mifare 1卡中
选择某一张卡。
AntiCollision操作由一个AntiCollision Loop(防冲突循环,内部处理)
来实现。设置STACON寄存器中的AC位启动AntiCollision循环。
MCM发送AntiCollision命令(93H+20H),每张天线范围内的MIFARE 1
卡接收AntiCollision命令后,都将回送自己的SN作为应答。
由于每张卡的SN各不相同,MCM接收到的信息(即SN)至少有1位
即是0又是1(即该位的前、后半部都有负载波调制),防冲突循环找
到第1个冲突位将其置1(排除该位为0的卡),然后查第2个,依次排
除,最后不再有冲突的SN即为最后读取的SN。
SmartCardSmartCard
Anticollision:
NOP
NOP
MOV A, #0CH
SETB ;设置AC=1,启动防冲突
MOV R0,#01H
MOVX @R0,A
ACALL DELAY_500μs ;延迟1000μs
ACALL DELAY_500μs
MOV A,#10H ;设置BCNTS为2Bytes
MOV R0,#03H
MOVX @R0,A
MOV A, #28H ;设置BCNTR为5Bytes
MOV R0,#04H
MOVX @R0,A
SmartCardSmartCard
MOV A, #93H ;发送命令码
MOV R0,#00H
MOVX @R0,A
MOV A,#20H ;发送NVB
MOV R0,#00H
MOVX @R0,A
MOV A,#0AH ;设置TOC为1ms
MOV R0,#06H
MOVX @R0,A
ANTI_STACON:
MOV R0,#01H ;读STACON
MOVX A,@R0
JNB ,ANTI_STACON ;判断 DV=1?
MOV R7,A ;暂存STACON
MOV A, #00H ;清零TOC
MOV R0,#06H
MOVX @R0,A
MOV A,R7 ;判断是否出错
JB , ANTI_TE_ERR
JB , ANTI_BE_ERR
SmartCardSmartCard
MOV R7,#04H
MOV B,#00H
MOV R1,#30H ;设置片内RAM的SN暂存区首地址
MOV R0,#00H
ANTI_LOOP:
MOVX A,@R0 ;读入4字节SN并逐一异或
MOV @R1,A
XRL B,A
INC R1
DJNZ R7,ANTI_LOOP
MOVX A,@R0 ;读入1字节校验码
XRL A,B ;用校验码异或校验SN
JNZ ANTI_CHK_ERR_EXIT ;校验出错
MOV B,#00H ;设置OK标志
AJMP ANTI_BACK
ANTI_TE_ERR: ;错误处理
MOV B,#01H
AJMP ANTI_BACK
ANTI_BE_ERR:MOV B,#0AH
AJMP ANTI_BACK
ANTI_CHK_ERR_EXIT:MOV B,#08H
ANTI_BACK: RET
SmartCardSmartCard
Select Tag 选择卡片操作
Select Tag操作将选中AntiCollision操作所读取的
SN对应的卡,使该卡进入激活状态,只有该卡才
能进行后续的认证及访问操作。
MCM发送Select命令(93H+70H+SN及校验码)
卡接收该命令后将MCM发送的SN与自己的序列
号比较,若一致则该卡被激活(ACTIVE),其他
卡则仍留在READY状态。被选择(激活)的卡将
回送其容量(SIZE)字节作为应答。
SmartCardSmartCard
SELECT:
MOV A,#0CH
MOV R0,#01H
MOVX @R0,A
MOV A,#0F0H ;设置ENABLE
MOV R0,#02H
MOVX @R0,A
MOV A,#38H ;设置BCNTS=7Bytes
MOV R0,#03H
MOVX @R0,A
MOV A,#08H ;设置BCNTR=1 Byte
MOV R0,#04H
MOVX @R0,A
MOV A,#93H ;发送命令码
MOV R0,#00H
MOVX @R0,A
MOV A,#70H ;发送NVB
MOV R0,#00H
MOVX @R0,A
SmartCardSmartCard
MOV R7,#04H
MOV B,#00H
MOV R0,#00H
MOV R1,#40H ;SN暂存区首地址
SELECT_WRT_LOOP:
MOV A,@R1 ;取出ANTICOLLISION指令读取的SN字节
MOVX @R0,A ;发送SN字节给卡
XRL B,A ;SN字节相异或生成校验码
INC R1
DJNZ R7, SELECT_WRT_LOOP
MOV A,B
MOVX @R0,A ;发送校验码
MOV A,#0AH ;SET TOC
MOV R0,#06H
MOVX @R0,A
SmartCardSmartCard
SEL_RD_STACON_AGAIN: ;READ STACON
MOV R0,#01H
MOVX A,@R0
JNB ,SEL_RD_STACON_AGAIN ;判断DV=1?
MOV R6,A ;暂存STACON
MOV A,#00H ;清零TOC
MOV R0,#06H
MOVX @R0,A
MOV A,R6 ;判断是否出错
JB , SEL_TE_ERR
JB , SEL_PE_ERR
JB , SEL_BE_ERR
JB , SEL_CE_ERR
MOV R0,#00H ;读取SIZE字节
MOVX A,@R0
MOV 22H,A ;SIZE字节存入22H
MOV B,#00H ;设置OK 标志
SJMP SEL_EXIT
SmartCardSmartCard
SEL_TE_ERR: ;错误处理
MOV B,#01H
LJMP SEL_EXIT
SEL_PE_ERR:
MOV B,#05H
LJMP SEL_EXIT
SEL_CE_ERR:
MOV B,#02H
LJMP SEL_EXIT
SEL_BE_ERR:
MOV R7,#0AH
LCALL D500US
MOV B,#0BH
SEL_EXIT:
RET
SmartCardSmartCard
Authentication 认证操作
MCM中设有专用的密码存储器(KEY-RAM),
用于存储3个密码集KEYSET0,KEYSET1,
KEYSET2,每一个KEYSET又包含了各个扇区的
KEY A 及KEY B。
Authentication操作就是将KEY-RAM中的密码与
卡中对应的密码进行三次相互认证。
Authentication操作的卡应答以AE位给出;
AE=1,密码出错,未能通过认证;
AE=0,密码正确,通过认证
SmartCardSmartCard
Authetication操作包括3个步骤
1)设置KEYSTACON寄存器,指定Authetication
操作及KEYSET(0、1或2)
2)设置KEYADDR寄存器,指定Authetication操
作、KEYA或KEYB、待认证的扇区号
3)写“命令”(60H或61H)和写“地址”(扇
区号0~15)到DATA寄存器,启动Authetication
操作。
SmartCardSmartCard
READ/WRITE操作
READ/WRITE均需整块操作。
READ:
发送命令码30H+块地址(0~63)
接收指定块的数据(16B)
通常用2次读并比较是否一致来校验是否正确读
WRITE:
发送命令码A0H+块地址(0~63)
接收ACK/NAK应答来校验是否正确接收命令
发送块数据(16B)
接收ACK/NAK应答来校验是否正确写入EEPROM
SmartCardSmartCard
Value Operate 值操作
MIFARE卡专门为公交/地铁等行业的定额
收费系统设有值操作命令,包括
INCREAMENT/DECREAMENT/
TRANSFER/RESTORE
对某块进行值操作的前提是该块已被初始
化为“值块”(Value Block)并且Access
Bits允许值操作。
SmartCardSmartCard
值块的初始化
方法:对某块按固定的格式进行写操作
格式:
address—— 块地址(1B) value—— 值(4B,有符号)
例如,对块地址为01H的块进行值块初始化,初始化值
VALUE=00030000H,则数据格式为
FE 01 FE 01 00030000 FFFCFFFF 00030000
高 低
SmartCardSmartCard
Increment/Decrement/Transfer
Increment:
adds the specified value to the memory value
Decrement:
subtracts the specified value from the memoty value
Transfer:
Each Increment or Decrement instruction manipulating a
standard value block has to be followed by a Transfer
intruction which actually stores the calculated result in
the card memory. Until then, the result is kept in an
internal value buffer resgister.
SmartCardSmartCard
DECREMENT:
入口:块地址addr,值value存放于D_BUF
出口:ACK/NAK
NOP
NOP
MOV A,#10H ;SEND BCNTS(16bits:命令码+块地址)
MOV R0,#03H
MOVX @R0,A
MOV A,#04H ;SEND BCNTR(4bits:ACK/NAK)
MOV R0,#04H
MOVX @R0,A
MOV A,#0C0H ;SEND CODE
MOV R0,#00H
MOVX @R0,A
MOV A,#addr ;SEND BLOCK ADDR
MOV R0,#00H
MOVX @R0,A
SmartCardSmartCard
MOV A,#0AH ;SET TOC=1ms
MOV R0,#06H
MOVX @R0,A
D_wait_value: ;读STACON,判断DV=1?
MOV R0,#01H
MOVX A,@R0
JNB ,D_wait_value
MOV R6,A
MOV A,#00H ;清零TOC
MOV R0,#06H
MOVX @R0,A
MOV A,R6 ;出错判断
JB ,DEC_TE_ERR
JB ,DEC_BE_ERR
AJMP DEC_CONTI
DEC_TE_ERR: ;NOTAGERR
MOV B,#01H
AJMP DEC_EXIT
DEC_BE_ERR:
MOV B,#02H
AJMP DEC_EXIT
SmartCardSmartCard
DEC_CONTI:
MOV R0,#00H ;读入ACK/NAK,
MOVX A,@R0
ANL A,#0BH ;仅检查0,1,3位
CJNE A,#00H,D_N1
MOV B,#07H ;NOTAUTHERR(应答为00000000)
SJMP DEC_NEXT
D_N1:
CJNE A,#0AH,D_N2 ;收到ACK应答(00000101),表示可以DEC
SJMP DEC_NEXT
D_N2:
MOV B,#03H ;其他错误应答(00000011),CODEER
AJMP WRITE_EXIT
SmartCardSmartCard
WRITE_NEXT: ;开始写数据
MOV A,#32 ;SEND BCNTS=32bits(4B VALUE)
MOV R0,#03H
MOVX @R0,A
MOV A,#04H ;SEND BCNTR=4 bits(ACK/NAK)
MOV R0,#04H
MOVX @R0,A
MOV R5,#4 ;送4B 值
MOV R0,#00H
MOV R1,#D_BUF
DEC_VALUE:
MOV A,@R1
MOVX @R0,A
INC R1
DJNZ R5,DEC_VALUE
SmartCardSmartCard
MOV A,#0AH ;SET TOC=1ms
MOV R0,#06H
MOVX @R0,A
DEC_end: ;DV=1?
MOV R0,#01H
MOVX A,@R0
JNB ,DEC_end
MOV A,#00H ;清零TOC
MOV R0,#06H
MOVX @R0,A
Judge_answer:MOV R0,#01H ;出错判断
MOVX A,@R0
JNB ,DEC_error_TE
MOV B,#00H
DEC_ANSWER: ;读入ACK/NAK
MOV R0,#00H
MOVX A,@R0
ANL A,#0FH
CJNE A,#04H,D_ERR1 ;(00000100为VALUE OVERFLOW)
MOV B,#0FEH
SJMP DEC_EXIT
D_ERR1:MOV B,#0FFH ;其他错误
DEC_EXIT:RET
SmartCardSmartCard
TRANSFER
入口: 块地址T_addr
出口:ACK/NAK
TRANS:
NOP
NOP
MOV A,#10H ;SEND BCNTS(16bits:命令码+块地址)
MOV R0,#03H
MOVX @R0,A
MOV A,#04H ;SEND BCNTR(4bits:ACK/NAK)
MOV R0,#04H
MOVX @R0,A
MOV A,#0B0H ;SEND CODE
MOV R0,#00H
MOVX @R0,A
MOV A,#T_addr ;SEND BLOCK ADDR
MOV R0,#00H
MOVX @R0,A
SmartCardSmartCard
MOV A,#10H ;SET TOC=
MOV R0,#06H
MOVX @R0,A
T_end: ;DV=1?
MOV R0,#01H
MOVX A,@R0
JNB ,T_end
MOV A,#00H ;清零TOC
MOV R0,#06H
MOVX @R0,A
Judge_answer: ;出错判断
MOV R0,#01H
MOVX A,@R0
JB ,T_error_BE
JB ,T_error_PE
MOV B,#00H
AJMP NEXT_TRANS
T_error_BE: ;出错处理
MOV B,#03H
SJMP NEXT_TRANS
T_error_PE:
MOV B,#05H
SJMP NEXT_TRANS
SmartCardSmartCard
NEXT_TRANS:
MOV A,#95D ;SET TOC=9ms
MOV R0,#06H
MOVX @R0,A
T_Toc_end: ;DV=1?(EEPROM写入结束否?)
MOV R0,#01H
MOVX A,@R0
JNB ,T_Toc_end
MOV R6,A
MOV A,#00H ;CLEAR TOC
MOV R0,#06H
MOVX @R0,A
MOV A,R6 ;出错判断
JB ,T_TAG_ERR
JB ,T_BIT_ERR
MOV B,00H
SJMP NEXT_ANSWER
T_TAG_ERR: ;出错处理
MOV B,#09H
AJMP T_EXIT
T_BIT_ERR:
MOV B,#0BH
AJMP T_EXIT
SmartCardSmartCard
NEXT_ANSWER: ;读入ACK/NAK
MOV R0,#00H
MOVX A,@R0
ANL A,#0FH
CJNE A,#0AH,T_ERR1 ;(00000101为ACK,TRANSFER OK)
MOV B,#00H
SJMP T_EXIT
T_ERR1:
CJNE A,#04H,T_ERR2 ;(00000100为NAK)
MOV B,#02H
SJMP T_EXIT
T_ERR2:
CJNE A,#05H,WRITE_EXIT ;其他错误
MOV B,#04H
T_EXIT:
RET
SmartCardSmartCard
实训6 非接触式IC卡的读写控制
实训程序将读写器MCU片内RAM中的16个数据写入卡的一个数据块,
然后将该数据块中的数据读出并存入读写器MCU的片内RAM中。
MCU采用查询方式与MCM通信。
实训程序说明:
mode 选择密码集KEYSET0、1、2及密码A、B
sector_nr 认证扇区号(0~15)
R_H_BUF 读入数据缓冲区首地址
R_E_BUF 读入数据暂存区首地址
W_H_BUF 写入数据区首地址
R_addr 被读取的块地址(0~63)
W_addr 被写入的块地址(0~63)
SmartCardSmartCard
实训步骤
用非接触式IC卡读写软件MWRF向MCM中下载密码,读出并记录
MIFARE1卡的TAGTYPE、SN、SIZE,读出并记录卡中某数据块
(如扇区1块0)的数据。
用镊子取出非接触式IC卡开发板上的MCU芯片,将仿真头插入MCU
的IC座。
编译实训程序,设置断点。
打开片内RAM及寄存器窗口,在写数据区(首地址为10H的16个单元)
设置要写入卡中的数据。
天线范围内无卡时运行程序,记录程序停在断点处的相关数据。说明
是否能正确读/写卡,如不能,根据现象定位故障点。
将卡置入天线范围内,运行程序,记录程序停在断点处的相关数据。
说明是否能正确读/写卡,如不能,根据现象定位故障点。
SmartCardSmartCard
实训程序:
mode EQU 00H ;设置KEYSET=KEYSET0,使用密码A
sector_nr EQU 01H ;设置认证扇区为扇区1
R_H_BUF EQU 40H ;读入数据缓冲区
R_E_BUF EQU 50H ;读入数据暂存区
W_H_BUF EQU 10H ;写入数据区
R_addr EQU 04H ;被读取的块地址(扇区1的块0)
W_addr EQu 05H ;被写入的块地址(扇区1的块1)
SmartCardSmartCard
ORG 0000H
AJMP MAIN
ORG 0050H
MAIN: MOV SP,#60H ;重新设置堆栈
CLR EA ;关闭所有中断
CLR
SETB ;关闭MCM200
NOP
NOP
CLR ;激活MCM200
NOP
LCALL D500MS
START: NOP
NOP
MOV A,#80H ;SOR软件复位
MOV R0,#01H
MOVX @R0,A
NOP
NOP
LCALL D500MS
CLR ;再次激活MCM200
CLR
SmartCardSmartCard
MOV R2,#01H ;选择REQUEST ALL 指令
LCALL REQUEST ;请求响应REQUEST
SETB ;断点①,查看TAGTYPE——(20H)(21H)
LCALL ANTICOLLISION ;防冲突ANTICOLLISION
SETB ;断点②,查看SN——(30H)~(34H)
LCALL SELECT ;选择卡片SELECT
SETB ;断点③,查看SIZE——(22H)
LCALL LOAD_KEY ;下载密码
SETB
LCALL AUTH ;密码认证AUTHENTICATION
SETB
LCALL WRITE ;写数据WRITE
SETB
LCALL READ ;读数据READ
SETB ;断点④,查看数据——
NOP ; (40H)~(4FH),(50H)~(5FH)
NOP
LCALL HALT ;停止
LJMP START
SJMP $
SmartCardSmartCard
SmartCardSmartCard
进阶项目
将2张以上的MIFARE1卡置入天线工作范围
内,运行程序,该程序是否能实现防冲突
功能?
设卡的扇区1块0用于存储公交预付金额
(存储格式自拟),请修改程序以实现公
交收费。