2011/08/21

[felica]CommunicateThruEXを考える

RC-S620/SのCommunicateThruEXは、PN533にはないコマンドだ。
PN533で相当するのは「InDataExchange」「InCommunicateThru」だろう。



用途は、Targetへのデータ送信。
CommunicateThruEXのデータ部が、Targetへ渡されるときにはプリアンブル、Sync Codeに引き続いてそのまま渡されることになっている。
まあ、WirelessコマンドとしてはCRCが必要なので、そこはチップがうまくやってくれているのだろう。



紛らわしいので書いておくが、JISやNFC Forumで定義されているのは無線時に使用する「Wirelessコマンド」である。
R/Wで使うコマンドは有線時に使用する「Wiredコマンド」だ。
「Wirelessコマンド」とか「Wiredコマンド」とかは私が勝手に呼んでいるだけで、正式には知らん。



例えば「ポーリング」という動作がある。
R/WへはWiredコマンドとして「InListPassiveTarget」コマンドを送信する。
コマンドを受けとったR/Wは、パケットの中身を解析する。
InListPassiveTargetはパラメータによってNFC-AとかNFC-Fなんかを使い分ける。
NFC-A用のパラメータだったら、Wirelessコマンド「SENS_REQ」なんかに置き換えるし、NFC-F用のパラメータだったら「POL_REQ」に置き換える。
Target側はWirelessコマンドを受けとったら、それに返信としてSENS_RESなりPOL_RESなりを返す。
こういうのをR/WとTarget側で繰り返し、InListPassiveTargetとして満足したらレスポンスデータを作成して呼び元に返す、ということになっている。



このあたりは、PN533のドキュメントがわかりやすいと思う。
わかりやすいというか、しくみがわかってから読むとわかりやすいというか。


話が少し脱線したが、戻そう。


InListPassiveTargetなどのWiredコマンドは、複数のWirelessコマンドを発行したり、R/W内部のパラメータを変更したりするのに使われる。
それに対してCommunicateThruEXなどは、引数を単にTargetに送信し、渡されたレスポンスを受信するだけだ。
よって、CommunicateThruEXを使うためには、Wirelessコマンドを知っておかなくてはならない。

ここら辺まで来て、ようやくJISだのNFC ForumのDigitalProtocolだのを読んだ知識が使えることになる。

例えば前々回作った、nimocaの残高を読むアプリ。
あれはFeliCaでいうところの「Read Without Encryption」、NFC Forumでいうところの「Type Tag 3」の「CHECK」を使っている。
読み出す手順なんかもドキュメントに書いてある。

FeliCaカード ユーザーズマニュアル(824KB) : p.59

http://www.nfc-forum.org/specs/spec_license : 「NFC Forum Type 3 Tag Operation Specification 1.1」p.10


RC-S620/Sで使えるコマンド一覧は、RC-S620/Sを購入したときに「公開しない」という条件を元に入手できている。
なので、SONYで公開されていない情報は書くことができない。。。

うーん、やっぱり使用できる有線プロトコルの仕様は全部出してほしいなあ。
まあここは内部でがんばってもらうしかない。

仕様全部はあきらめるとしても、せめてRC-S620/S購入の時にもらった資料が一般入手できるようになれば、書けることも増えるし、教えてもらったりもできるのだが。
これからの動きに期待しよう。

0 件のコメント:

コメントを投稿

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

注: コメントを投稿できるのは、このブログのメンバーだけです。