前言
若要撰寫與 NFC 讀取相關的應用,需要先了解對應的 Tag 內存使用方式,這篇文章會以市面上常見的 NFC 晶片 NTAG213 來做說明,透過範例解讀讓讀者更容易理解 Datasheet 內的敘述。
範例解讀
參考 NXP 大廠產品 NTAG213 的 Datasheet,該晶片支援 ISO14443-3A 規範,各個欄位的介紹與功用請直接到文件中查看,較為詳細!在此只是舉實例來解讀從記憶體讀出來的資料,相信閱讀 Datasheet 時搭配此文章會較容易了解其中的敘述。
以下是從實體 NTAG213 讀出來的資料,接下來以此資料作為範例來解說
Page↓\ Byte→ | 0 | 1 | 2 | 3 |
---|---|---|---|---|
00h | 04 | 67 | 60 | 8b |
01h | 12 | ee | 64 | 81 |
02h | 19 | 48 | 00 | 00 |
03h | e1 | 10 | 12 | 00 |
04h | 03 | 0c | d1 | 01 |
05h | 08 | 54 | 02 | 7a |
06h | 68 | 41 | 45 | 49 |
07h | 4f | 55 | - | - |
解析 UID/SN (Serial Number)
UID/SN 資料的所在的範圍為 Page 0, Byte 0 ~ Page 2, Byte 0
Page↓\ Byte→ | 0 | 1 | 2 | 3 |
---|---|---|---|---|
00h | 04 | 67 | 60 | 8b |
01h | 12 | ee | 64 | 81 |
02h | 19 | - | - | - |
- 前 9 bytes 是 UID (7 bytes) + BCC (2 bytes)。參考:AN10927
- BCC 全名為 Block Check Character,作為校驗碼。其前方 4 個 bytes 做 XOR 運算,就是 BCC 的值。參考:AN10927
8b
與19
為 BCC- Page 0, Byte 3 的
8b
為 CT (Cascade Tag =88h
),SN0
,SN1
,SN2
做 XOR 後的值,即88h xor 04h xor 67h xor 60h = 8bh
。 - Page 2, Byte 0 的
19
為SN3
,SN4
,SN5
,SN6
做 XOR 後的值,即12h xor eeh xor 64h xor 81h = 19h
。
- Page 0, Byte 3 的
- 若 BCC 皆正確便能確定 UID 是對的。
- 其中
SN0
代表晶片廠商代碼。參考:ISO/IEC 7816-6/AM1 chip manufacturer codes
Internal
Page 2, Byte 1 在文件中說是 Internal,並沒明說用途。
Page↓\ Byte→ | 0 | 1 | 2 | 3 |
---|---|---|---|---|
02h | - | 48 | - | - |
Static lock bytes
Page 2 的 Byte 2 與 Byte 3 是 Static lock bytes,只要這 16 個 bit 任一個被設為 1,該 bit 就不能回到 0 了,為不可逆的操作,該 bit 對應的 Page 也會被永久鎖住,不可再被修改,需要小心使用!
Page↓\ Byte→ | 0 | 1 | 2 | 3 |
---|---|---|---|---|
02h | - | - | 00 | 00 |
Capability Container
Page 3 是 Capability Container,即為就是記錄 Tag 能力的 page
Page↓\ Byte→ | 0 | 1 | 2 | 3 |
---|---|---|---|---|
03h | e1 | 10 | 12 | 00 |
- Page 3, Byte 2:12h 代表這個 tag 有 144 bytes 的空間可以寫 NDEF。
- 其它 Byte 還不清楚作用。
Data page
Page 4 之後 (包含) 的 Page 為 Data page,這是一個 NDEF,解讀方法可參考 [NFC] NDEF 解析
Page↓\ Byte→ | 0 | 1 | 2 | 3 |
---|---|---|---|---|
04h | 03 | 0c | d1 | 01 |
05h | 08 | 54 | 02 | 7a |
06h | 68 | 41 | 45 | 49 |
07h | 4f | 55 | - | - |
驗證
最後的最後,使用市面上的 NFC 解析軟體來驗證自己的觀念是否正確