2. おにぎりとType2、
どっちが好き?
どっちも好き!
今月のメニューはこちらです!
第1章 Type 2 Tagの基本
何がどうなったら Type 2 Tag なんだろう?
第2章 Type 2 Tagを読もう
実際に Type 2 Tag の NDEF データを読んでみよう
Appendix MIFARE? Mifare? どっち??
3. 特集 Type 2 Tag、その深遠なる世界
第1章 Type 2 Tagの基本
Tag Type 2 Tag は、そもそもどういうものだっただろうか。
基本をおさらいしよう。
NFC Forum の定義
「 Type 2 Tag 」という呼び名は、 NFC Forum が付けた名前で、 ISO/IEC などの機関が決めた名前
ではない。
Platform
NFC Forum 仕様書「 Digital Protocol 1.0 」(NFCForum-TS-DigitalProtocol-1.0)では「 Type 2 Tag
Platform 」として定義されている。
無線の方式(Technology)として、 NFC-A を使用している。 106kbps で無線通信を行うのだが、「 A
と B と F があって、その中の A 」くらいで十分だろう。
Operation
NFC Forum 仕様書「 Type 2 Tag Operation Specification 」(NFCForum-TS-Type-2-Tag_1.1)に
扱うときの詳細が書かれている。
・メモリ構造
・ユーザメモリ部の使い方
・無線で読み書きするときのコマンド
・使用例
■メモリ構造
Static Memory Structure と Dynamic Memory Structure があるが、これは NXP の製品である
「 MIFARE Ultralight 」(64 byte)と「 MIFARE Ultralight C 」(192 byte)の違いだと思ってよいだろう。
64 byte のメモリ構造が Static Memory Structure で、それより大きいものが Dynamic Memory
Structure となっている。
違いは、 Dynamic Memory Structure の場合はユーザメモリ領域の次に拡張領域があるということ
だ(Fig.1-1)。
とりあえず使ってみるのであれば、あまり細かいことは
気にしなくてよいだろう。
細かいことは
忘れてしまえ
-1-
4. 特集 Type 2 Tag、その深遠なる世界
Block 0 1 2 3
メモリが64 byteなら
0
15ブロックまでよ
1 UID / Internal
2 Lock bytes
3 Capability Container
4 ~ 15 Data Area
16 ~ n Data Area
n+1 ~ Lock / Reserved
Fig. 1-1 メモリ構造
■ユーザメモリ部の使い方
ユーザメモリ(Fig. 1-1 の「 Data Area 」)は、単なるメモリなので、ユーザが好きなように使ってよい。
ただ、そうすると互換性がないので、アプリごとに違ったフォーマットを生みだしてしまう。 NFC Forum
は標準化を行おうとしているので、メモリの使い方に決めごとを作っている。
Type 2 Tag の場合、メモリを TLV 形式(Type 、 Length 、 Value)で使う。
Type (1 byte) Length (1 byte) Value (Length)
Fig. 1-2 TLV 形式
■無線で読み書きするときのコマンド
ここまでの話は、すべて NFC タグに読み書きできる前提で進められた。
では、どうやって NFC タグに読み書きするかというと、 Technology 「 NFC-A 」方式で NFC リーダラ
イタという機械と NFC タグが無線通信を行うことによって実現する。
そう書くと非常に難しそうだが、無線通信の仕方は NFC リーダライタがうまくやってくれるので、使う人
は NFC リーダライタに送信してほしいコマンドデータを作ったり、 NFC リーダライタが受信したデータ
を解析したりするだけだ。 Android OS のように、基本機能として NFC が組み込まれている場合はさ
らに手軽に使えるようになっている。
さらにさらに、 Android OS では Type 2 Tag 製品の1つである MIFARE Ultralight をアクセスするた
めの手段が既に用意されているため、 Type 2 Tag であれば敷居が低くなっている(おそらく、
Android が NFC をアクセスするために採用した部品が NXP 社だったため、優遇されているのだろう
と思われる)。よって、 Android から Type 2 Tag にアクセスするのであれば、コマンドまで知らなくても
NFC タグにアクセスすることができる。
まあ、そう悩むな
まずはそんなに悩まず、やってみるとよいだろう。
-2-
5. 特集 Type 2 Tag、その深遠なる世界
第2章 Type 2 Tagを読もう
Tag
Type 2 Tag を読むのだ。
お前は NDEF なのか?
NFC タグは単なるメモリであり、第1章で書いた内容は NFC Forum が定義した仕様に従った場合、
という前提である。
他の仕様に従ったデータが書かれているかもしれないので、アプリケーションはデータを読んだときに
「自分の意図するフォーマットで書かれているのか?」ということをチェックしなくてはならない。
この章であれば「お前は NDEF なのか?」というチェックをすることになる。
NDEF のデータであることがわかれば、
はい、ここでは
それ以降は NDEF の読み方をすれば
NDEFを読むまでの
よいだけである。 説明をしますよ
NDEF Detection Procedure
Type 2 Tag の仕様書に「 NDEF Detection Procedure 」という、 NDEF を検出する手順が書かれて
いるので、それを追ってみよう。
なお、 NXP 社のドキュメントには他のフォーマットを読むときの方法も書かれているので、興味がある
方はダウンロードするとよいであろう。
まず CC を読め
Fig. 1-1 に「 Capability Container 」(以下、 CC))という情報が Block 3 にある。
NDEF の場合、 CC に特定のデータを書き込むことになっている。
まず、 CC[0]に 0xE1 が書き込んであること。
これが大前提である。この数値はマジックナンバーで、 0xE0 だったら、とか、 0xE2 だったら、という
わけではない。
読むのをやめて
そうなっていない場合は、もう NDEF として 違うことでもしようか
読み込むのをやめてよい。
-3-
6. 特集 Type 2 Tag、その深遠なる世界
CC[1]には Type 2 Tag のバージョンが入っている(上位 4 bit がメジャーバージョン、下位 4 bit がマ
イナーバージョン)。今までリリースされた Type 2 Tag のドキュメントは「 1.0 」と「 1.1 」なので、それぞ
れ「 0x10 」と「 0x11 」になる。
このバージョンは、 Type 2 Tag Operation Specification のドキュメントバージョンとなる。現在は 1.1
だが、少し前までは 1.0 だった。今後もバージョンが上がっていくことが予想される。
メジャーバージョンアップ、マイナーバージョンアップについてどうあるべきか仕様書に書かれている
が、まあ今の段階では気にしなくてよいだろう。
仕事でやるときは
気をつけるのだ
CC[2]はユーザデータのサイズを 8 分の 1 した値が入っている。例えば「 0x06 」ならば 48 byte 、
「 0x12 」なら 144 byte 、という具合だ。これは NDEF として使っているサイズではなく、ユーザデータ
領域のサイズを指すようである。
CC[3]は、上位 4 bit に読み込む方の、下位 4 bit に書き込む方の制限というか、能力というか、そう
いった値が入っている。
・上位 4 bit
・0x0 ・・・セキュリティ設定なし
・0x01 ~ 0x07 、 0x0F ・・・ RFU(将来のために空けている)
・0x08 ~ 0x0E ・・・プロプライエタリ(メーカー用)
・下位 4 bit
・0x0 ・・・セキュリティ設定なし
・0x01 ~ 0x07 ・・・ RFU(将来のために空けている)
・0x08 ~ 0x0E ・・・プロプライエタリ(メーカー用)
・0x0F ・・・書き込み禁止
NDEF であれば、だいたいこういう値になるのではなかろうか。
・MIFARE Ultralight : 0xE1 0x10 0x06 0x00
・MIFARE Ultralight C : 0xE1 0x10 0x12 0x00
もうちょっと
-4-