NTAG 标签
这里描述针对 NTAG213。而 NTAG215/216只是容量不同,其它功能都一样。

UID
UID 有 7 bytes。上图中有 9 bytes 的 serial number,其中有 2 bytes 是 check byte。

check byte 0 校验:CT, SN0, SN1, SN2
check byte 1 校验:SN3, SN4, SN5, SN6
static lock byte
lock byte 可以把一些 page 设置成只读。

page 2 里有两个字节的 lock byte,可以控制 page3~page15 是否只读。NTAG210 型号的卡,user memory size 就是 12 个 page。猜想可能这个设计最初就是为了适应这个容量大小的卡。
L 是 locking,负责单个 page 的锁定状态。L 位置 1 后,对应的 page 就变为只读,除非更改 L 位为 0
BL 是 block-locking,可以锁定多个 page
这两个 lock byte 的写操作是 tearing-proof 的。
tearing 现象,卡离开读卡器时,供电突然消失。对 Flash 的写操作会中断,造成 data-tearing 现象。tearing-proof 就是会保证对卡内的这两个字节的写操作是独立完整的。
参考链接:Tearing-proof method for writing data in a nonvolatile memory
dynamic lock bytes
控制序号 10h 及后面的 page 的锁定,就用到了 dynamic lock bytes。
CC
page 3 存了卡容量信息,在生产时固化,符合 NFC Forum Type 2 Tag 规范。其中 4 个字节,byte2 表示容量:

这 4 个字节都是 OTP 的,且按位进行或操作。把某位置 1,不能置 0。
这 4 个字节出厂时都有预置的值,不是 00。
数据区
page 4 以后一片连续的 page 可供用户使用。
出厂时,page 3, page4, page 5 会有预置的值。page 5 以后的内容就不确定了。也许可以根据这里的信息来判断一张卡是否被使用过。
功能配置页
最后 4 个 page 用于一些功能的配置。

MIRROR
MIRROR 功能可以把卡的 UID 和 NFC Counter 以 ASCII 的格式映射到某个 page 开始的区域。

MIRROR_CONF
- 00: 禁止 MIRROR 功能
- 01: 映射 UID
- 10: 映射 NFC Counter
- 11: 映射 UID 和 NFC Counter
MIRROR_PAGE 指定映射到哪个 page
MIRROR_BYTE 指定从 page 内的第几个 byte 开始
AUTH

PROT
- 0:写保护(不允许写)
- 1:读保护+写保护(不允许读和写)
CFGLCK 控制 CFG0, CFG1 这两页是否可写
- 0:配置区可写
- 1:配置区不可写(PWD 和 PACK 除外)
NFC_CNT_EN
- 0: 禁止 NFC 计数器功能
- 1: 开启 NFC 计数器功能
开启之后,每次 power on reset 后第一次读操作时,计数器会增加 1
NFC_CNT_PWD_PROT
- 0: 读 NFC Counter 不需要验证
- 1: 读 NFC Counter 之前需要密码校验通过
AUTHLIM 密码尝试次数。当密码连续错误超过这个值时,就再也无法校验成功了。而在到达这个次数之前如果校验对了密码,则它的计数会清零
PACK 校验密码命令的响应内容
AUTH0 表示需要密码校验访问的起始页。初始值为 FF。比如,AUTH0 为 5,则表示从 page5 开始的页访问都需要校验密码。
NFC counter
开启此功能之后,每次卡 power on reset 之后的第一次读操作,24 bits 的计数器会自增。
计数器增至 FF FF FF 之后就不再变化。 这个数字足够大了。
这个计数器就给了每张卡一个独立变化的变量。