首先,恩智浦的MIFARE經典標籤專有NDEF映射在這兩個應用筆記指定:
正如你已經發現(Unable to authenticate to a MIFARE Classic tag used as NDEF tag)時, NDEF數據存儲在某些扇區(NDEF扇區,通過MIFARE Application Directory標記)的數據塊中。因此,與NDEF相關的數據是來自這些塊的所有數據的組合。
E.g.如果您的NDEF扇區是扇區1和扇區2,則需要讀取扇區4,5,6(=扇區1的扇區0..2)和扇區8,9,10(扇區2的扇區0..2)來聚合NDEF標籤的數據。
對於您的情況,塊4和塊5的數據似乎已經足夠了(因爲標籤數據的結束標記在塊5中,因爲您正確地發現了自己)。您的案例中的相關標籤數據爲
0000030E D1010A54 02656E6D 6F726574
746FFE00 00000000 00000000 00000000
標籤數據本身被打包到TLV(標籤長度值)結構中。甲TLV塊由一個強制標記字節,條件長度字段,和一個可選的數據字段的:
- 的TLV不具有長度和數據字段:
+----------+
| TAG |
| (1 byte) |
+----------+
- 的TLV,其中數據場具有從0到254字節的長度:
+----------+----------+-----------+
| TAG | LENGHT n | DATA |
| (1 byte) | (1 byte) | (n bytes) |
+----------+----------+-----------+
- 的TLV,其中數據字段具有從255到65534字節的長度:
+----------+----------+-----------+-----------+
| TAG | 0xFF | LENGHT n | DATA |
| (1 byte) | (1 byte) | (2 bytes) | (n bytes) |
+----------+----------+-----------+-----------+
在特定情況下,有趣的標籤是:
- NULL TLV:標籤=
0x00
,沒有長度字段,沒有數據字段
- 終結者TLV:標籤=
0xFE
,沒有長度字段,沒有數據字段
- NDEF消息的TLV:標籤=
0x03
,具有字段,具有數據字段(可以具有零長度雖然)
因此,在您的情況下,數據解碼爲:
00 NULL TLV (ignore, process next byte)
00 NULL TLV (ignore, process next byte)
03 NDEF Message TLV (contains your NDEF message)
0E Lenght = 14 bytes
D1010A5402656E6D6F726574746F Data = NDEF Message
FE Terminator TLV (stop processing the data)
NDEF消息可以包含0,1個或更多NDEF記錄。在你的情況下,所述NDEF消息進行解碼,以執行以下操作:
D1 Record header (of first and only record)
Bit 7 = MB = 1: first record of NDEF message
Bit 6 = ME = 1: last record of NDEF message
Bit 5 = CF = 0: last or only record of chain
Bit 4 = SR = 1: short record length field
Bit 3 = IL = 0: no ID/ID length fields
Bit 2..0 = TNF = 0x1: Type field represents an NFC Forum
well-known type name
01 Type Length = 1 byte
0A Payload length = 10 bytes
54 Type field (decoded according to the setting of TNF)
"T" (in US-ASCII) = binary form of type name urn:nfc:wkt:T
02656E6D6F726574746F Payload field (decoded according to the value of the Type field)
因此,你的NDEF消息由一個文本記錄(NFC論壇公知的類型與數據有效載荷02656E6D6F726574746F
的該記錄的有效載荷進行解碼,以:
02 Status byte
Bit 7 = 0: Text is UTF-8 encoded
Bit 6 = 0: Not used
Bit 5..0 = 0x02: Length of IANA language code field
656E IANA language code field
"en" (in US-ASCII) = Text is in English
6D6F726574746F Text
"moretto" (in UTF-8)