那麼我們來『細說NFC TAG』之二
$ 之前說過$ ,NFC標籤有三個組成的要件:標籤晶片、天線尺寸,以及外型樣式。如果我們的應用,大都會以NFC手機來作為讀寫器(ReWriter),那麼NFC標籤的天線尺寸,應該要是大於直徑25mm的圓形;而且最常會被設計成帶有背膠的貼紙型式。在這篇將針對標籤的晶片(Tag Chip),來做一個介紹。
NFC協會目前制定了5種標準類型的標籤,正因為所使用的晶片有不同的通信協定,記憶體的結構與容量也有些許的差異;但是都必須能夠格式化成所謂的『NDEF紀錄型態』,才能被所有的NFC手機來使用。當然,也有一些機會,我們不會用到 NDEF,而是希望能完全掌控對 TAG晶片記憶體的存取、甚至於對記憶體的保護。大致而言,晶片記憶體區塊的開頭都是唯讀(R/O)的 UID,紀錄其廠家編號與生產流水號,此UID且要符合ISO規範,保證全世界唯一無重複編號(globally unique)。
通常在UID之後,是所謂的「記憶容量設定區塊 (Capability Container)」,為一次性寫入(OTP) 的連續4個位元組區塊;然後才是一連串可自由讀寫(R/W) EEROM型式的記憶空間。現在,以最常被使用、價格比較低廉的第2型標準晶片(TYPE2),其剛出廠的空白TAG標籤為例,來看看其內的預設值。
雖然 TYPE2的標籤記憶體的大小,必須視其採用的晶片而有所不同,但其記憶體的結構是一樣的:由每4個位元組構成一個區塊(BLOCK)或稱作頁(PAGE)。 一般來說,系統記錄會佔掉最前面的4個區塊:前3個區塊( 0x00 - 0x02)是用來存放由7個位元組所組成的唯一的序列碼(Unique ID Code,本例為:04:DA:BC:4A:37:3C:80)、檢查碼與2個位元組的記憶體讀寫控制碼(Lock Control byte: LOCK0 - LOCK1); 而第4個區塊(0x03)是NFC規範的記憶容量設定,標示之後用來存放NFC資料的記憶體空間大小。以本例中採用的NXP NTAG213晶片,其內容是:E1:10:12:00,前兩個位元組是代表採用NFC Forum標準,版本編號為1.0。之後的12h表示記憶體容量為18x8=144個位元組;最後的00h表示記憶體可以自由讀寫。
$
$ 我們要注意是自第5個區塊(0x04)之後的記憶體,就開始用來存放符合NFC協會規範的控制資料區塊 TLV。 首先第一個位元組是的內容[01h],正表示是 Lock Control TLV 的開始,其後為 [03h] 表示此 TLV 含3個位元組的資料,其內容為 [A0h, 0Ch, 34h] 標示延伸記憶體的讀寫控制位元組所在位置與大小。
接著 Lock Control TLV 之後是[03h],就是 NDEF訊息TLV 的類型碼,其長度看下一個位元組是[00h],這就表示此 TAG的 NDEF訊息長度是0;也就是空白沒有任何記錄。 所以,NDEF訊息TLV 就到此為止。 接著是[FEh],這就是 NFC規範資料的結尾標示;也就是所謂的 Terminator TLV。 ㄧ般的NFC讀寫裝置在處理NFC訊息就會到此結束,也正意味其訊息的長度是根據內容本身而異,並沒有固定的長度。如果你對NDEF訊息的編寫開始感到興趣,可以從$ 此篇$ 繼續深入了解。
既然NDEF的紀錄長度不依,所以在此之後剩餘的記憶體是可以再加以使用的。只不過現在的NFC手機,只能對NDEF的紀錄做自動解析,除此之外就必須使用特定的傳收指令(Transceive Command)來做存取。舉個例子,如果要讀取第10頁的資料,就必須下達 [30h, 0Ah],當TAG接收到指令後,就會一次回傳自第10頁開始的16個位元組共4頁的資料(參考下圖的 READ指令)。如果你對此有興趣,可以$ 下載 NFC ReWriter 這個APP$ ,在 NFC TOOLKIT 中可以使用 NfcA 的 Custom Transceive 來存取 TYPE2的 NFC標籤喔。
$
$