第1章 Type 2 Tagの基本
何がどうなったら Type 2 Tagなんだろう?
Appendix MIFARE? Mifare? どっち??
第2章 Type 2 Tagを読もう
実際に Type 2 Tagの NDEFデータを読んでみよう
今月のメニューはこちらです!
どっちも好き!
おにぎりとType2、
どっちが好き?
- 1 -
特集 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章 Type 2 Tagの基本
Type 2 Tagは、そもそもどういうものだっただろうか。基本をおさらいしよう。
Tag
細かいことは
忘れてしまえ
- 2 -
Block 0 1 2 3
0
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 タグにアクセスすることができる。
まずはそんなに悩まず、やってみるとよいだろう。
メモリが64 byteなら
15ブロックまでよ
特集 Type 2 Tag、その深遠なる世界
まあ、そう悩むな
- 3 -
お前は NDEFなのか?
NFC タグは単なるメモリであり、第1章で書いた内容は NFC Forumが定義した仕様に従った場合、
という前提である。
他の仕様に従ったデータが書かれているかもしれないので、アプリケーションはデータを読んだときに
「自分の意図するフォーマットで書かれているのか?」ということをチェックしなくてはならない。
この章であれば「お前は 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 として
読み込むのをやめてよい。
第2章 Type 2 Tagを読もう
Type 2 Tagを読むのだ。Tag
特集 Type 2 Tag、その深遠なる世界
はい、ここでは
NDEFを読むまでの
説明をしますよ
読むのをやめて
違うことでもしようか
- 4 -
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・
もうちょっと
特集 Type 2 Tag、その深遠なる世界
仕事でやるときは
気をつけるのだ
- 5 -
NDEF TLVを読む
CCが期待通りの値だった場合、ユーザデータ(Block 4以降)は NFC Forumが定義する TLV形式
であると想定してデータを読み込む(違う可能性もあるので、サイズの異常対策だけはしておこう)。
先頭から TLV を順に読んでいき、 T=0x03(NDEF メッセージ)が見つかるまで読み進める。もしユー
ザデータの最後まで 0x03 が見つからない場合や、先に T=0xFE(TLV 終わり)が見つかった場合は、
そこまでで終わる。
次に NDEF メッセージの L(Length)を確認する。もし 0 であれば、そこまでで終わり、これ以降の TLV
検索は進めない(最初の NDEF メッセージ TLVだけが有効)。
後は読むだけ!
あとは、この TLVの Value部分を NDEF メッセージとして読むだけである。
NDEF メッセージの読み方は、タグの種類によらず同じである。
読めなかった子はいねぇがぁぁ!
特集 Type 2 Tag、その深遠なる世界
- 6 -
Type 2 Tag といえば、 NXP社。
さて、「MIFARE 」か「Mifare 」か? いつも迷う。
ここまでの文章を振り返るとわかるように、正解は「 MIFARE 」である。
ホームページより(http://www.mifare.net/overview/)
「 TM 」とついているので、登録商標ということであろう。
同じようなことがフェリカでも気になる。
これは「 FeliCa 」と、 F と Cが大文字である。
FeliCaに関する製品の商標が以下のページに書かれていた。
http://www.sony.co.jp/Products/felica/attention.html
交通カードには「○○カ」のような名前が多いのだが、「 Suica 」のように先頭だけが大文字だったり、
「 TOICA 」のように全部大文字だったり、「 nimoca 」のように全部小文字
だったり、みんなばらばらである。
文章で書くときには、やはり正しい名前を使うように心がけたいが、特にルールがあるわけではないの
で間違えないように気をつけたいものだ。
Appendix MIFARE? Mifare? どっち??
特集 Type 2 Tag、その深遠なる世界
正しさを
人に求めすぎると
嫌われるぞ
- 7 -
FeliCaの Type 3 Tagはよく調べるのですが、 Type 2 Tag
はあまり気にしていなかったので、改めて調査しました。せっ
かくなので、それをまとめたのが今回の特集です。
前回が最後のつもりだったので、今回は臨時号扱いにしまし
た。
私の説明は、どうにもわかりづらいところが出てくるので、それ
を抑え込む練習も兼ねて作っています。厳密さを求めるのは
次の段階にして、まずは把握のために流れを読み取ってもらうことを心がけようとしています。
ただ、数字が出てくるのを「この値はこういうもの」で済ませると混乱を招くこともあるかもしれないの
で、大ざっぱに説明して「今は気にしなくてもよい」というようにしてみました。
こういうのは、最初はうまくいかなくても、だんだんうまくなっていくものだろうと信じている。月刊 NDEF
を続けるかどうかは別として、説明の資料を作る練習は続けていきましょうかね。
2013/02/03 1:00
編集後記
特集 Type 2 Tag、その深遠なる世界