一人でもSNEP開発

5,610 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,610
On SlideShare
0
From Embeds
0
Number of Embeds
2,107
Actions
Shares
0
Downloads
16
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

一人でもSNEP開発

  1. 1. 一人でも SNEP 開発 一人でもシリーズ
  2. 2. SNEP って?● Simple NDEF Exchange Protocol● 「簡単に NDEF を交換しよう」プロトコル● 「交換」だけど、一方向 – 片方が送信して、片方が受信する – それを繰り返すと交換もできる
  3. 3. NDEF って?● NFC Data Exchange Format● データ交換するときのフォーマット – NFC カードに NDEF 形式で書き込む ● NFC R/W で読み込む – SNEP で NDEF データを転送する – SNEP で NDEF データを受信する
  4. 4. SNEP を使う利点は?● NFC 端末同士で NDEF データを交換できる – NFC カードを必要としない – 容量制限がない ● 人間の忍耐が必要になるかもしれんが…● 動的なデータ作成が可能 – 状況に応じたデータを送信 ● Android Beam のような使い方
  5. 5. 実際はどうやるの?● NFC 端末同士の通信 – NFC は数 cm の距離でしか通信しない – つまり、端末を向かい合わせる必要がある● 向かい合わせる方法 – 2 台の端末を一人が持つ ● 確実だけど、相手に渡すのはイヤだ – 二人で向かい合わせる ● 安心だけど、長時間はきつい
  6. 6. 自分から相手へ転送する ● 自分アプリが NDEF データを作る ● 自分アプリが、 SNEP PUT で転送 ● 相手アプリが、受信 ● 相手アプリが、 NDEF データ解析 SNEP SNEPapplication application
  7. 7. 相手にデータを要求する ● 自分アプリが、 SNEP GET で転送要求 ● 相手アプリが、 NDEF 転送 ● 自分アプリが受信して、 NDEF データ解析 SNEP SNEPapplication application
  8. 8. これから、細かい話になります
  9. 9. SNEP の下● SNEP は「 NDEF 交換のためのプロトコル」● その下に、通信制御する「 LLCP 」がいる● NFC Forum で規定されている SNEP SNEP LLCP LLCP
  10. 10. LLCP の下● LLCP は通信制御プロトコル● その下にデータ交換の「 NFC-DEP 」がいる● NFCIP-1 のデータ交換プロトコル LLCP LLCP NFC-DEP
  11. 11. SNEP の実装をするとき● SNEP を作りたいと思ったら… – LLCP の実装 – NFC-DEP の実装● 下から順に作っていこう – そして順番に動作確認していく
  12. 12. もう少し細かい話をします。 RC-S956 に実装したときの話です。RC-S620/S のコマンドリファレンスマニュアルを見て、そこにないものは PN533 のマニュアルから情報を得ています。よって「正しいのか?」といわれると、よくわからないです。
  13. 13. RC-S956 とは● PaSoRi RC-S370 や RC-S620/S に搭載され ている FeliCa チップ – RC-S330 も、おそらくそう – RC-S320 は、たぶん違う● NFC R/W 用チップ – モバイル用のチップではない
  14. 14. NFC-DEP● NFCIP-1 でのデータ交換プロトコル – 「 NFC-DEP 」という名前は、 NFC Forum の名称● データ交換方法 – DEP_REQ と DEP_RES を使っている● データ交換の前に「接続」という作業がある – ATR_REQ と ATR_RES で行う● 接続の前に通信設定をしなくては – Initiator か Target か – Active か Passive か – 通信速度
  15. 15. NFC-DEP の実装● RC-S956 がけっこうやってくれる● Target になるとき – TgInitTarget コマンドを使う ● 通信設定は Initiator まかせ – ATR_REQ や RLS_REQ は自分で処理する – GeneralBytes は、自分でさばく ● データは LLCP によって決められている● Initiator になるとき – InJumpForDEP コマンドを使うと楽 ● 通信パラメータは自分で考える – ATR_RES は自分で処理する – GeneralBytes は、自分でさばく – データ転送は InDataExchange コマンドを使うと楽
  16. 16. LLCP● DEP に載せるデータなので、 DEP 方式には依存しないが、 NFC Forum が「 LLCP は NFC-DEP を使う」となっている。● IEEE 802.2 と近いものがあるようだ● NFC-DEP は Initiator→Target へ送信し、 Target が Initiator に 返信するという NRM 通信 (Normal Response Mode) だが、 LLCP は双方で交換する ABM(Asynchronous Balanced Mode) 通信を 行う。 – 転送するデータがないときには相手に送信権を渡す ●「転送するものがないよ」を転送する – つまり、ずっと何かを転送し続けることになる● データは PDU というタイプとペイロードがセットになったものを転送 – NDEF ではない
  17. 17. LLCP の実装● NFC-DEP の API を、 Initiator/Target 関係なく使えるようにしておい た方がいい – 私はそうしてないので、 LLCP が Initiator と Target で別実装に なってしまった● 「サービス」と「サービス検索」がまだわかってない – nfcpy という実装を相手に通信したのだが、サービス検索を使わな いと SNEP が始められなかった – 実装的な方言なのか、何か別のルールがあるのか…● ドキュメントが、なんかわかりにくい – シーケンスが載っていないので、何が正しいかよくわからない
  18. 18. SNEP● LLCP までは、データ形式はなんでもよい● NFC Forum 標準のデータ形式である NDEF を交換するするために は、 LLCP の上にプロトコルを用意する必要があった。 – Android NDEF Push Protocol というものも LLCP を使っ ているが、 SNEP 発表前なので Android 独自プロトコルに なってしまった。● 非常にシンプル – 主に、 PUT と GET をするだけ。 – LLCP は 1 PDU で転送できるデータサイズが小さいので、 SNEP 層 がデータを細切れにしたりつなぎ合わせたりすることになるだろ う。
  19. 19. SNEP の実装● LLCP の API を Initiator/Target 関係なく使えるようにしておかない と、ここもそれぞれの実装にわけないといけなくなってしまう● めんどうだったら、 NDEF サイズを 128byte 以内に限定しておくと、 データの分割と結合をやらなくてよくなる – 128byte は、 LLCP での最小単位● NFC-DEP の最高速度が 424kbps なので、けっこう時間がかかる – 接続までの通信は、ほぼ固定時間になるだろう – ABM 通信なので、相手から「次のデータ送って」という通信が分割 した回数だけ発生する – 無線の部分が 424kbps というだけなので、 R/W との通信速度も ボトルネックになる ● RC-S956 はデフォルトだと 115kbps なので、こっちの影 響の方が大きい
  20. 20. やってみた感想● LLCP がよくわからなくて大変だった。 – 未だによくわからん…● R/W 間の距離が近すぎるとうまくいかなかった。 – 1cm くらいのプラスチックを挟んだ● Passive 通信だと、 R/W の位置関係が微妙にずれた だけでうまくいかないことがあった。 ちかすぎ
  21. 21. 最後に● SNEP 対応している端末がないと、おもしろくない● 電話じゃない SNEP 対応端末が出てくれないだろうか – LLCP 端末でもいいや – 電話は嫌い

×