2011/12/12

PollとListen、ActiveとPassive

鳥頭っぽくていかんが、またわからなくなってきた。

Poll Modeは、ポーリングする方ではなく、ポーリングしてもらう方なので、無線を出す。
Listen Modeは、聞いてもらう方ではなく、聞きに行く方なので、受信する。
というのが、前回までだ。

 

InJumpForDEPのパラメータに、ActPassがある。
Active ModeかPassive Modeかの選択だ。
あまり気にしていなかったのだが、PN533ドキュメントを読むとプロセスが異なると書いてある。


libnfcのDEPサンプル(initiator側)では、212KbpsのPassive ModeとしてInJumpForDEPを使っている。

まず、POL_REQを送信する。
そのデータは、PassiveInitiatorDataだ。今回はワイルドカードの「00 ff ff 00 00」。

それに対するPOL_RESを受けとったら、NFCID2t(ターゲットのIDm)として覚えておく。

 

次に、ATR_REQを送信する。
データとして、NFCID3iとGiを付ける。
DIDを使うかどうかは、内部パラメータfDIDUsedで決定される(SetParameters)。
マルチターゲットではないのなら、DIDは0(DEPルール)。
NFCID3iは、さっき取得したNFCID2tに2byte(0x00 0x00)埋めた値を使う。

それに対するATR_RESを受けとったら、ターゲットはTPE(Transport Protocol Equipped)だ。
受け付ける準備ができた、ということだろう。
PN533はNFCID3tを記憶し、Tgを決める。Tgは1。

 

これがPassive時の動きだそうな。


どこら辺がPassiveなのかわからんので、Active時の動きも見ておこう。

まず、ATR_REQをNFCID3iとGi付きで送信する。
さっきはPOL_RESの値を使ったが、今回はそれがないので自前のNFCID3iを用意する。
DIDの件は同じ。

それに対するATR_RESを受けとったら、ターゲットからのデータを待つ。

 

これが、Active時の動きだそうな。
違いは、ATR_RES後の動きだろう。
Passiveの場合は、ターゲットが受け付ける準備ができたということで、InJumpForDEPした方が送信する。
Activeの場合は、ターゲットからの送信を待つ。

私のイメージでは、Passiveが相手からの送信を待ち、Activeが自分から送信する、だったのだが、違うようだ。
今回のサンプルはPassiveなので、initiatorが「Hello, World」を送信する。
それを受けとったら、targetが「Hello, Mars」を送信する。
そういう動作になっている。


んで、TgInitAsTargetのModeでDEPとならない件は、これとは絡まなさそうだ。

NFC Forumのドキュメントを読んでいて出てきたのは、ATR_REQのRCバイトはDEPの場合0x00か0x02ということ。
0x00は、いつものポーリング。
0x01は、システムコード付き。
0x02は、通信速度付き、じゃなかったっけ?
まあ、もともと0x00になっていたから、今回は関係ない。

あと、NFCID2の先頭は「0x01 0xFE」であること。
これも決められていたが、サンプルはそうなっている。

PN533のTgInitAsTargetの説明にはDEPのことも書いてあるが、ATR_REQを受けとったらDEPモードって書いてあるんだよなぁ・・・。
うーん、変にSetParametersをされることによって、RC-S956では動作しなくなってたりするのかしら。

0 件のコメント:

コメントを投稿

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