2013/03/26

MIFARE ClassicのNDEF

Twitterを見ていると、Nexus4とNexus10はMIFARE Classic (MIFARE Standard)に対応してない、とのことだった。
AndroidのNDEF Formattableを調べているときにも書いたが、最近のAndroidはNFCライブラリへのアクセス方法を、従来のlibnfc-nxpを使うか、NFC Forumが策定したNCI(NFC Controller Interface)を使うかに分かれている。

今までのAndroid製品でNFC対応のものは、たぶんNXPのチップを使ったものがほとんどだったのだろう(PN544とか65Nとか)。
が、そういうチップ依存の状況を嫌ったのか、早く一般的な手法にあわせようとしたのかは知らないが、とにかくそうなっている。
Nexus4や10はBroadcom社のチップを使っているそうだ。
Broadcom社はNCIで機能提供している(のだと思う)から、AndroidでもNCIを使うようになっている。


MIFARE Classicは、NFC Forumが規格としているType 1 Tag~Type 4 Tagにあてはまらない。
libnfc-nxpがMIFARE ClassicをNDEF対応しているのは、NXP社の独自NDEFフォーマットに対応しているからだ(PDF)。
NCIでは義理がないせいかもしれないが、とにかく対応してないのだろう。
そういう意味では、FeliCa LiteがNDEF Formattableじゃないのと似てる。

ファイルだけ見ると、externals/libnfc-nxpと、externals/libnfc-nciがある。
だから、NCIのライブラリはlibnfc-nciなのだろう。
その中に「bcm2079x」というフォルダがあるので、これがBroadcom社のチップ用なのかな。
だが、Type 2 TagのNDEF判定はlibnfc-nci/src/nfc/tags/rw_t2t_ndef.cで行っているようだ(T2T_CC0_NMN)。
だからチップに依存せず、NCIを使っているならMIFARE ClassicはNDEFとみなさないだろう。

一番下のライブラリはexternals/libnfc-nciとして、その上はpackages/apps/Nfc/nciを含むNfcServiceになるだろう。
jni/NfcTags.cppにdiscoverTechnologies()があるが、そこではTechListになるものがMIFARE Ultralightしかなさそうだ。
(SEL_RESとUIDを見ているようだ。)
MIFARE Ultralight以外は、TARGET_TYPE_ISO14443_3A扱いになるみたい。
cppでのTARGET_TYPE_xxxxは、javaのTagTechnology.xxxxに対応している。

  • TARGET_TYPE_ISO14443_3A ==> NFC_A
  • TARGET_TYPE_ISO14443_3B ==> NFC_B
  • TARGET_TYPE_ISO14443_4 ==> ISO_DEP
  • TARGET_TYPE_FELICA ==> NFC_F
  • TARGET_TYPE_ISO15693 ==> NFC_V
  • TARGET_TYPE_NDEF ==> NDEF
  • TARGET_TYPE_NDEF_FORMATABLE ==> NDEF_FORMATABLE
  • TARGET_TYPE_MIFARE_CLASSIC ==> MIFARE_CLASSIC
  • TARGET_TYPE_MIFARE_UL ==> MIFARE_ULTRALIGHT
  • (?) ==> NFC_BARCODE

ざっと検索した限りでは、NCI側ではTARGET_TYPE_MIFARE_CLASSIC を使っているところがない。
だから、やっぱり対応していないのだろうね。

どうでもいいが、NFC_BARCODEも対応してないみたい。
まあ、たしかにNFC Forumの対象外なのだろうけど、突然AndroidでAPIを追加したわりには扱いが冷たいなあ。
それならFelicaLiteクラスだって追加していいじゃないか、ぶぅぶぅ。


が、これはもちろん、素のAndroidを使ったらそうなるだろうというだけで、組み込んだ会社が対応してしまえば、対応できる。
Nexusは、なんとなく素のAndroidを使うようなイメージがあるけど、メーカーが出すときには互換性とかあるだろうから各自でがんばるのかなあ。

MIFARE ClassicがNFC Forumの対象外になっている理由は知らないが、メモリが連続していないとか、アクセスするのに認証が必要になるとか、そういうところだろうか。
安価で大量に出回っているので、すぱっと切り捨てるのも難しいと思う。
NFC Forumで認証関係が落ち着いたら、Type 5 Tagとかになって現れたりするのかねぇ。

5 件のコメント:

  1. 面白いです。「NFC_BARCODE」がKovioさんの製品でしょうか?

    返信削除
    返信
    1. Kovioさんだと思います。
      http://hiro99ma.blogspot.jp/2012/11/nfcbarcode.html

      NFC Barcodeを使った製品は見たことがないですね。

      削除
    2. Inside Secureさんのチャート(http://open-nfc.org/documents/PRE_NFC_0804-250%20NFC%20Standards.pdf)は見つけた。ISO 14443の層A-2と層A-1が使っただけ、でも、「Anti-Collision」機とコマンドが秘密でしょう。

      削除
  2. ジャジャン! 「OpenNFC」のコードベースが少しインフォメーション(http://pastebin.com/zBqEcVjE)を持っています。このソースが開いて、でも、開発プロセスがオープンじゃない。(笑)

    返信削除
    返信
    1. おお、早い :-)
      うーん、"Open"NFC ...

      PDF見たけど、Type 7 Tagまであるんですね。
      知らないものばかりです。

      削除

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。