2012/01/22

[nfc]パソコンでNFC開発をするときに安くやりたい(ハード編)

Windows

Windowsといっても、いろいろある。
すまんが、私はXP 32bitしか持ってないのだ。最新のことはよくわからん。
パソコンにNFCのリーダライタがあればいいが、ないと思う。
安いのは、SONYのPaSoRi。今はRC-S370がいいんじゃないか。
PaSoRiは、FeliCaだけでなく、NFC-A/Bもいける(もちろん、NFC-Fも)。
Amazonで2300円くらい。
デバイスだけでなく、カード側もほしいかもしれん。
まあ、カード側はパソコンとは別になるので、あとにしよう。
リーダライタが入手できたら、次はソフト開発環境だ。
ソフト側は、選択肢が少ない。
まあ、SONYのSDK for NFC Starter Kitが普通の選択肢だろう。
Starter Kitは商用利用できないが、無償だ。
これは、PaSoRiでリーダライタ機能と、アドホック機能(PUSH、FALP)を提供するライブラリとドキュメントだ。
(FALPは、フィーチャーフォンからのFALP受信はできなかった。)
ビルド環境がいる。
Starter Kitには、Adobe/AIRでやるものと、C++などでやるものがある。
すまんが、Adobe/AIRはよくわからんので、割愛させてもらう。
C++などは、MicrosoftのVisual Studio Expressを使うと良かろう。
ユーザ登録がいるが、無償で使うことができる。
これだけでは、まだ不十分だ。
NFCに関するドキュメントがいる。
まあ、これもパソコンには関係がないので、あとだ。

Linux

さて、Linuxの場合はいろいろと事情が異なる。
PaSoRiのライブラリが提供されていないので、普通の手段ではPaSoRiが使えないのだ。
libusbという、LinuxでUSBを使うためのライブラリがある。
これを利用したlibpafeというPaSoRiライブラリがある。
FALPはできないが、リーダライタ機能は動く。
PaSoRiに特化していたと思うので、NFC-AやBは無理だろう。
完成度として高いのは、nfcpyだと思っている(使ったことないけど)。
Pythonでアクセスするのだ。
これは、たぶんSONYの人がやっているところで、PaSoRiもいける。
libnfcもある。
これもPaSoRiがだいたい使える。
ビルド環境は、gccでよい。


PaSoRiを使わず、別の手段を考えてみよう。
組込み用途のRC-S620/Sを使うのだ。
どこから入手するんだ?ということになるが、スイッチサイエンス社がよいだろう。
RC-S620/S本体と、接続しやすくする基板、RC-S620/Sは3.3V/5VのUARTなのでレベルコンバートしてシリアルに変換するようなものがあればよい。こんなのとか。
RC-S370もRC-S620/Sも、FeliCaチップとしては同じRC-S956というものが載っている。
RC-S956は、コマンドを送信すると、うまいこと処理をしてレスポンスを返してくれる。
そのコマンドとレスポンスの経路が、RC-S370だとUSBだし、RC-S620/Sだとシリアルというだけのことだ。
SDK for NFC Starter Kitなどのライブラリは、その経路を隠蔽して使いやすくしてくれていると考えればよい。
つまり、隠蔽するところも自作してしまえば、別にRC-S370だろうとRC-S620/Sだろうと関係はないのだ。
つまり、WindowsもLinuxもないことになる。
RC-S620/Sは、自分でコマンドを送信しなくてはならない。
SONYから簡易コマンド仕様が出ているので、これを利用する。
サンプルがほしいかもしれないが、パソコン向けではなくArduino向けがある。
読むのはそんなに難しくないので、ここを足がかりにするとよいだろう。

私はどうしているかというと、自分でRC-S956用のライブラリを作り、libusbを使ってPaSoRiにアクセスしたり、シリアルでRC-S620/Sにアクセスしたりしている。
「それよりも、リーダライタはSONY製以外にないの?」と思ったかもしれん。
私もそう思って探したのだが、安いのは探せなかったのだ。
実は選択肢はあるのだ。
ACR-122とか。これはlibnfcでも一応対応はしているらしい。
ACR-122は、タグとセットでtouchatagというところで販売されているとのこと(Tyson Keyさん情報)。
NFC開発スターターキットとか。Amazonでも売ってた。
でも、PaSoRiよりは高いのだ。
もちろん、情報もセットで売られているので、「どこから始めたらいいんだろう」と迷う時間は大幅に削減される。
仕事だったり、急ぎだったりするなら有用だと思う。
ただ、個人の趣味でやるのなら、あまりお金はかけずにやりたいではないか。
そしてできれば、ライブラリでは提供していないようなすべての機能を使いつくしたい。
そういう意味では、OpenPCDってのは究極かもね。

とはいえ・・・それをやっていると、NFCサービスというものになかなか近づかない。
FeliCaとかMifareのカードにアクセスしたいだけなのに、USBがどうの、シリアルがどうの、リーダライタの仕様がどうの・・・などとはやりたくなかろう。
なので、そういうところは他の人に任せて、自分の好きな分野をやるのによい近道を探すといいんじゃなかろうか。
まあ、NFCの規格は知っておいた方がいいと思うので、次回はドキュメント編をやろう。
(いつになるかわからんが・・・。)

4 件のコメント:

  1. Konnichi-wa from England,

    My knowledge of Japanese isn't great, although I'm getting by with Google Translate; and trying to learn, whenever I get an opportunity.

    That aside, I'm also interested in NFC and FeliCa, and have one of the ACR-122U devices - so I'd be interested in hearing your progress in working with it.

    If you're looking for one of those readers, it might be possible to import it from Belgium via the "TouchATag" Website; or from ACS in Hong Kong.

    I also had some information regarding the chipset used in those devices - but I haven't got the URLs handy, at the moment.

    From what I understand, the FeliCa application-layer protocol (without the CRC or preamble) is wrapped into some chipset-specific commands, and then a 4-byte "pseudo-APDU" header is added.

    The reader itself implements the USB Forum's CCID Class specification; and LibNFC uses PCSC to interface with it.

    So far, I've managed to write a Wireshark dissector for parts of the FeliCa protocol (based upon Sony's FeliCa Lite documentation); and I've had a look at adapting libpasori to work with my reader - but I wasn't very successful.

    I hope that's of help.

    Take care,

    Tyson.

    返信削除
    返信
    1. Sorry, that should have been "felicalib" - and not "libpasori". My mistake.

      削除
  2. Hello, Ken.
    Thank you for your comment and information about ACR-122U.
    I wrote about ACR122U today (sorry, in Japanese).
    I'll study about pseudo-APDU.

    I did not know the USB protocol was able to be analyzed with Wireshark.
    (using USB capture, and analyze by hand...)

    Thanks.

    返信削除
    返信
    1. No problem - and I appreciate you taking the time to read and respond to my comments (even with the unfortunate language barrier).

      I'm enjoying your posts so far - even if it's difficult for me to understand them without having to guess a little (although it's part of the fun - and I guess that the "unusually" translated grammar maps fairly cleanly into Japanese).

      I don't know if it will work with the PaSoRi reader (since it doesn't seem to be PCSC-based, from what I understand) - but I wrote Wireshark's USB CCID dissector for use with the ACS reader, since I didn't have a good tool for analysing smartcard/NFC data from it.

      As promised, I've also found the datasheet URL for the NXP PN532 chipset used in the ACS reader at http://www.nxp.com/documents/user_manual/141520.pdf.

      Tyson.

      削除

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