2011/02/27

[nfc][dep]PFB

まだISO 18092を眺めている。
ようやく、DEPの章に入った。

前回、DIDとNADはPN533が自動でやってくれている、と書いた。
しかしDEPの場合は、アプリ側がやってやらなくてはならないようだ。

InDataExchange()は、パラメータをそのまま送るだけである。
受けとる方も、そのまま受けとるだけである。
このパラメータの中身が、プロトコルによって変わってくる。
私が見ているのはISO 18092のDEPで、おそらくNFC-DEPと同じ物だ。
しかし、ISO 14443にもDEPがあり、それはそれで別の物だろう。
どっちにしても、送るコマンドはInDataExchange()で済む、ということになる。


さて、ISO 18092のDEPでは、パケットの頭にPFBというデータがつく。
「Information」「ACK/NACK」「Supervisory」のどれかとなる。
そして、それらの使い方も書いてある。

基本ルールは3つ。

  • Initiatorから始める。
  • More Informationを受信したら、ACKを返す。
  • Supervisoryはペアで使う。REQとRES。

Initiatorルール

  • 不正なパケットだったら、NACKを返す。
  • NACK未送信でタイムアウトしたら、attentionコマンドを送信する。
  • NACK送信済みでタイムアウトしたら、NACKを再送する。
  • ACKを受信したら、データの続きを送信する。
  • DSL_REQに対するDSL_RESがなかったら、DSL_REQを再送するかターゲットを無視する。

Targetルール

  • Targetはdata pduの代わりにRTO pduを送信できる
  • chainingを含まないパケットを受信したら、データだと認識する。
  • NAKを受信したら、再送する。
  • 不正なパケットを受信したら、返事はせずにそのまま待つ。
  • Supervisoryのattentionコマンドを受信したら、attension応答を返す。

いくつか、新しく用語が出てきた。

chaningは、連続しているデータのこと。
1回に254byteくらいまでしか送信できないので、何度かに分けてデータを小分けにして送ることになる。
その小分けした部分を送るとき「まだ続いてますよー」という意味を持つ。
それがPFBの「Multiple Information」なのだけど、ここで「More Information」と書いてあるのが気になる。
同じものと思いたいのだが、それなら同じ用語を使ってほしい。。。

そしてRTO。
これはいきなり出てきた上に、説明がない。
どうやらこれは、ネットワークの用語みたいだ。
Receive Time Out。受信タイムアウト。
Supervisoryにtimeoutビットがあるのだが、それを指しているのだろう。
Targetにのみ、Response timeout extensionというデータが載っていた。


さて、R/Wから見ると、この仕様はかなりシンプルである。
無線上はあれこれとパケットの種別が違うのだけど、有線コマンドとしてはそんなに種類がないからだ。

LLCPは、この上に載っかることになる。
ISO 14443であっても、同じことだ。
しかし・・・LLCPの上には何を載せたらいいんだろう?
OSI参照モデルでは、ネットワーク層が来る。
TCP/IP参照モデルでは、インターネット層にあたるらしい。IP、の部分。
たぶん最後はAndroidに載せるつもりなのだろうが、どうしたものか。。。

0 件のコメント:

コメントを投稿

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