Nexus SとPN532でDEPできるか?というもの。
Nexus Sといえば、Android 2.3.4。
Android 2.3.4といえば、IsoDep。
IsoDepはISO 14443-4。
NFC Forum的にはISO-DEPもNFC-DEP、すなわちISO 18092のDEPもある。
手近に資料があるので、NFC Forumのドキュメントから見ていこう。
-- NFC Forum --
ISO-DEPは、Type 4AかType 4Bタグを使用する。
Type 1は、NFC-A。でもCRC_B。
Type 2も、NFC-A。こっちはCRC_A。
Type-3は、NFC-F。あれ、Listen Modeはoptionalなんだ。。。
Type-4Aは、NFC-Aで、Listen Modeはoptional。
Type-4Bは、NFC-Bで、Listen Modeはoptional。
今までR/W周りをやってきてわかったのは、R/Wコマンド1発でいろいろとパケットをやりとりしていること。
それと、パケットの中身もうまいこと作ってくれていること。
CRCやDIDなんかは、上位層は気にしなくてよかったからな。
なので、RFパケットのところはあまり深く見なくても済む。
-- ISO 14443-4 --
ネットで、ISO 14443-4ドキュメントが出てきた。
いいんだろうか。。。
詳細な説明は見ない。それは前述した通りだ。
ただ、用語は把握しておいた方がよい。
DEP、という言葉は使われていないのだ。
「Half-duplex block transmission」とか「chaining mechanism」とか。
そういった言葉がデータ交換周りで使われている。
これを基礎知識として、PN533のドキュメントを読んでみよう。
-- PN533 --
ここでは「ISO/IEC14443-4 chaining mechanism」と「DEP chaining mechanism」という言葉が出てきている。
chainingというのは、大きいデータを複数パケットに分割するやり方、みたいなものだと把握している。
なので、これは送信した後の話だ。
送信するパケット自体の話は、そのシーケンスを見るとよい。
ISO14443-4 chaining mechanismのシーケンス例として、PN533(Initiator)とISO 14443-4 PICC間のものが描かれている。
PICCはProximity IC Cardのことだが、おそらくTargetと同じ意味だろう。
InitiatorがInListPassiveTargetでポーリングすると、相手からSEL_REQの応答SEL_RESとして「ISO14443-4 compliant」が返ってくるとなっている。
では、SEL_RESを見てみよう。
NFC Forumのドキュメントを見ると、SEL_RESのbit7, 6で判断できるようだ(bit8~1)。
・00 : Type2 Tag
・01 : Type 4A Tag
・10 : NFC-DEP
・11 : Type 4A TagとNFC-DEP
つまり、bit6=1であればISO-DEPが可能ということになる。
このSEL_RESは、ISO18092のものを拡張してある。こちらはbit7をチェックするだけになっている。
シーケンスの続きでは、InListPassiveTargetのあとはInDataExchangeになっている。
では、とInDataExchangeの詳細を読むと、ああ、説明が全部書いてあった。
SetParametersも一緒にやってやらんといかんかも。
そんなわけで、R/Wから見たISO-DEPは、
- PN533ではInDataExchangeでDEP Initiator側になれるはず
- Initiatorになるなら、InListPassiveTargetでSEL_RESを見るとよい
- TgInitAsTargetでDEP Target側にもなれるはず
先日コメントした者です。
返信削除丁寧な説明、本当にありがとうございます。
この記事がなければ行き詰まっていたところでした。
setparameters
TgInitAsTarget
TgGetData
TgSetData
のコマンド列でNexus Sが反応しました。
InDataExchangeもやってみようかと思います。
役だったようで何よりです。
返信削除R/Wのプロトコルは、失敗しても応答がないだけで理由がわかりづらいですよね。