NFC标签用户内存二进制

NFC tag user memory binary

我正在尝试从一些 NTAG213 和 NTAG216 NFC 标签中读取 NDEF 记录,我似乎在用户内存中得到了一些额外的字节,这是我没有预料到的。

基于spec,用户内存应该从块 4 开始,但是当我从 NTAG213 标签读取时,我看到 NDEF 记录开始之前有 7 个额外字节,NTAG216 有 2 个额外字节标签。

这里是NTAG213内存的例子:

01| 04 ae f4 d6 
02| 0a d7 49 80 
03| 14 48 00 00 
04| e1 10 6d 00
05| 03 db 91 01 <-- NDEF starts at 91?
06| 1a 54 02 65 
07| 6e 43 4f 43 
08| 4f 4e 55 54 
09| 20 42 4f 44 
10| 59 20 4d 49
11| ...

NDEF 记录似乎以块 05 中的 header 字节 (91) 开始,而不是块 04 中的开始。

有谁知道额外的字节是做什么用的,或者我如何知道只读回 NDEF 数据的偏移量应该是多少?

字节看起来有点像"Memory content at delivery"中的一些。但我不确定目的是什么。

类型 2 标签上的 NDEF 数据存储由 NFC 论坛类型 2 标签规范定义。该规范定义了用户内存的前四个字节(第四页)描述了标签的 NDEF 功能,随后的字节包含一系列类型-长度-值 (TLV) 结构,其中之一 (T=3)是包含实际 NDEF 数据的 NDEF 消息 TLV。其他 TLV 描述包含标记特定数据(如锁定字节)的内存位置,在读取或写入 NDEF 数据时必须跳过。

您的示例内容是 NTAG216(不是 NTAG213)。

第四页的内容是一个表示NDEF格式的magic byte(0xE1),后面是NDEF映射版本(0x10 => Version 1.0),后面是8的倍数的原始标签容量(0x6D * 8 == 872字节用户数据),后面是read/write权限(0x00 =>可读写w/o限制)。

第五页以 NDEF TLV 类型(0x03 => NDEF 消息)开始,然后是 TLV 长度(0xDB == 219 字节),它给出了 TLV 值字段的大小。以下字节是实际的 NDEF 消息数据,但请注意,对于某些标签,这可能不是连续的内存(其他 TLV 可能指示在读取或写入时必须跳过的内存字节)。

对于所有花里胡哨的东西,您可以研究 ndef read and ndef write or obtain a copy of the Type 2 Tag specification from the NFC Forum specifications page