搞了块 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