おにぎりとType2、
                                     どっちが好き?


どっちも好き!




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




第1章        Type 2 Tagの基本
      何がどうなったら Type 2 Tag なんだろう?



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


Appendix   MIFARE? Mifare? どっち??
特集    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-
特集   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-
特集   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-
特集   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-
特集   Type 2 Tag、その深遠なる世界


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 メッセージの読み方は、タグの種類によらず同じである。




                              読めなかった子は
                               いねぇがぁぁ!




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




 Appendix          MIFARE? Mifare? どっち??
     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 」のように全部小文字
                              だったり、みんなばらばらである。




     文章で書くときには、やはり正しい名前を使うように心がけたいが、特にルールがあるわけではないの
     で間違えないように気をつけたいものだ。




                                            正しさを
                                          人に求めすぎると
                                           嫌われるぞ




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




      編集後記
     FeliCa の Type 3 Tag はよく調べるのですが、 Type 2 Tag
     はあまり気にしていなかったので、改めて調査しました。せっ
     かくなので、それをまとめたのが今回の特集です。
     前回が最後のつもりだったので、今回は臨時号扱いにしまし
     た。


     私の説明は、どうにもわかりづらいところが出てくるので、それ
     を抑え込む練習も兼ねて作っています。厳密さを求めるのは
     次の段階にして、まずは把握のために流れを読み取ってもらうことを心がけようとしています。
     ただ、数字が出てくるのを「この値はこういうもの」で済ませると混乱を招くこともあるかもしれないの
     で、大ざっぱに説明して「今は気にしなくてもよい」というようにしてみました。


     こういうのは、最初はうまくいかなくても、だんだんうまくなっていくものだろうと信じている。月刊 NDEF
     を続けるかどうかは別として、説明の資料を作る練習は続けていきましょうかね。


                                                  2013/02/03   1:00




                                     -7-

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

  • 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-
  • 7.
    特集 Type 2 Tag、その深遠なる世界 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 メッセージの読み方は、タグの種類によらず同じである。 読めなかった子は いねぇがぁぁ! -5-
  • 8.
    特集 Type 2 Tag、その深遠なる世界 Appendix MIFARE? Mifare? どっち?? 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 」のように全部小文字 だったり、みんなばらばらである。 文章で書くときには、やはり正しい名前を使うように心がけたいが、特にルールがあるわけではないの で間違えないように気をつけたいものだ。 正しさを 人に求めすぎると 嫌われるぞ -6-
  • 9.
    特集 Type 2 Tag、その深遠なる世界 編集後記 FeliCa の Type 3 Tag はよく調べるのですが、 Type 2 Tag はあまり気にしていなかったので、改めて調査しました。せっ かくなので、それをまとめたのが今回の特集です。 前回が最後のつもりだったので、今回は臨時号扱いにしまし た。 私の説明は、どうにもわかりづらいところが出てくるので、それ を抑え込む練習も兼ねて作っています。厳密さを求めるのは 次の段階にして、まずは把握のために流れを読み取ってもらうことを心がけようとしています。 ただ、数字が出てくるのを「この値はこういうもの」で済ませると混乱を招くこともあるかもしれないの で、大ざっぱに説明して「今は気にしなくてもよい」というようにしてみました。 こういうのは、最初はうまくいかなくても、だんだんうまくなっていくものだろうと信じている。月刊 NDEF を続けるかどうかは別として、説明の資料を作る練習は続けていきましょうかね。 2013/02/03 1:00 -7-