2011/11/26

[libnfc]pn53x_TgInitAsTarget

LLCPがうまくいかんのだが、ログを見ていくとTgInitAsTargetのGeneralByteあたりがPN533のドキュメントと違う。
バグにしてはみんな問題なさそうなのだが・・・。

関数はpn53x_TgInitAsTarget()。
見ると、PN531 or RCS360の場合にはLEN Gtを書き込まずにGt[]のみ、それ以外はLEN GtとG[]というようになっていた。
ログからすると、RC-S620/SはRCS360扱いされているようだ。
うむ、実装通りだ。


さて、RC-S620/SのTgInitAsTarget。
コマンドの仕様が手元にない。
うーむ。

では、libnfcがどうやってRCS360と判定しているか見ておこう。
これはVID/PIDで見ているのかと思ったらそういうわけでもなく、GetFirmwareVersionコマンドの戻り値を使っている。
ICが0x33でVerが0x01だと、RCS360で、Verがそれ以外だとPN533になっている。
Revまで見ないといかんのかもしれんが、いかんせん情報がない。
うーむ。

では、とPN533形式にあわせたけどだめ。
他の要素か?と思っていろいろ変更していくと、結果としてはSENS_RESの値が問題だった。
どうも、RC-S620/Sで受け取ることができる値が決まっているようだ。


しかし、だ。

RC-S360もRC-S370もRC-S620/Sも、RC-S956を使っているとSONYのページには書かれている。
そう考えると、LEN Gtのようなプロトコルのレベルで書き方が違うってのは考えにくいなあ。
こればっかりは、General Byteを使うような通信をしてみないとわからない。
けど、ここはPN533とRC-S956で違う仕様なのだと考えた方が自然な気がする。

そんなわけで、今回はpn53x_target_init()のところで、RCS360な0x0004を設定するだけにしておこう。

      // Set ATQA (SENS_RES)
      if(CHIP_DATA(pnd)->type == RCS360) {
        //ueno add
        abtMifareParams[0] = 0x00;
        abtMifareParams[1] = 0x04;
      } else {
        abtMifareParams[0] = 0x08;
        abtMifareParams[1] = 0x00;
      }

0 件のコメント:

コメントを投稿

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