off記事にも書いたように、現在取り組んでいるプロジェクトではRC-S620/Sをカードとして取り扱うこと(カードエミュレーション)を根幹に据えている。この根幹技術について、機能としては実現することができたので、記録を残すこととする。注:本記事でのカードエミュレーションは、R/WのPollingに任意のIDmで応答させることを指しているので、厳密にはカードエミュレーションではない。IDmのみで認証しているシステムにとってはカードエミュレーションになるのかもだけど。はじめに何か新しい機能を実現する際、先人がいると何かと心強いものである。参考文献に示すようにRC-S620/Sでのカードエミュレーションは過去にNFC猛者さんがされている。そんな猛者さんが福岡NFC勉強会の折に、「これくらいならば簡単にできました」としきりに仰っていたことが頭から離れず、今回カードエミュレーション取り組んでみることにした次第である。偶然にも最近、RC-S620/Sコマンドリファレンスマニュアル<簡易版>が更新された。新たに追加公開されたコマンドにより、猛者さんより格段に有利な状況で実現することができるようになった。(ちなみに猛者さんはPN533のドキュメント(PDF)を元に頑張ってらっしゃったらしい。)リーダ・ライタをカードのように取り扱うことについてご存じの通り、NFCには以下の3つのモードがある。NFCカード(タグ)のように見せかけるモード。NFCデバイス同士で通信するモード。NFCカード(タグ)に情報を読み書きするモード。Mode(FeliCaカードの代替)、NFC機能搭載Android端末はR/Wモード(画面ロック解除中は搬送波を出して相手を探している)で通常動作しているということができる。NFCデバイスはInitiator機能とTarget機能という2つの機能を持っている。これら機能がどのモードで使われているかを整理すると次のようになる(と思う)。P2P(Target)つまり、NFCデバイスであるRC-S620/Sを(丁度おサイフケータイのように)NFCカードのように「見せかける」ことも可能なのだ。v2.0で新しく公開されたコマンドの一つに、TgInitTargetがある。このコマンド、パラメータを見れば分かるようにNFCID2(FeliCaでいうところのIDm)を指定できるようになっている。ここを任意に指定すれば自分の望むIDmとして認識させられるのではないかと考えた。このことを元に、Arduinoライブラリを改造してみた。当初はさっぱり上手く行かなかった(Initというくらいだからsetup関数の中に記述していた)。コードを工夫するだけでPollingしているデバイスに応答させることができた。コマンドどう使うのが正しいのか上の実装方法であるがどうもRC-S620/SからはACKが返ってきていないようだ。コードをキレイキレイ化していないので確かなことは言えないが、どうも邪道なやり方らしい。ここは現在勉強中である。IDmを操る能力を手に入れたぞ(こう書くとなんか悪役っぽい)。参考リンク技術関係RC-S620/Sコマンドリファレンスマニュアル<簡易版>2012年5月に更新されたRC-S620/Sの簡易コマンドリファレンス。ManualNXPが公開しているPN533のマニュアル(PDF)。RC-S620/Sとコマンドが割と近い。[rcs620s]ターゲットになることはできた(修正)RC-S620/Sで遊ばれていたころの猛者さん。これ近辺の記事を頼りに実装した。[rcs620s]カードっぽく振る舞う1年以上前には、この記事に書いていることをされていた。第1回福岡NFC勉強会での猛者さんの発表。IDmの偽装(?)についての話もある。...猛者さんの記事に対する中の人のレスポンス。...「IDmだけで認証するのはやめた方がいいよ」と@SDK4FeliCaさんも仰っている。第1回東京NFC勉強会での@muo_jpさんの発表。IDmだけじゃいけないかもね、という内容。