非接触式 ic 卡技术
DESCRIPTION
非接触式 IC 卡技术. 电子与信息工程学院. 提 纲. 非接触式 IC 卡概述 系统构成 / 分类 / 国际标准 非接触式 IC 卡工作原理 能量传递 / 信息传递 / 防冲突 非接触式 IC 卡芯片技术 MIFARE 1 非接触式 IC 卡接口技术 MIFARE 1. 为什么要使用非接触式 IC 卡 ?. 在频繁操作的场合,如门禁、考勤、小额电子钱包(公交收费、食堂收费、高速公路收费、停车场收费)、身份认证等场合,接触式 IC 卡越来越明显的暴露出其弊端:. 容易磨损 操作速度慢 使用不方便. - PowerPoint PPT PresentationTRANSCRIPT
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 卡读写器:卡接口设备,阅读器,
寻呼器
I C非接触式 卡读写器 I C非接触式 卡
数据
时序
能量
耦合元件(线圈、微波天线)
SmartCardSmartCard
非接触式 IC 卡的基本构成 非接触式 IC 卡:芯片 + 天线 + 卡基
耦合元件
外壳
芯片
SmartCardSmartCard
SmartCardSmartCard
非接触式 IC 卡读写器的构成
高频模块(发送器和接收器)、控制单元耦合元件(天线)
SmartCardSmartCard
非接触式 IC 卡的特点 可靠性高、寿命长。 非接触式 IC 卡与读写器之间无机械接触,避免了由于接
触读写而产生的各种故障。非接触式 ID 卡表面无裸露的芯片,无须担心芯片脱落、静电击穿、弯曲、损坏等问题,既便于卡片的印刷,又提高了卡片使用的可靠性。
操作快捷便利。 动态处理。 成本较高。
SmartCardSmartCard
非接触式 IC 卡的分类按片内 IC :存储卡、逻辑加密卡、 CPU 卡按工作距离:密耦合卡、近耦合和疏耦合卡 按工作频率的高低 : 125kHz 的低频卡( 30 k
Hz ~300 kHz ), 13.56MHz 的高频或射频卡( 3MHz~30 MHz ), 915MHz 、 2.45GHz的超高频卡( 300MHz ~3GHz )、 5.8GHz的微波卡( >3GHz )。
按卡内芯片供电方式:卡内带电池的有源卡和卡内无电池、由读写器以无线感应方式供电的无源卡
按使用过程中的读写方式:只读卡( ID 卡)和读写卡 (带 EEPROM )
SmartCardSmartCard
EM ID 厚卡
EM ID 薄卡
PHILIPS MIFARE 1 卡
TI (德州仪器)
Tag-it 电子标签 手表卡与钥匙扣卡
SmartCardSmartCard
特点频段
工作频率 数据传输速率
读写距离 读写区域
低频 125~134KHz
慢 适中 (<1m)
较为均匀
高频 13.56MHz 较快 适中 (<1m)
较为均匀
超高频 860~960MHz
快 远 (<10m) 很难定义
不同频段射频卡的特点
SmartCardSmartCard
非接触式 IC 卡的国际标准标准组织 阵营 频段 技术规范
EPCglobal 全球产品电子代码管理中心
欧美企业 沃尔玛、思科、敦豪快递、麦德龙和吉列等
UHF(860-960 MHz )
电子产品代码 (EPC) 、电子标签规范和互操作性、识读器 - 电子标签通信协议、中间件软件系统接口等
ISO/IEC 国际标准组织 /国际电工委员会
全球非盈利工业标准组织
多个频段 识别卡与身份识别ISO/IEC14443
自动识别 ISO/IEC15693
ISO/IEC18000
UID 泛在技术核心组织
日本电子厂商、 IT企业
2.45GHz和13.56MHz
电子标签超微芯片部分规格
SmartCardSmartCard
IC卡 读写器 国际标准 读写距离 工作频率 CICC CCD ISO/IEC10536 密耦合(0~1cm) 0~30MHz PICC PCD ISO/IEC14443 近耦合(7~10cm) VICC VCD ISO/IEC15693 疏耦合(<1m)
<135kHz, 6. 75MHz, 13. 56MHz, 27. 125MHz
注释: 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 :在 13.56MHz 通信的空中接口的参数;18000-4 :在 2.45GHz 通信的空中接口的参数;18000-5 : 5.8GHz 通信的空中接口的参数;18000-6 : 860-960MHz 通信的空中接口的参数;18000-7 : 433MHz 通信的空中接口的参数;
SmartCardSmartCard
目前 13.56MHz 的产品主要包括: 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
尺寸 85.5x54x0.82mm 85.5x54x2mm 85.5x54x1.05mm
封装材料 PVC 、 ABS PVC,ABS PVC
封装工艺 层压封装 手工粘贴 手工层压号码 可选 连号喷码
典型应用 考勤系统、门禁系统、企业一卡通系统等
考勤系统、门禁系统、企业一卡通系统等
考勤系统、门禁系统、企业一卡通系统等
此外,还包括 ATMEL 的 TEMIC 卡系列、 TI 的低频标签、 HITAG 卡等。
SmartCardSmartCard
非接触式 IC 卡工作原理 要解决的三大问题:
( 1)非接触卡如何取得工作电压。
( 2)读写器与 IC 卡之间如何交换信息。
( 3 )防冲突问题:多张卡同时进入读写器发射的能量区域(即发生冲突)时如何对卡逐一进行处理。
SmartCardSmartCard
非接触式 IC 卡与读写器接口电路
电压调节
解调器
读写器PCD
卡PI CC
CLOCK
VDD
GND
数据输出
数据输入
卡内嵌天线
读写器天线
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 标准工作频率: 13.56MHz数据传送速率: 106kbit/s ( 9.4μs/bit )
SmartCardSmartCard
Mifare 卡与读写器之间的信号
SmartCardSmartCard
Mifare 卡的信号调制方式
Type A与 Type B调制程度的比较
TYPE A :
100%ASK
TYPE B :
10%ASK
SmartCardSmartCard
从读写器到卡的调制与编码载波 :fc=13.56MHz
数据传输速率: 13.56MHz/128=106kbit/s( 9.4μs/bit )
调制方式: TYPE A用 100%ASK, TYPE B用 10%ASK,
编码方式: TYPE A用改进的MILLER编码, TYPE B用 NRZ编码(不归零制数位编码)
SmartCardSmartCard
从卡到读写器的调制与编码副载波 :fc/16 =847.5kHz 数据传输速率: 106kbit/s
调制方式:副载波调制编码方式: TYPE A用MANCHESTER-ASK,
TYPE B用 BPSK-NRZ(二进制相移键控数位编码 )
SmartCardSmartCard
Mifare 1 卡片的存储结构 存储容量: 1024×8位字长(即 1KB ),
存储介质: EEPROM 分为 16个扇区(扇区 0
~15 )每个扇区有 4个块( Blo
ck )块 0 、块 1 、块 2和块 3 。
每个块有 16个字节。 一个扇区共有 16 Byte×4 = 64 Byte
0( )块 厂商标志
1块2块3块0块
1块2块3( A+ + B)块 密码 存取控制 密码
0块
1块2块3( A+ + B)块 密码 存取控制 密码
扇区0
扇区1
.
.
.
.
.
.
.
.
扇区15
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 ( 6
B ) 例: 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 卡的密码的认证采用了三次相互认证的方法,具有很高的安全性。
(A)RB
(E) (B)TOKEN AB (C)
(D)TOKEN BA
非 接 触式卡读写器
Mifare 1
卡片
SmartCardSmartCard
( A )环 : Mifare 1 卡向读写器发送一个随机数据 RB;( B )环 :读写器收到 RB后向Mifare 1 卡片发送一个令牌数据 TOK
EN AB= 用读写器中存放的密码加密后的 RB+ 读写器发出的一个随机数据 RA;( C )环 : Mifare 1 卡片收到 TOKEN AB 后,用卡中的密码对 TOK
EN 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 ,发送 TOKE
NB+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 卡功能组成
波形转换正弦波→方波
整流
Modu/ DeModu/调制 解调
电压调节 POR上电复位
ATR
Anti Col l i si on
Sel ectAppl i cati on
Authenti cati on&
Access Control
存储区接口
Control &
Ari thm. Uni t
RAM
ROM
Cri pto Uni t能量
存储区
EEPROM
CLOCK
DATA
MIFARE 1卡片内部结构RF I nterface射频接口电路
Di gi tal Secti on数字电路部分卡片
天线
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 neverKEYA|B
KEYA|B
0 1 0 never Never KEYA|B neverKEYA|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|BKEYA|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, re
store
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
项目设计之二——硬件设计
MCUMIFARE 卡
读写模块EEPROM
存储器
RS232 接口
显示 报警
天线 卡
SmartCardSmartCard
Mifare 核心读写模块 MCM功能:读写器 MCU 与MIFARE卡之间的接口,负责读写
卡,其基本功能包括产生发送 /接收射频信号、调制 / 解调、防冲突处理和安全管理。
工作频率: 13.56MHz 。通信速率: 106Kbps 工作距离: MCM200——25mm , MCM500——100mm
防冲突:真正的防冲突功能。安全性与可靠性:每个扇区设有 3套密码及其认证和密码存储器 ,模块与卡片通信时,数据加密 ,多种通信校验机制
接口:标准MIFARE并行接口
SmartCardSmartCard
MCM 与 MCU 接口电路
MCU控制器MCS-51
MCM模块
-CSP3. 3
-RD
-WR
H
-RD
-WR
MODE
H USEALE
ALE
P3. 2
ALE
- I RQ
P0. 0~P0. 7 D0~D7
直接用数据总线传送地址和数据: MODE 、 USEALE 接高电平, ALE对接;A0~A3悬空
P3.3驱动 -CS ,即 P3.3 为低时选中(激活)MCM200 模块
MCM200 的 -IRQ 接 P3.2;可用查询或中断方式接收MCM发送的数据
SmartCardSmartCard
项目设计之三——软件设计读写器与 M1 卡交换数据的过程:1)由读写器 MCU (微控制器)发送指令给MCM ,
2 ) MCM执行指令并将其转换为射频信号发送给卡;
3)卡接收到来自MCM 的指令后,按指令完成其内部的各种处理,并回送应答信号 / 数据给MCM;
4)MCM接收卡回送的射频信号并将其转换为数字信号输出给MCU,读写器 MCU 读取MCM 接收到的应答/ 数据,即可完成与 M1 卡的数据交换。
SmartCardSmartCard
M
C
M
基
本
通
信
指
令
集
指 令 指令代码(hex) 相关的出错标志 接收卡片上数据
Answer to Request
(Request 的应答)
Request std 26
Request al l 52
TE,BE Tagtype
Anti Col l i si on
(防重叠) 93 TE, BE Seri al Number
Sel ect Tag
(选卡片) 93 TE, BE, PE,CE Si ze
Authenti cati on
(认证)
Auth_1a 60
Auth_1b 61
TE, BE, PE,CE /
Load KEY(存取密码) / AE
Read (读) 30 TE, BE, PE,CE Data
Wri te (写) A0 TE, BE /
I ncrement (增值) C1 TE, BE /
Decrement (减值) C0 TE, BE /
Restore (重储) C2 TE, BE /
Transfer (传送) B0 TE, BE /
Hal t (停机) 50 TE, BE /
SmartCardSmartCard
寄存器名 地址 读(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 0AH 10 N/A KEY-BYTE-WRITE
KEYSTACON 0BH 11 -- -- -- -- -- -- -- -- AL 0 -- -- -- -- KS1 KS0
KEYADDR 0CH 12 N/A AL AB A5 A4 A3 A2 A1 A0
0DH 13
RCODE 0EH 14 N/A - - - - - - - - 0 0 RC1 RC0
0FH 15
MCM
内
核
特
殊
寄
存
器
SmartCardSmartCard
MIFARE 卡的读写操作步骤 激活MCM MCM软复位向MCM下载密码( LOAD KEY ),校验传输密码正确后可向MCM 的 KEY-RAM 写入用户自己设定的密码,以上操作与卡无关。
请求应答( ANSWER TO REQUEST ):寻卡 防冲突( ANTICOLLISION ):选择唯一一张卡 选择标记( SELECT ):激活所选择的卡 认证 ( AUTHENTICATION ):安全性 读写操作(读、写、加值、减值):交换数据 ( REA
D/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个字节)
初始化BCNTS=7bi ts设置
BCNTR=2Byte
开始
REQUEST ALL选择REQUEST STD或REQUEST发送 命令
TOC=1ms设置
STACON读
DV=1?
TOC清零
判断是否出错?
TAG TYPE读
RET
出错处理
Y
N
Y
N
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)option.The 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 , AJUDGE_COMMAND : ;选择 REQ STD还是 REQ ALL MOV A , R2 XRL A , #01H JNZ RQT_STDRQT_ALL : MOV A , #52H SJMP RQT_NEXTRQT_STD : MOV A , #26HRQT_NEXT : MOV R0 , #00H ;发送命令码 MOVX @R0 , A NOP
SmartCardSmartCard
MOV A , #0AH ;设置 TOC=1ms MOV R0 , #06H MOVX @R0 , ARQT_STACON : MOV R0 , #01H ;读 STACON MOVX A , @R0 JNB ACC.7 , RQT_STACON ;判断 DV=1? MOV R7 , A ;暂存 STACON MOV A , #00H ;清零 TOC MOV R0 , #06H MOVX @R0 , A MOV A , R7 ;判断是否出错 JB ACC.6 , RQT_TE_ERR JB ACC.3 , 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_EXITRQT_TE_ERR : MOV B , #02H SJMP RQT_EXITRQT_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 ACC.0 ;设置 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 , AANTI_STACON : MOV R0 , #01H ;读 STACON MOVX A , @R0 JNB ACC.7 , ANTI_STACON ;判断 DV=1? MOV R7 , A ;暂存 STAC
ON MOV A , #00H ;清零 TOC MOV R0 , #06H MOVX @R0 , AMOV A , R7 ;判断是否出错 JB ACC.6 , ANTI_TE_ERR JB ACC.3 , ANTI_BE_ERR
SmartCardSmartCard
MOV R7 , #04H MOV B , #00H MOV R1 , #30H ;设置片内 RAM 的 SN暂存区首地址 MOV R0 , #00HANTI_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_BACKANTI_TE_ERR : ;错误处理 MOV B , #01H AJMP ANTI_BACKANTI_BE_ERR : MOV B , #0AH AJMP ANTI_BACKANTI_CHK_ERR_EXIT : MOV B , #08HANTI_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 ACC.7 , SEL_RD_STACON_AGAIN ;判断 DV=1? MOV R6 , A ;暂存 STACON MOV A , #00H ;清零 TOC MOV R0 , #06H MOVX @R0 , A MOV A , R6 ;判断是否出错 JB ACC.6 , SEL_TE_ERR JB ACC.5 , SEL_PE_ERR JB ACC.3 , SEL_BE_ERR JB ACC.4 , 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寄存器,指定 Autheticati
on 操作及 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 应答来校验是否正确写入 EEPRO
M
SmartCardSmartCard
Value Operate 值操作MIFARE卡专门为公交 /地铁等行业的定额收费系统设有值操作命令,包括 INCREAMENT/DECREAMENT/
TRANSFER/RESTORE对某块进行值操作的前提是该块已被初始
“ ”化为 值块 ( Value Block)并且 Access Bits允许值操作。
SmartCardSmartCard
值块的初始化方法:对某块按固定的格式进行写操作格式: address—— 块地址( 1B ) value—— 值( 4B ,有符号)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
address address address address VALUE VALUE VALUE
例如,对块地址为 01H 的块进行值块初始化,初始化值 VALUE=00030000H ,则数据格式为FE 01 FE 01 00030000 FFFCFFFF 00030000高 低
SmartCardSmartCard
Increment/Decrement/TransferIncrement:
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,AD_wait_value: ;读 STACON ,判断 DV=1 ? MOV R0,#01H MOVX A,@R0 JNB ACC.7,D_wait_value MOV R6,A MOV A,#00H ;清零 TOC MOV R0,#06H MOVX @R0,A MOV A,R6 ;出错判断 JB ACC.6,DEC_TE_ERR JB ACC.3,DEC_BE_ERR AJMP DEC_CONTIDEC_TE_ERR: ; NOTAGERR MOV B,#01H AJMP DEC_EXITDEC_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_NEXTD_N1: CJNE A,#0AH,D_N2 ;收到 ACK 应答( 00000101 ),表示可以 DEC SJMP DEC_NEXTD_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_BUFDEC_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,ADEC_end: ; DV=1 ? MOV R0,#01H MOVX A,@R0 JNB ACC.7,DEC_end MOV A,#00H ;清零 TOC MOV R0,#06H MOVX @R0,AJudge_answer:MOV R0,#01H ;出错判断 MOVX A,@R0 JNB ACC.6,DEC_error_TEMOV B,#00HDEC_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_EXITD_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=1.5ms MOV R0,#06H MOVX @R0,AT_end: ; DV=1 ? MOV R0,#01H MOVX A,@R0 JNB ACC.7,T_end MOV A,#00H ;清零 TOC MOV R0,#06H MOVX @R0,AJudge_answer: ;出错判断 MOV R0,#01H MOVX A,@R0 JB ACC.3,T_error_BE JB ACC.6,T_error_PE MOV B,#00H AJMP NEXT_TRANST_error_BE: ;出错处理 MOV B,#03H SJMP NEXT_TRANST_error_PE: MOV B,#05H SJMP NEXT_TRANS
SmartCardSmartCard
NEXT_TRANS: MOV A,#95D ; SET TOC=9ms MOV R0,#06H MOVX @R0,AT_Toc_end: ; DV=1 ?( EEPROM 写入结束否?) MOV R0,#01H MOVX A,@R0 JNB ACC.7,T_Toc_end MOV R6,A MOV A,#00H ; CLEAR TOC MOV R0,#06H MOVX @R0,A MOV A,R6 ;出错判断 JB ACC.6,T_TAG_ERR JB ACC.3,T_BIT_ERR MOV B,00H SJMP NEXT_ANSWERT_TAG_ERR: ;出错处理 MOV B,#09H AJMP T_EXITT_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_EXITT_ERR1: CJNE A,#04H,T_ERR2 ;( 00000100 为 NAK ) MOV B,#02H SJMP T_EXITT_ERR2: CJNE A,#05H,WRITE_EXIT ;其他错误 MOV B,#04HT_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 0050HMAIN: MOV SP,#60H ;重新设置堆栈 CLR EA ;关闭所有中断 CLR P3.4 SETB P3.3 ;关闭MCM200 NOP NOP CLR P3.3 ;激活MCM200 NOP LCALL D500MSSTART: NOP NOP MOV A,#80H ; SOR软件复位 MOV R0,#01H MOVX @R0,A NOP NOP LCALL D500MS CLR P3.3 ;再次激活MCM200 CLR P3.3
SmartCardSmartCard
MOV R2,#01H ;选择 REQUEST ALL 指令 LCALL REQUEST ;请求响应 REQUEST SETB p3.4 ;断点① , 查看 TAGTYPE—— ( 20H )( 21H ) LCALL ANTICOLLISION ;防冲突 ANTICOLLISION SETB P3.4 ;断点② , 查看 SN—— ( 30H ) ~ ( 34H ) LCALL SELECT ;选择卡片 SELECT SETB P3.4 ;断点③ , 查看 SIZE—— ( 22H ) LCALL LOAD_KEY ;下载密码 SETB P3.4 LCALL AUTH ;密码认证 AUTHENTICATION SETB P3.4 LCALL WRITE ;写数据 WRITE SETB P3.4 LCALL READ ;读数据 READ SETB P3.4 ;断点④ , 查看数据—— NOP ; ( 40H ) ~ ( 4FH ),( 50H ) ~ ( 5FH ) NOP LCALL HALT ;停止 LJMP START SJMP $
SmartCardSmartCard
开始
定义堆栈区
MCM选中
500ms延时
软件复位
数据缓冲区与数据暂存区数据是否一致?
是否数据块尾?
Y
500ms延时
MCM选中
REQUEST ALL
ATNTI COLLI SI ON
SELECT
LOAD KEY
AUTHENTI CATI ON
ADDR块地址送
R1数据缓冲区首地址送16 R7数据长度 送
READ
读入数据块到数据缓冲区
R1数据暂存区首地址送16 R7数据长度 送
READ
读入数据块到数据暂存区
Y
ACALL DI SPLAYI NC R1
结束
N
N
Y
开始
定义堆栈区
MCM选中
500ms延时
软件复位
500ms延时
MCM选中
REQUEST ALL
ATNTI COLLI SI ON
SELECT
LOAD KEY
AUTHENTI CATI ON
ADDR块地址送
WRI TE
结束
SmartCardSmartCard
进阶项目
将 2张以上的 MIFARE1 卡置入天线工作范围内,运行程序,该程序是否能实现防冲突功能?
设卡的扇区 1 块 0 用于存储公交预付金额(存储格式自拟),请修改程序以实现公交收费。