【高频RFID】ISO 14443标准详解
文章目录
一、引言
RFID(Radio Frequency Identification)技术是一种利用无线电信号自动识别特定目标并读写相关数据的无线通信技术。高频RFID技术,特别是工作在13.56MHz的系统,因其在读写距离、数据速率和成本方面的良好平衡,成为了门禁系统、非接触式支付(如公交卡、校园一卡通)、电子护照、身份证以及物流管理等领域的主流选择。这些应用大多遵循由国际标准化组织(ISO)和国际电工委员会(IEC)联合制定的ISO/IEC 14443标准,该标准定义了邻近式卡(Proximity Card)的通信协议。
二、标准概述
ISO/IEC 14443标准旨在规范13.56MHz频率下非接触式识别卡(PICC)与读写器(PCD)之间的通信。该标准由物理特性、射频功率与信号接口、初始化和防冲突、传输协议四个部分组成。
2.1 14443标准A、B对比表
ISO/IEC 14443标准根据信号接口不同又可分为Type A、Type B两类,两种标准具备两种互不兼容的通信调制方式和协议。
| 14443-A与14443-B标准比对 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 14443-A标准 | 14443-B标准 | ||||||||||
| 物理特性 | PICC的物理尺寸和机械特征没有区别 | ||||||||||
| 射频 功率 与 信号 接口 |
工作频率 | 13.56MHz | |||||||||
| 通讯速率 | 106 kbit/s | ||||||||||
| 工作特性 | 抗干扰能力强 | 电源稳定性好,安全性更高 但易受外界环境干扰 |
|||||||||
| 向卡片 发送数据 PCD->PICC |
100% ASK (幅移键控)调制 Miller编码 |
10% ASK (幅移键控)调制 NRZ (不归零) 编码 |
|||||||||
| 向读卡器 发送数据 PICC->PCD |
OOK(开关键控)调制 曼彻斯特编码 |
BPSK(二进制相移键控)调制 NRZ (不归零) 编码 |
|||||||||
| 初始化 和 防冲突 |
防冲突 | 基于比特冲突检测机制 | 基于时隙ALOHA 协议 | ||||||||
| UID | 通常为4字节或7字节 | PUPI,4字节 | |||||||||
| 传输协议 | I/R/S-Block协议 | ||||||||||
| 推动厂商 | 飞利浦、恩智浦 (NXP) | 摩托罗拉、意法半导体 |
|||||||||
| 应用场景 | MIFARE系列、门禁、交通、票务 | 居民身份证、公交一卡通 | |||||||||
2.2 标准PICC对比表
在14443-A标准之上,不同的芯片制造商和标准组织开发了多种多样的卡片类型,它们在安全机制、内存结构、操作系统和应用功能上有天壤之别。卡片分为几个主要类型如下:
| PICC类型对比 | |||||
|---|---|---|---|---|---|
| 卡片家族 | Mifare家族 | CPU卡 | |||
| 协议标准 | 14443-A | 14443-B | |||
| 类型 | Mifare_UltraLight M0卡 |
Mifare_Classic M1卡(S50、S70) |
Mifare_Plus | Mifare_DESFire | CPU卡 |
| 安全性 | 无安全保护,数 据可随意读取 |
专有的流密码算 法,但已彻底破 解,安全性很低 |
AES-128加密,Classic的安全升级版,具备密钥管理和访问控制 | AES/TDES加密,具备真随机数生成器、安全密钥存储等特性,安全性高 | RSA、ECC、DES、AES等多种国际标准算法,安全性极高 |
| 数据存储 | 线性地址空间;页式存储,每页4字节 | 固定扇区存储;每个扇区4个数据块,每块16字节 | 固定扇区存储;每个扇区4个数据块,每块16字节 | 灵活文件系统 | 复杂文件目录 |
| 应用场景 | 地铁单程票、演唱会门票、NFC标签 | 门禁卡、公交卡、饭卡 | 安全性更高的公交卡、门禁 | 高端一卡通、电子钱包 | 二代身份证、金融IC卡 |
三、14443-A标准详解
3.1 标准命令代码
| 命令编码 | 命令类型 | 命令功能 |
|---|---|---|
| 0x00 | 读写器命令 | 取消当前指令 |
| 0x03 | 读写器命令 | CRC计算 |
| 0x04 | 读写器命令 | 发送数据 |
| 0x08 | 读写器命令 | 接收数据 |
| 0x0C | 读写器命令 | 发送并接收数据 |
| 0x0E | 读写器命令 | 密钥验证 |
| 0x0E | 读写器命令 | 读写器复位 |
| 0x26 | Type_A卡片命令 | 寻天线区内未进入休眠状态的Type_A卡 |
| 0x30 | Type_A卡片命令 | 读取卡片块数据 |
| 0x50 | Type_A卡片命令 | 休眠卡片 |
| 0x52 | Type_A卡片命令 | 寻天线内全部卡片 |
| 0x60 | Type_A卡片命令 | 验证A密钥 |
| 0x61 | Type_A卡片命令 | 验证B密钥 |
| 0x93 | Type_A卡片命令 | 一次防冲撞 |
| 0x95 | Type_A卡片命令 | 二次防冲撞 |
| 0xA0 | Type_A卡片命令 | 写入卡片块数据 |
| 0xB0 | Type_A卡片命令 | 保存缓冲区中数据 |
| 0xC2 | Type_A卡片命令 | 块数据写入缓冲区 |
3.2 通讯命令协议格式
PICC通信基本命令包含REQA(寻卡)、WAKE-UP(唤醒寻卡)、ANTICOLLISION(防冲突)、SELECT(选卡)、HALT(休眠)5个命令。通过基本命令建立PICC和PCD的基础通讯链路。
3.2.1 寻卡命令协议(REQA/WAKE-UP)
| 寻卡命令协议(PCD -> PICC) | ||
|---|---|---|
| 请求命令 | REQA | WAKE-UP |
| 命令说明 | 探测天线区内未进入休眠的Type_A卡 | 探测并唤醒处于休眠状态的Type_A卡 |
| 请求格式 | 0x26 | 0x52 |
| 发送方式 | 7个数据位发送,LSB首先发送(不加奇偶校验) | |
| 响应命令 | ATQA | |
| 命令说明 | 2字节数据(可判断卡片类型) Bit1 ~ Bit5:比特帧防冲突;Bit6,Bit9 ~ Bit16:预留 Bit8、Bit7:UID长度(00:级联级别1,4字节;01:级联级别2,7字节;10:级联级别3,10字节;11:预留) |
|
| 响应格式 |
卡片类型(低字节在前) 0x44 0x00:Mifare_UltraLight(M0卡,不带加密) 0x04 0x00:Mifare_One(S50)(M1卡,带加密) 0x02 0x00:Mifare_One(S70)(M1卡,带加密) 0x08 0x00:Mifare_Pro(X)(M0卡,不带加密) 0x44 0x03:Mifare_DESFire(M0卡,不带加密) |
|
3.2.2 防冲突命令协议(ANTICOLLISION)
| 防冲突命令协议(PCD -> PICC) | |||
|---|---|---|---|
| 请求命令 | ANTICOLLISION | ||
| 命令说明 | 通过位冲突检测获取卡的完整 UID | ||
| 命令格式:[SEL] [NVB] | |||
| SEL | 选择代码 | 0x93(级联级别 1)、0x95(级联级别 2)、0x97(级联级别 3) | |
| 4字节UID(一次防冲撞):0x93 7字节UID(两次防冲撞):0x93、0x95 10字节UID(三次防冲撞):0x93、0x95、0x97 |
|||
| NVB | 有效位数字节 | 0x20表示 PCD 发送 32 位 (4 字节) UID 信息 | |
| 响应命令 | ATQA | ||
| 命令格式:[UID CLn] [BCC] | |||
| UID CLn | UID数据 | 当前级联级别的UID数据 | |
| BCC | UID 校验字节 | 对当前级联级别的所有 UID 字节进行连续异或(XOR)运算获得 | |
3.2.3 选卡命令协议(SELECT)
| 选卡命令协议(PCD -> PICC) | |||
|---|---|---|---|
| 请求命令 | SELECT | ||
| 命令说明 | 选定指定 UID 卡片 | ||
| 命令格式:[SEL] [NVB] [UID] [BCC] | |||
| SEL | 选择码 | 0x93(串联级别 1)、0x95(串联级别 2)、0x97(串联级别 3) | |
| 4字节UID(一次选卡):0x93 7字节UID(两次选卡):0x93、0x95 10字节UID(三次选卡):0x93、0x95、0x97 |
|||
| NVB | 有效位数字节 | 固定值0x70,表示发送完整的7字节数据 (SEL+NVB+32位UID片段+BCC ) | |
| UID | 卡片UID | 1字节选卡(4字节) 7字节选卡(4字节、3字节) 10字节选卡(4字节、4字节、2字节) |
|
| BCC | UID 校验字节 | 对当前级联级别的所有 UID 字节进行连续异或(XOR)运算获得 | |
| 响应命令 | SAK | ||
| 命令格式:1字节(Bit1~Bit8) | |||
| Bit2 | 级联位 | 0:表示UID完整 1:表示UID尚未完整,还有下一级。读卡器需要继续进行CL2的防冲突循环 |
|
| Bit6 | 协议支持状态 | 0:不支持 14443-4 传输协议 1:支持 14443-4 传输协议 |
|
3.2.4 休眠命令协议(HALT)
| 休眠命令协议(PCD -> PICC) | |||
|---|---|---|---|
| 请求命令 | HALT | ||
| 命令说明 | 卡片进入休眠状态,不再响应普通寻卡请求 | ||
| 命令格式:[0x50] [0x00][CRC_A] | |||
| CRC_A | CRC_16校验 | 完整的 HALT 命令:0x50, 0x00, 0x9D, 0x6D | |
3.3 应用命令协议格式
3.3.1 密码认证协议
对卡片的某个扇区进行读/写操作前,必须先通过该扇区的密码认证。
| 密码认证协议(PCD -> PICC) | ||
|---|---|---|
| 请求命令 | PICC_AUTHENT | |
| 命令说明 | 对指定扇区进行密码认证 | |
| 命令格式:[Key_Code] [Block_Address] [Key] [UID] | ||
| Key_Code | Key认证类别 | 0x60(使用密钥A认证密码)、0x61(使用密钥B认证密码) |
| Block_Address | 认证块地址 | 同一扇区下的块地址(0~3)仅需进行一次认证 |
| Key | 6字节扇区密码 | 扇区默认密码一般是6个0xFF或6个0x00,密钥A和密钥B可能存在不同密码 |
| UID | 4字节UID | 选中标签的UID数据(级联级别1) |
3.3.2 读取块数据协议
| 读取块数据协议(PCD -> PICC) | |||
|---|---|---|---|
| 请求命令 | PICC_READ | ||
| 命令说明 | 读取指定块数据 | ||
| 命令格式:[0x30] [Block_Address] [CRC_A] | |||
| Block_Address | 读取块地址 | 每个扇区的前3块用于存储数据可读取;第4块用于存储密钥和访问控制位 | |
| CRC_A | CRC_16校验 | 数据CRC校验 | |
3.3.3 写入块数据协议
| 写入块数据协议(PCD -> PICC) | |||
|---|---|---|---|
| 请求命令 | PICC_WRITE | ||
| 命令说明 | 数据写入指定块 | ||
| 命令格式:[0xA0] [Block_Address] [CRC_A] | |||
| Block_Address | 写入块地址 | 每个扇区的前3块可用于数据写入 | |
| CRC_A | CRC_16校验 | 数据CRC校验 | |
本章详细剖析了ISO/IEC 14443-A标准的核心通信协议,从底层寻卡、防冲突、选卡到上层认证与数据读写,为开发者理解和实现非接触式智能卡应用提供了坚实的理论基础与协议框架;下文将介绍RC522芯片驱动开发实践~
更多推荐



所有评论(0)