Top Banner
9

月刊NDEF 2013年2月号(臨時号)

Jul 08, 2015

Download

Technology

Hiroshi Ueno

前回は最終刊だったので、今回は臨時号となっています。
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 月刊NDEF 2013年2月号(臨時号)
Page 2: 月刊NDEF 2013年2月号(臨時号)

第1章 Type 2 Tagの基本

何がどうなったら Type 2 Tagなんだろう?

Appendix MIFARE? Mifare? どっち??

第2章 Type 2 Tagを読もう

実際に Type 2 Tagの NDEFデータを読んでみよう

今月のメニューはこちらです!

どっちも好き!

おにぎりとType2、

どっちが好き?

Page 3: 月刊NDEF 2013年2月号(臨時号)

- 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

細かいことは

忘れてしまえ

Page 4: 月刊NDEF 2013年2月号(臨時号)

- 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、その深遠なる世界

まあ、そう悩むな

Page 5: 月刊NDEF 2013年2月号(臨時号)

- 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を読むまでの

説明をしますよ

読むのをやめて

違うことでもしようか

Page 6: 月刊NDEF 2013年2月号(臨時号)

- 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、その深遠なる世界

仕事でやるときは

気をつけるのだ

Page 7: 月刊NDEF 2013年2月号(臨時号)

- 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、その深遠なる世界

Page 8: 月刊NDEF 2013年2月号(臨時号)

- 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、その深遠なる世界

正しさを

人に求めすぎると

嫌われるぞ

Page 9: 月刊NDEF 2013年2月号(臨時号)

- 7 -

FeliCaの Type 3 Tagはよく調べるのですが、 Type 2 Tag

はあまり気にしていなかったので、改めて調査しました。せっ

かくなので、それをまとめたのが今回の特集です。

前回が最後のつもりだったので、今回は臨時号扱いにしまし

た。

私の説明は、どうにもわかりづらいところが出てくるので、それ

を抑え込む練習も兼ねて作っています。厳密さを求めるのは

次の段階にして、まずは把握のために流れを読み取ってもらうことを心がけようとしています。

ただ、数字が出てくるのを「この値はこういうもの」で済ませると混乱を招くこともあるかもしれないの

で、大ざっぱに説明して「今は気にしなくてもよい」というようにしてみました。

こういうのは、最初はうまくいかなくても、だんだんうまくなっていくものだろうと信じている。月刊 NDEF

を続けるかどうかは別として、説明の資料を作る練習は続けていきましょうかね。

2013/02/03 1:00

編集後記

特集 Type 2 Tag、その深遠なる世界