Hi 大家好,最近工作上的需要快速認識NFC的NDEF的定義,因此這邊比較像是針對工作上做個筆記備忘。
[前言]
1.
關於NFC的科普可以直接透過 wiki 初步認識一下,本篇文章主要專注於讀卡機模式(Reader/Writer
mode)
2.
請務必事先閱讀今天,你NFC了沒? 這網站介紹的NFC Type Tag基本概觀
[操作]
PS. 避免機密外洩,圖中黑色遮住的部分是 NDEF Payload 部分,
2.
這邊是透過產品 Console dump出來的NFC tag內容,如圖所示:
[解說]
這兒簡單介紹一下剛才所提到的內容,全都是16進制:
0xE1 0x40 0x40
0x05 /*
Capability Container */
0x03 0x98 0x92 0x04 0x61 0x74 0x65 0x78
0x74 /* NDEF Message TLV */
0x** 0x** 0x** …… /* Payload of NDEF Message TLV */
另外NFC Tag的memory map如圖下:
PS. 本文章的NFC Tag沒有Lock Control TL 與 Memory Control TLV
,不同類型的晶片實現方式隨之不同,這邊我們重點放在NDEF。
/* Capability
Container */
如圖藍色框框部分是Capability container,內容如下:
0xE1 0x40 0x40 0x05
ð 0xE1表示採用NFC Forum標準,0x40表示版本號碼4.0,若版本號碼3.1此值為0x31。
0xE1 0x40 0x40 0x05
ð 0x40 表示記憶體容量,0x40等於十進制64,表示64 * 8bits = 512
bytes
0xE1 0x40 0x40 0x05
ð 0x05的前四個位元是表示讀取記憶體機制,後四個位元是表示寫入機制,這邊不是很確定內容意義為何,這邊先保留
/* NDEF Message TLV */
0x03 0x98 0x92 0x04 0x61 0x74 0x65 0x78 0x74
ð 0x03表示採用控制資料類型碼是 NDEF 的訊息區塊,0x98表示此 NDEF
Message TLV內所有的Record (Header + Payload) 長度共152 bytes,如範例所示我們 NDEF Message TLV 包含兩個 Records,這邊只介紹第一個 Record,爾後 Record 以此類推
0x03 0x98 0x92 0x04 0x61 0x74
0x65 0x78 0x74
Flag
|
Value
|
Description
|
||
MB
|
1
|
1表示第一筆Record
|
||
ME
|
0
|
0表示非最後一筆Record
|
||
CF
|
0
|
0表示不是長訊息
|
||
SR
|
1
|
1表示短紀錄格式,此payload長度不超過254 bytes
|
||
IL
|
0
|
0表示ID LENGTH與ID被省略。這邊對範例來說不重要,可略過
|
||
TNF
|
0
|
1
|
0
|
0x02採用MIME所定義的媒體紀錄
|
0x03 0x98 0x92 0x04 0x61 0x74 0x65 0x78 0x74
ð 0x04表示Type Length,表示0x74 0x65 0x78 0x74 的長度為4 bytes,這邊可以看成ASCII的"TEXT",表示文字。至於0x61指的是此Record的Payload 長度為97 bytes。
還記得剛才前面的圖嗎? 此Record的長度為104 bytes算法是這樣子的
0x03 0x98 0x92 0x04 0x61 0x74 0x65 0x78
0x74 0x** 0x** 0x** ……..
ð 0x92 0x04
0x61 0x74 0x65 0x78 0x74 有7 bytes
ð 0x** 0x**
0x** …….. 的Payload有97 bytes
ð 7 bytes + 97 bytes = 104
bytes。
[總結]
我們第二個Record長度48 bytes,細節就不再贅述。因此本範例NDEF Message的Record長度總共:
ð 104 bytes (1st
Record) + 48 bytes (2nd Record) = 152 bytes

ð 104 bytes 的16進制為0x98,所以才會有0x98的存在
這邊工作紀錄就提供大家參考,開發之前的Know How真的很花時間:( 謝謝。
0x03 0x98 0x92 0x04 0x61
0x74 0x65 0x78 0x74 0x** 0x** 0x** …….
ð 152 bytes 的16進制為0x98,所以才會有0x98的存在 (update: 2017/10/11)
Jhanggj 2017/10/10 in Taipei
Ref.
1. 今天,你NFC了沒?



