在进行物联网硬件开发或者 DIY 电子项目时,NTAG I2C 系列芯片因为同时具备 NFC 无线接口与 I2C 有线接口,成为了极佳的双界面数据共享媒介。其中,NXP NT3H2111 (NTAG I2C Plus 1K) 是最为常用的一款芯片。然而,这类芯片在出厂或使用过程中,如果底层配置区或首包数据被不小心擦除或写坏,极易出现“假死/砖化”状态。

本文将详细记录一次针对 NT3H2111 芯片由于底层 CC(Capability Container)配置缺失导致无法格式化的“排卡救砖”全过程,并分享利用底层 NFC 原始指令完美修复的硬核方案。


1. 遭遇挫折:从 iPhone 到 Android 的失败尝试

在收到一批 NT3H2111 芯片后,首要任务就是测试其 NFC 功能。然而在刚开始的格式化阶段就连续碰壁:

  1. iPhone 无法直接格式化
    使用 iPhone 上的 NFC Tools 尝试直接格式化芯片时,软件报错,根本无法识别或进行任何写入。查阅网上资料得知,由于苹果官方对 iOS CoreNFC 框架的安全限制,通常只对高级应用开放 NDEF 读写。网上许多讨论也表示“iPhone 无法访问底层 NFC 硬件进行格式化,必须使用安卓”。
  2. 转战 Android 手机依然折戟
    随后转向安卓手机尝试。原本以为安卓开放的底层权限能轻松搞定,但结果依然是失败。由于之前在淘宝另一家店买过同型号芯片,那批芯片非常顺利地就能被格式化和读写,这不禁让人怀疑是这一批芯片存在硬件物理损坏或者质量问题。
  3. 退退无可退的硬件备用方案
    由于这是一块双界面芯片,我已经做好了最坏的打算:如果 NFC 无线端彻底锁死,就只能通过焊盘把 I2C 接口 接到 Arduino、树莓派或 USB-I2C 适配器上,通过 I2C 总线强行去覆写 EEPROM 内部的控制寄存器来重置芯片。但这个方案显然比较繁琐,还需要飞线与焊接。

在几乎准备动手焊接时,Gemini 推荐了一个绝妙且极其优雅的底层软件救砖方案。最不可思议的是,这个方案最后在 iPhone 上被完美执行并成功救砖!


2. 破局关键:理解 NT3H2111 的底层数据结构

为什么标准的 NFC 格式化工具会报错?因为这些高级工具(如 NFC Tools 快捷格式化)能够工作的前提是:芯片内必须包含合法的底层结构描述符。

对于 NT3H2111 芯片(符合 NFC Forum Type 2 Tag 规范),其存储区是按 页(Page) 划分的,每页大小为 4 字节。其中前几页具有极其特殊的硬件和协议含义:

  • Page 0 ~ Page 1:通常存放芯片的 UID(唯一标识符)。
  • Page 2:存放静态锁字节(Static Lock Bytes)。
  • Page 3能力容器(Capability Container, 简称 CC)。这是最关键的一页,它定义了标签的 NFC 规范版本、可用容量、以及读写权限。如果这一页全部为零或数据损坏,任何标准的 NFC 读写器都会认为它“不是一个有效的 NFC 标签”,从而拒绝提供高级的 NDEF 格式化和写入功能。
  • Page 4:用户数据区的起始页。通常用于存放 NDEF 容器(NDEF TLV),告诉读写器这里有没有 NDEF 消息、有多长、在哪里结束。

当我们使用 NTAG I2C Demo 应用强行去读取芯片内容时,会发现里面的前几页内容被清空或者处于不正确的值。因此,我们要做的就是手工向 Page 3 和 Page 4 写入标准的初始化数据。只要把这两页“伪装”成合法的标准空标签,高层的 NFC Tools 就能立刻重新认识它,进而允许我们对其进行正常格式化!


3. 原始 NFC 命令强行救砖步骤

只要使用支持发送原始/高级十六进制指令(Advanced Commands)的 NFC 软件(例如 NFC Tools 的高级功能),向芯片依次发送两组原始 WRITE 指令即可。

NTAG / Mifare Ultralight 底层写入指令格式

在 Type 2 标签规范中,**A2** 是标准的“写入(WRITE)”指令。

  • 指令结构:A2 <Page_Number> <4_Bytes_Data>

步骤 1:恢复 Page 3 (Capability Container)

在工具中向芯片发送以下原始十六进制命令:

1
A2 03 E1 10 6D 00

指令拆解分析:

  • **A2**:底层 WRITE 指令,表示要向标签写入数据。
  • **03**:目标写入页码为 Page 3 (CC 页)。
  • **E1 10 6D 00**:要写入的 4 字节 CC 配置数据。
    • **E1**:NFC Forum Type 2 Tag 的 Magic Number。
    • **10**:版本号(表示 NFC Forum Tag Specification 1.0)。
    • **6D**:容量大小指示(Size)。0x6D 转换为十进制为 109。根据规范,可用空间大小为 109 * 8 = 872 字节。这完美对应了 NT3H2111 (NTAG I2C Plus 1K) 的标准用户可用空间。
    • **00**:读写访问控制。00 代表完全公开可读写(无需密码或其它特殊认证)。

步骤 2:恢复 Page 4 (初始化为空的 NDEF 容器)

接着向芯片发送第二条原始十六进制命令:

1
A2 04 03 00 FE 00

指令拆解分析:

  • **A2**:底层 WRITE 指令。
  • **04**:目标写入页码为 Page 4 (用户数据起始页)。
  • **03 00 FE 00**:要写入的 4 字节数据,构建一个空 NDEF 格式。
    • **03**:NDEF Message TLV 的 Tag 标识(代表接下来是 NDEF 消息)。
    • **00**:NDEF 消息的 Length 为 0 字节(表示目前是一个空白消息)。
    • **FE**:结束标志 TLV 的 Tag (Terminator TLV),标志着 NDEF 数据区域的终止。
    • **00**:第四字节填充,占位用。

4. 实战操作与软件截图

很多人认为 iPhone 无法进行这种底层操作,但实际上 iOS 版的 NFC Tools 同样支持发送原始底层命令(这得益于 iOS 13 之后苹果向第三方 App 开放了 CoreNFC 的底层 Transceive/sector 级别的数据流传输权限)。

具体的软件操作步骤非常简单:

  1. 打开 iPhone 上的 NFC Tools 应用,点击 “其他 (Other)” 菜单。
  2. 找到并选择 “发送先进的 NFC 命令 (Send advanced NFC command)”
  3. 在输入框中输入第一组指令 A2 03 E1 10 6D 00,贴近芯片发送。
  4. 发送成功后,输入第二组指令 A2 04 03 00 FE 00 并发送。

以下是操作时的实际截图展示:

::: gallery
NFC Tools 底层发送 Page 3 CC 写入命令
NFC Tools 底层发送 Page 4 NDEF 写入命令
:::


5. 大功告成

在依次往 Page 3 和 Page 4 写入了这两段控制数据后,奇迹发生了:原本报错“无法识别”、“不支持”的 NT3H2111 芯片,在贴近手机的瞬间被完美读出。此时再使用 iPhone 上的 NFC Tools 里的标准 “格式化标签 (Format memory)” 或者是直接进行 NDEF 写入(如写一条 URL),都畅行无阻,彻底告别了“板砖”状态。

总结

这次“救砖”经历告诉我们,很多时候硬件层面的故障其实只是底层数据结构的失落。

  • iOS 并非我们想象的那么封闭。通过 NFC Tools 这样的工具,iPhone 同样可以发送底层原始 of Hex 命令,完成对砖化芯片的底层重构。
  • 针对 NT3H2111 这类主流的双界面 NFC 芯片,遇到故障时,在动用电烙铁和外部总线等物理手段前,不妨先探寻一下底层 NFC 指令集,往往能有意想不到的优雅解法!