我正试图从一些NTAG213&读取NDEF记录。 NTAG216 NFC标签,我似乎在用户内存中得到了一些额外的字节,我并不期待。
基于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中的头字节(91)开始,而不是从块04开始。
有谁知道额外的字节是什么,或者我怎么知道读取NDEF数据的偏移应该是什么?
字节看起来有点像“交付时的内存内容”。但我不确定目的是什么。
答案 0 :(得分:1)
第2类标签上的NDEF数据存储由NFC论坛类型2标签规范定义。该规范定义用户存储器的前四个字节(第四页)描述标签的NDEF能力,并且后面的字节包含一系列类型 - 长度 - 值(TLV)结构,其中之一(T = 3)是包含实际NDEF数据的NDEF消息TLV。其他TLV描述了包含锁定字节等标记特定数据的内存位置,在读取或写入NDEF数据时必须跳过这些内容。
您的示例内容是NTAG216(不是NTAG213)。
第四页的内容是一个魔术字节(0xE1),表示NDEF格式,后面是NDEF映射版本(0x10 =&gt;版本1.0),后面是8的倍数的原始标签容量(0x6D * 8 == 872字节用户数据),然后是读/写权限(0x00 =&gt;可读写不受限制)。
第五页以NDEF TLV类型(0x03 =&gt; NDEF消息)开头,然后是TLV长度(0xDB == 219字节),它给出了TLV值字段大小。下面的字节是实际的NDEF消息数据,但请注意,对于某些标记,这可能不是连续的内存(其他TLV可能表示在读取或写入时必须跳过的内存字节)。
对于所有的花里胡哨,您可以学习ndef read和ndef write,或从NFC Forum specifications page获取Type 2标签规范的副本。