まず、MIFARE Classic タグに対する NXP 独自の NDEF マッピングは、次の 2 つのアプリケーション ノートで指定されています。
すでにわかっているように ( NDEF タグとして使用される MIFARE クラシック タグを認証できません)、NDEF データは特定のセクターのデータ ブロック ( MIFARE アプリケーション ディレクトリによってそのようにマークされた NDEF セクター) に格納されます。したがって、NDEF に関連するデータは、これらのブロックからのすべてのデータの組み合わせです。
たとえば、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 (tag-length-value) 構造にパックされます。TLV ブロックは、必須のタグ バイト、条件付き長さフィールド、およびオプションのデータ フィールドで構成されます。
- 長さとデータ フィールドを持たない TLV:
+---------+
| | タグ |
| | (1 バイト) |
+---------+
- データ フィールドの長さが 0 ~ 254 バイトの TLV:
+------------+------------+-----------+
| | タグ | 長さ n | データ |
| | (1 バイト) | (1 バイト) | (n バイト) |
+------------+------------+-----------+
- データ フィールドの長さが 255 ~ 65534 バイトの TLV:
+------------+------------+-----------+-----------+
| | タグ | 0xFF | 長さ n | データ |
| | (1 バイト) | (1 バイト) | (2 バイト) | (n バイト) |
+------------+------------+-----------+-----------+
特定のケースで興味深いタグは次のとおりです。
- NULL TLV: タグ =
0x00
、長さフィールドなし、データ フィールドなし
- ターミネータ TLV: タグ =
0xFE
、長さフィールドなし、データ フィールドなし
- NDEF メッセージ TLV: タグ =
0x03
、フィールドあり、データ フィールドあり (ただし、長さがゼロの場合があります)
したがって、あなたの場合、データは次のようにデコードされます。
00 NULL TLV (無視、次のバイトを処理)
00 NULL TLV (無視、次のバイトを処理)
03 NDEF メッセージ TLV (NDEF メッセージを含む)
0E 長さ = 14 バイト
D1010A5402656E6D6F726574746F データ = NDEF メッセージ
FE Terminator TLV (データの処理を停止)
NDEF メッセージは、0、1、または複数の NDEF レコードで構成できます。あなたの場合、NDEF メッセージは次のようにデコードされます。
D1 レコード ヘッダー (最初で唯一のレコードの)
ビット 7 = MB = 1: NDEF メッセージの最初のレコード
ビット 6 = ME = 1: NDEF メッセージの最後のレコード
ビット 5 = CF = 0: チェーンの最後のレコードまたは唯一のレコード
ビット 4 = SR = 1: 短いレコード長フィールド
ビット 3 = IL = 0: ID/ID 長フィールドなし
ビット 2..0 = TNF = 0x1: タイプ フィールドは NFC フォーラムを表します
有名な型名
01 タイプ 長さ = 1 バイト
0A ペイロード長 = 10 バイト
54 Typeフィールド(TNFの設定によりデコード)
"T" (US-ASCII) = タイプ名のバイナリ形式 urn:nfc:wkt:T
02656E6D6F726574746F ペイロード フィールド (Type フィールドの値に従ってデコード)
したがって、NDEF メッセージは 1 つのテキスト レコード (データ ペイロードを持つ NFC FOrum well-known タイプ) で構成されます02656E6D6F726574746F
。このレコード ペイロードは次のようにデコードされます。
02 ステータスバイト
ビット 7 = 0: テキストは UTF-8 でエンコードされます
ビット 6 = 0: 未使用
ビット 5..0 = 0x02: IANA 言語コード フィールドの長さ
656E IANA 言語コード フィールド
"en" (US-ASCII) = テキストは英語です
6D6F726574746F テキスト
「モレット」(UTF-8)