LLCPの動作確認をするには、R/Wが2つないとだめだ。
うちにあるのは、パソリとRC-S620/S。
ならば、RC-S620/Sをlibnfcから使うことができるならばよかろう。
使うのは、RC-S620/SとUSB-シリアル変換(CP2102)を接続したもので、Linuxでは/dev/ttyUSB0として認識されている。
幸い、libnfcには「pn532_uart」というシリアル向けのドライバが入っている。
RC-S956もPN532も似たようなもんじゃないだろうか?
$ ./configure --with-drivers='pn532_uart,pn53x_usb' --enable-serial-autoprobe
$ make clean all
$ sudo make install
$ utils/nfc-list
utils/.libs/lt-nfc-list uses libnfc 1.5.1 (r1182M)
No NFC device found.
うーむ。
こちらを参考にデバッグ。
http://code.google.com/p/libnfc/issues/detail?id=176
$ make clean all
$ sudo make install
$ utils/nfc-list
utils/.libs/lt-nfc-list uses libnfc 1.5.1 (r1182M)
libnfc.general - 0 device(s) found using PN53x USB driver
libnfc.driver.pn532_uart - Trying to find PN532 device on serial port: /dev/ttyUSB0 at 115200 bauds.
libnfc.bus.uart - Serial port speed requested to be set to 115200 bauds.
libnfc.chip.pn53x - Diagnose
libnfc.chip.pn53x - Timeout values: 1 s, 0 us
libnfc.bus.uart - TX: 55 55 00 00 00
libnfc.chip.pn53x - SAMConfiguration
libnfc.chip.pn53x - Timeout values: 1 s, 0 us
libnfc.bus.uart - TX: 00 00 ff 03 fd d4 14 01 17 00
libnfc.bus.uart - RX: 00 00 ff 00 ff 00
libnfc.chip.pn53x - PN53x ACKed
libnfc.bus.uart - RX: 00 00 ff 02 fe
libnfc.bus.uart - RX: d5 15
libnfc.bus.uart - RX: 16 00
libnfc.chip.pn53x - Last command status: Success
libnfc.bus.uart - TX: 00 00 ff 09 f7 d4 00 00 6c 69 62 6e 66 63 be 00
libnfc.bus.uart - RX: 00 00 ff 00 ff 00
libnfc.chip.pn53x - PN53x ACKed
libnfc.bus.uart - RX: 00 00 ff 08 f8
libnfc.bus.uart - RX: d5 01
libnfc.bus.uart - RX: 6c 69 62 6e 66 63
libnfc.bus.uart - RX: bc 00
libnfc.chip.pn53x - Last command status: Success
pn53x_check_communication: Success
(中略)
libnfc.general - 0 device(s) found using PN532_UART driver
No NFC device found.
いやいや、待ってくれ!
成功しとうやん。
なぜなんだ・・・。
ログを追加してわかったのは、最後に
pn53x_check_communication: Successといってるけど、これはエラールートを通っているのだ。
Successにだまされてはいけない。
pn53x_check_communication()の中でDiagnoseコマンドを発行しているのだが、期待値が異なるようだ。
先頭の1byteが返ってこないのか何なのかわからんが、そうなっている。
ここでようやく、PN533のドキュメントを読む。
Diagnoseコマンドは、ペイロードの1byte目が診断コード、それ以降がデータ部になっている。
ここでは診断コード0x00で、データ部として「libnfc」を送信している。
その戻り値は、PN533では「診断コード+データ部」ということで、エコーバックみたいな形で戻ってくる。
RC-S956で同じことをすると、診断コードは戻ってこずにデータ部だけが返っている。
まあ、そういう仕様ってことだろうな。
期待値の先頭を削ることで、認識するようになった。
パソリと同じように、nfc-pollでMifare 1Kのカードを見てみる。
examples/.libs/lt-nfc-poll uses libnfc 1.5.1 (r1182M)
fail: pn53x_check_communication: Input/output error
Connected to NFC reader: PN532 (/dev/ttyUSB0) - PN533 v1.48 (0x07)
NFC device will poll during 30000 ms (20 pollings of 300 ms for 5 modulations)
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 04
UID (NFCID1): 3d c5 73 b0
SAK (SEL_RES): 08
エラーが出てるのは、PCのttyS0か何かだろう。
シリアルを自動認識させようとしてるからよくないな。
固定でもかまわないのだが、どうやって指定するのだろうか?
ソースを見ていった限り、pn532_uartでは指定できなさそうだ。
autoprobeを無効にして、環境変数からとってくるような仕組みにすればいいんだけど、まあいいや。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。