关于NFC Forum Type 2标签NDEF文本记录写入格式的技术问询
解析NFC Forum Type 2标签的NDEF写入命令与内容
咱们一步步拆解你这几个写入数组和标签内容的含义,结合Type 2标签的TLV格式和NDEF记录规范来理清楚:
先明确基础规则
Type 2标签的用户数据区是用TLV(Tag-Length-Value)格式组织的,每个TLV块用来标记不同类型的数据;写入命令0xA2(也就是你看到的十进制162)是Type 2标签标准的WRITE指令,第二个字节是块地址(每个块4字节,前4个块(地址0-3)是标签预写入的元数据区,对应你说的前16字节)。
第一个写入数组:new Uint8Array([162, 4, 3, 10, 209, 1]).buffer
这个数组是往块地址4(对应标签第16-19字节)写入数据,核心内容是后4个字节[3,10,209,1]:
0x03:这是NDEF Message TLV的Tag,告诉读卡器接下来的内容是NDEF消息0x0A(十进制10):这个TLV的Length字段,表示后面的NDEF消息总长度是10字节0xD1:NDEF记录的Header字节,拆解二进制11010001能得到关键信息:MB=1:这是NDEF消息的起始记录ME=1:这是NDEF消息的结束记录(说明整个消息只有这一条记录)SR=1:短记录模式,Payload长度用1字节表示TNF=001:使用Well-Known Type(也就是NFC论坛定义的标准记录类型)
0x01:Type Length字段,表示NDEF记录的Type字段长度是1字节
第二个写入数组:new Uint8Array([162, 5, 6, 84, 2, 101]).buffer
往块地址5(标签第20-23字节)写入的内容是[6,84,2,101]:
0x06:Payload Length字段,因为是短记录模式,用1字节表示Payload总长度为6字节0x54(ASCII码'T'):Type字段,对应Well-Known Type里的Text Record(文本记录)0x02:Text Record的状态字节:- 最高2位
00:表示文本编码是UTF-8 - 低6位
02:表示语言代码的长度是2字节
- 最高2位
0x65(ASCII码'e'):语言代码的第一个字节,和下一个块的0x6E组成英语代码en
第三个写入数组:new Uint8Array([162, 6, 110, 112, 111, 111]).buffer
往块地址6(标签第24-27字节)写入的内容是[110,112,111,111]:
0x6E(ASCII码'n'):语言代码的第二个字节,和之前的e组成en(英语)0x70,0x6F,0x6F:就是你说的ASCII码poo,是文本记录的实际内容
这里补充下Text Record的Payload结构:状态字节(1) + 语言代码(2) + 文本内容(3),总长度正好是6,和之前的Payload Length0x06完全对应。
第四个写入数组:new Uint8Array([162, 7, 254, 0, 0, 48]).buffer
往块地址7(标签第28-31字节)写入的内容是[254,0,0,48]:
0xFE:这是Terminator TLV的Tag,是Type 2标签的必填项,用来标记整个TLV数据序列的结束,告诉读卡器后面的字节都是无效填充数据0x00:Terminator TLV的Length字段,规范要求这个Length必须为0(因为Terminator不需要Value内容)- 后面的
0x00,0x30(十进制48):只是标签的填充数据,没有实际意义,不用管
标签整体内容验证
把这些串起来,标签前16字节元数据之后的TLV序列就是:
- NDEF Message TLV(包含完整的Text Record)
- Terminator TLV(标记数据结束)
完全符合NFC Forum Type 2标签的NDEF映射规范,你的测试文本poo也正确存储在Text Record的Payload里啦。
内容的提问来源于stack exchange,提问作者sparkhead95




