2011/02/23

[nfc]能動と受動、もう一度

まだ続いている、このネタ。
いい加減終わらせたいのだが、自分が納得するまではやらんと。

前々回はNFC、前回はISO 18092。
そして今回は、PN533のドキュメントで見ていこう。


まず、整理しよう。

「Active」という考え方が出てくるのは、P2Pのときだけのはず。
ターゲットがカードであれば、自分でRFを作ることができないからだ。
「俺のデータを読め」というカードはなく、もしそういうことをやるならDEPになる、と思う。

そうすると、自分でRFを出せる=イニシエータ、になってしまう。
しかしP2Pは、イニシエータとターゲット間のHalf-duplexだ。
イニシエータとイニシエータのP2Pは、ないはず。

ということは、起動時にイニシエータ、ターゲットでそれぞれ起動し、イニシエータがターゲットに「お前がActiveになれよ」と命令するしかないのではなかろうか。
その線でドキュメントを見ていこう。


PN533によると、ホストから見るとActiveもPassiveも使うコマンドは同じとのこと。
RC-S620/Sはわからんが、同じ動きをすると考えておこう。

では、InJumpForDEPのパラメータにあるPassive/Activeは何を意味しているのだ?
このコマンド自体、自分がイニシエータであることを認めている。
イニシエータがDEPとして初めて使うコマンドが、これなのだ。

p.82から説明が載っていた。

ACTIVE MODE

  • Activeと通信速度を設定
  • ATR_REQにNFCID3iとGiを載せて送信。
  • ATR_RESの受信。NFCID3tと属性Tgを覚える。
  • ATR_RESの中身はホストにも渡す

PASSIVE MODE

こっちは、106kbpsと212/424kbpsで違うみたい。

if(106kbps) {

  • ターゲットを1つ選ぶ(SENS_REQ, SDD_REQ, SEL_REQ)
  • 後で使うためにNFCID1tを保存
  • ATR_REQにNFCID3iとGiを載せて送信。

} else if(212kbps || 424kbps || 847kbps) {

  • SDDを処理?
  • POL_REQにPassiveInitiatorDataを載せて送信。
  • ATR_REQにNFCID3iとGiを載せて送信。

}

  • ATR_RES受信に成功した場合、そのターゲットはTPEだ。
    NFCID3tと属性Tgを覚える。

※どっちのmodeにせよ、ターゲットをアクティベートする前にホストでコマンドを中断したら、RFもOFFになる。


「RF出せ」みたいなのは見当たらなかったな。
シーケンスだけ見ると、Activeの方が少なくて済むし、Passiveは普通のカードみたいにポーリングしてから始める、みたいなところしか違いがわからなかった。
このあたりは、18092にも同じようなことが書かれていたように思う(あんまり読んでないけど)。

いろいろとドキュメントを眺めてきたが、ActiveだのPassiveだのは、取り決めの問題だと思った。
「送信側はPassiveにしてね」とか、その程度。
実装する方からすると、Activeに対応するのは面倒だから、Passiveだけがいいなどとなるのかな。
だって、Passiveならカードとも同じなはずだし。

さて、そこがどうあるべきかは、LLCPドキュメントにはなかったと思う。
ということは、Digital ProtocolかActivityか。。。

Activityドキュメントはあんがい重要であることを昨日知ったばかりだ。
読まねば・・・。

0 件のコメント:

コメントを投稿

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