搞了块 NT3H2111 板子,能读不能写,修了一下午。修完发现 NFC 卡的类型比想象中复杂得多。干脆写下来,免得以后再来一遍。
一张图看清 NFC 卡的类型
逛淘宝买空白卡、查芯片选型时,你最常撞到这些名词:
NFC 卡(13.56MHz,ISO 14443 Type A)
│
├── Mifare Classic 系列(M1 卡)
│ ├── Mifare Classic 1K (S50) ← 最常见,16 扇区 × 4 块
│ └── Mifare Classic 4K (S70) ← 大容量版,40 扇区
│
├── NTAG 系列(NFC Forum Type 2 Tag)
│ ├── NTAG213 ← 144 字节用户区
│ ├── NTAG215 ← 504 字节
│ ├── NTAG216 ← 888 字节
│ └── NTAG I²C (NT3H2111/2211) ← 带 I²C 接口,可接 MCU
│
├── Mifare Ultralight 系列
│ ├── Ultralight (MF0ICU1) ← 老款,64 字节
│ ├── Ultralight C ← 带 3DES 加密
│ └── Ultralight EV1 ← 带密码保护
│
├── Mifare Plus / DESFire 系列
│ ├── Plus S / Plus X ← M1 升级版,向下兼容
│ └── DESFire EV1/EV2/EV3 ← 高安保,用在交通卡/银行卡
│
└── 其他
├── ICODE SLI (ISO 15693) ← 远距离,图书馆/酒瓶
├── FeliCa (JIS X 6319) ← 日本 Suica/八达通
└── Topaz (Innovision/Broadcom) ← 极少见
每种卡怎么认出来
拿手机 NFC Tools Pro 或 NXP TagInfo 扫一下,看两个字段就能区分:
| 显示 | 卡片家族 | 特征 |
|---|---|---|
NfcA, MifareClassic, NdefFormatable |
Mifare Classic | 私有协议,16 字节/块 |
NfcA, MifareUltralight, Ndef |
NTAG / Ultralight | 开放标准,4 字节/页 |
NfcA, MifareUltralight, NdefFormatable |
NTAG(未初始化) | 出厂空白,CC 全 0 |
NfcF |
FeliCa | 日本交通卡,国内少见 |
NfcV |
ICODE / ISO 15693 | 远距离,图书馆 |
NfcB |
SRIX / 身份证 | 14443-3B 帧格式 |
最核心的区分口诀:看到
MifareClassic→ M1 卡。看到MifareUltralight→ NTAG 家族。两者完全不通用。
三种最常见卡,从里到外对比
Mifare Classic (M1)
结构: 16 扇区 × 4 块(每块 16 字节,共 1KB)
每个扇区的最后一块存密钥 A + 访问控制 + 密钥 B
┌────────┬────────┬────────┬────────┐
│ Block0 │ Block1 │ Block2 │ Key+AC │ ← 扇区 0
├────────┼────────┼────────┼────────┤
│ Block4 │ Block5 │ Block6 │ Key+AC │ ← 扇区 1
├────────┼────────┼────────┼────────┤
│ … … … │
└────────┴────────┴────────┴────────┘
安全: CRYPTO-1 算法,2008 年被完全破解。任何人用 Proxmark3 + mfoc
几秒能拿到所有密钥。但门禁系统不管这个,还在大量用。
写入: 需要先 AUTH 认证(发 60/61 命令 + 密钥),再发 A0 WRITE
NTAG / NTAG I²C
结构: 线性页(每页 4 字节,从 Page 0 到 Page 255)
Page 0-1: UID(7 字节)
Page 2: 配置 + 锁
Page 3: Capability Container (CC)
Page 4+: 用户数据区
安全: 默认无密码。支持 PWD_AUTH 可选开启(NTAG 213/215/216)。
NTAG I²C Plus 额外支持 ECC 原始性签名。
写入: 不需要认证。直接发 A2 WRITE 指令(4 字节/页)。
NT3H2111 出厂 CC 全 0 时需要先写 CC。
Mifare Ultralight
结构: 跟 NTAG 几乎一样(线性页),但容量更小(64 字节)。
可以理解为"NTAG 的祖先"。
定位: 已经被 NTAG 全面替代。新项目不要选。
除非你在修复一套十年前的公交充值系统。
这些卡之间能互写吗
不能。 虽然它们共用 13.56MHz 物理层和 ISO 14443-3A 防碰撞协议,但命令集完全不同:
| 操作 | M1 卡的指令 | NTAG 的指令 |
|---|---|---|
| 读块 | 30 (READ) |
30 (READ,参数不同) |
| 写块 | A0 (WRITE,16 字节/块) |
A2 (WRITE,4 字节/页) |
| 认证 | 60 / 61 (AUTH A/B) |
无需认证 |
| 增值/减值 | C1 / C0 |
不支持 |
一张 NT3H2111 芯片内部根本没有 CRYPTO-1 加密引擎,接收到 A0 命令只会返回 NACK。
类比:M1 是 Excel 格式 (.xlsx),NTAG 是 CSV 格式 (.csv)。文件后缀不同,解析器不同,不能互相打开。
MP3H1101 → NT3H2111 的”替代”到底是什么
有人看到 NXP 说”NT3H2111 替代 NT3H1101”,以为新产品该兼容所有旧协议。但替代的是产品定位,不是协议栈:
| 维度 | NT3H1101(老) | NT3H2111(新,替代) |
|---|---|---|
| NFC 协议 | NFC Forum T2T | NFC Forum T2T(一样) |
| I²C 接口 | ✅ | ✅ |
| SRAM buffer | 无 | 64 字节(新增) |
| Pass-through | 无 | ✅(I²C ↔ NFC 直通) |
| 能量采集 | 基础 | 增强版 |
| Mifare Classic 兼容 | ❌ 不支持 | ❌ 不支持(还是不支持) |
NT3H2111 是”NTAG 标签 + I²C 双接口”这条产品线内的迭代。它替代的是 NT3H1101 在物联网数据共享 / 传感器标签 / 能量采集这些场景的位置,不是给 M1 卡做兼容。
M1 卡”死了”吗
| 维度 | 状态 |
|---|---|
| 安全 | 死了。CRYPTO-1 2008 年破解,密码秒出。 |
| NXP 官方 | 2015 年起建议新项目用 NTAG/Mifare Plus。但从未宣布停产。 |
| 市场 | 活得好好的。中国 50 万+ 门禁系统用 M1,替换成本不可承受。 |
| 出货量 | 仍在增长。饭卡、水卡、门禁卡、低端标签全部用 M1。 |
| 估计退役 | 2035~2040 年。除非国家强制淘汰。 |
做新项目:别选 M1,选 NTAG。对接存量系统:认命,用 M1 兼容卡。
M1 卡能写 URL 吗
技术上能,但体验很差。
| 对比 | M1 卡 | NTAG / NT3H2111 |
|---|---|---|
| 需要格式化吗 | 手工写 CC+NDEF TLV 到扇区 | A2 指令一次搞定 |
| 手机自动弹通知 | ⚠️ 大部分 Android 不弹 | ✅ 100% 弹出 |
| iPhone 兼容 | ❌ 完全不支持 | ✅ 完美支持 |
| 用户需要做什么 | 自己打开 App 翻扇区 | 贴上去自动弹 |
如果目标是”贴上去弹 URL”,NTAG 是唯一正确选择。 iPhone 根本不认 M1 卡作为 NDEF 标签。
手机 NFC 怎么做到同时兼容这么多类型
手机内置的 NFC 控制器(如红米 K80 用的 NXP PN557/PN80T)是可编程 RF 前端。每次贴卡时:
手机发 ALL_REQ (26h) → 卡回答 ATQA →
ATQA = 0x0004 → 走 Mifare Classic 协议栈
ATQA = 0x0044 → 走 NTAG / Ultralight 协议栈
ATQA = 0x0344 → 走 NTAG I²C Plus 协议栈
控制器内部是一个状态机,在几十微秒内根据 ATQA 值选择对应的命令集。PN532 模块也是同样原理——两者本质上是同一家 NXP 芯片的不同封装。
实战:一张 NT3H2111 板子的救砖记录
这是本文写作的起点。症状:
- NT3H2111 板子,独立工作,无 MCU
- 红米 K80 能读 UID,但写不进任何数据
- VOUT 稳定在 3.0V,排除了 RF 供电问题
- NXP TagInfo 显示
NdefFormatable+ CC =00 00 00 00
根因:NT3H2111 出厂 Page 3 (CC) 空白。NDEF API 判定”不是合法 NFC 标签”,拒收所有写入。
解法:用 NFC Tools Pro 的”先进命令”发两条原始 A2 指令:
A2:03:E1:10:6D:00 → 写 Page 3 (CC: NDEF v1.0, 436 字节可用)
A2:04:03:00:FE:00 → 写 Page 4 (空 NDEF TLV + Terminator)
返回 0A(ACK)即成功。扫第二遍,NdefFormatable 变成 Ndef,现在所有 NFC App 都能正常写入。
公式:任何新的 NT3H2111 板子,焊完后第一条命令就是写默认 NDEF。以后交付使用时再也无需救砖。
选卡决策树
你想做什么?
│
├─ 写 URL / WiFi 配网 / App 跳转 / 设备配对
│ └─ 选 NTAG(NTAG213/215/216 或 NT3H2111)
│
├─ 复刻门禁卡 / 饭卡 / 水卡(存量系统)
│ ├─ 原卡是 M1 → 买 CUID 空白卡(¥5/张)
│ └─ 原卡是 NTAG → 买 NTAG213(¥2/张)
│
├─ 自己做物联网板子,需要 MCU 跟手机交换数据
│ └─ 选 NTAG I²C(NT3H2111/2211)
│
├─ 做校园卡/企业工卡(从零设计)
│ └─ 选 NTAG + 云端验证 ← 现代方案
│
├─ 做公交卡 / 支付卡
│ └─ 选 Mifare DESFire(需要跟公交公司/银联对接)
│
└─ 不知道,想玩
└─ 淘宝搜 "NFC 空白卡组合包",¥10 每种来一张
常用工具一表
| 工具 | 平台 | 我用来干嘛 |
|---|---|---|
| NFC Tools Pro | Android/iOS | 读写 NDEF、发原始 A2 指令救砖 |
| NXP TagInfo | Android/iOS | 看 UID、CC、锁字节、ATQA,诊断首选 |
| MCT (Mifare Classic Tool) | Android | 读/写 M1 卡扇区、导入导出 dump |
| NXP TagXplorer | Windows | PC 端图形化读写 NTAG/M1,支持 PN532 |
| NXP NFC Cockpit | Windows | NTAG I²C Plus 专属调试 |
| Python + nfcpy + PN532 | 全平台 | 量产自动化刷卡 |
Leave a comment