2013/11/16

[nfc][hce]ATRがFeliCaで返ってくる?

Android 4.4のHCE(Host Card Emulation)がどうしても気になる。
SDK for NFC Starter Kitのサンプルでは、そもそもどうやって動くのかがわからない。
もっと何か、解析的なツールはないものか・・・。

どうやら、NDEF WriterがType4Aに対応しているらしい。
よし、とやってみたが・・・まあ、動かんわな。
最初は「タグが正しくない」みたいなエラーだったのだけど、何度かやるとPaSoRiが応答しないというようなメッセージになってしまった。
うーむ。

よくわからないので、自己診断をしてみよう。
PaSoRiのドライバには、診断ツールも入っているのだ。
やってみると、特に問題は無いらしい。
よかった。

せっかくなので、診断ログを見てみると・・・ATRという文字があった。
確かこれは、ATtRibuteとかそんなのの略だったよな?
これが返ってくるのはカードをPaSoRiにかざしたまま診断したときだ。
つまり、これはカードを読んだ結果らしい。

Nexus7をかざすと、ちゃんと成功で返ってきている。
ということは、やはりNexus7を何らかのタグとしてはわかってくれているみたいだ。

ATRは、こんな数字だった。

3B8F8001804F0CA00000030611FFDF0000000059

なんか、わからんね。
解析しよう。


http://en.wikipedia.org/wiki/Answer_to_reset

ここと、Interface誌2012年4月号のPC/SC資料を読みながら解析した。
途中から、PC/SCの資料がないとわからなかったので、そこはpcsc3_v2.01.09_sup.pdfを読んだ。

3B:TS
    Direct Convention
8F:T0
    8:TD1, TC1, TB1, TA1の順。TD1のみ有り。
    F:historical bytes。15バイト。
80:TD1
    8:TD2, TC2, TB2, TA2の順。TD2のみ有り。
    0:T=0(character-oriented)
        T=0...character-oriented protocol
        T=1...block-oriented protocol
01:TD2
    0:TD3, TC3, TB3, TA3の順。どれも無し。
    1:T=1(block-oriented)

804F0CA00000030611FFDF00000000:historical bytes
 
   80:カテゴリ・インジケータ
    4F:アプリケーション識別子の存在インジケータ
    0C:長さ
        A000000306:RID(この値は、PC/SC WorkgroupのAIDらしい)
        11:SS(pcsc3_v2_01_08_sup.pdfに表がある)
            FeliCa
        FFDF:NN
             RFU
        00000000:RFU

59:TCK
    チェックサムみたいなやつ。

メモ書きをそのまま貼り付けた。

よくわからないけど、FeliCaと見ているのか?
でも、その次のNNは変な値が入っている。PC/SCにはちゃんとFeliCaの定義値があるというのに。

ちなみに、MIFARE Ultralight-Cをかざした場合はこうなった。

03:SS
        ISO 14443A part3
003A:NN
        MIFARE Ultralight C

うん、SSもNNもあってる。

ちゃんとFeliCaをかざすと、診断結果はこうなる。

カードとの通信(PC/SC): OK
  ATR        : 3B8F8001804F0CA00000030611003B0000000042
  Target Name    : FeliCa
  Target Type    : FeliCa
  Baud Rate    : PCD->PICC : 424, PICC->PCD : 424

これがNexus7をかざすと、こうなる。

カードとの通信(PC/SC->FeliCa): OK

うーむ。
これはAndroid BeamをOFFにしたときの値。
Android BeamをONにすると、こうなる。

カードとの通信(PC/SC): OK
  ATR        : 3B8F8001804F0CA00000030611FFDF0000000059
  Target Name    : FeliCa NFC-DEP Target
  Target Type    : FeliCa(NFC-DEP Target)
  Baud Rate    : PCD->PICC : 424, PICC->PCD : 424

そう、さっきはこの値を解析したのだな。
ログにも出ているが、DEPでターゲット側になったときの情報なのだろう。
NNもRFUな値になっているが、実はNFC-DEPの値かもしれんな。

じゃあ・・・そうじゃないときのATRは取れてないということになる。
と何度か繰り返すと、Android BeamをOFFにしていてもNFC-DEP Targetになってることがあった。
よくわからんので、Nexus7(2012)をかざすと、NFC-DEP Targetになった。
もう、さっぱりわからん・・・。

0 件のコメント:

コメントを投稿

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