SyntaxHighlighter

2015年7月1日水曜日

近藤科学のFTDI FT232RL搭載USBアダプターをRaspberry Piで使うのに苦労した話。

近藤科学のFTDI搭載USBアダプターをRaspberry Piで使うのに苦労した話。

おそらく、他のFTDIチップ搭載のUSBアダプタ、変換器でも利用できるだろう。

ただし、内容は保証しない。USBアダプターやOS、ハードウェアが恒久的に破損する危険性を
理解した上で自己責任で行うこと。

・はじめに

 近藤科学のICSサーボをPCで制御するにはどうするか。
Dual USBアダプターHSという、アダプターが近藤科学から出ているので使う。

終わり。

しかし、それはWindowsの話である。
Linuxから使うにはどうするか。

1.シリアルポートおよびUSB-シリアルアダプタを加工する。
 
 近藤科学のページ
 シリアルサーボ制御方法(1) 回路編 (近藤科学)
 http://kondo-robot.com/faq/serial-servo-method-tech
 にて、マイコンと接続する場合の解説が乗っている。
 同様に、FT232RLなどを使って接続すれば良い。

 まっとうで手早い方法だ。

2. Dual USBアダプターHS を無理やり使う。

 Dual USBアダプターHSは、そもそもが中身はFTDI社のFT232である。
 ただ、発売元も製品も違うことになるので、独自のベンダーIDとプロダクトIDが割り当てられ
 FTDI社のチップではない独自のチップとしてPCからは認識される。

 Windowsでは、そのベンダーIDとプロダクトIDの違うドライバを入れれば済む話。
 Linuxではどうするかというと、FTDIのドライバモジュールに
 ベンダーIDとプロダクトIDを登録すれば良い。
 というのは、このページに書いてある。

 シリアルUSBアダプターをLinuxで使うには (近藤科学)
 http://kondo-robot.com/faq/usb-adapter-for-linux

 上記のページに従い、いくつかのコマンドを打てば、
 通常のシリアルポートとして使えるはずである。

それでうまく行っていたらこのページは生まれない。

何が起きたかを説明する。

・前提として

Raspberry Pi + Raspbianを用いた場合、
内臓のシリアルポートは /dev/ttyAMAn
USB経由のシリアルポートは /dev/ttyUSBn として認識される。

そのため、USB経由のシリアルポートを探すには
ls /dev/ttyUSB*
と打てば良い。

無事見つかった後、単純に動作確認するなら、
echo A > /dev/ttyUSB0
とか実行すれば、出力される。

そして、事前に、FTDI社公式のICを積んだUSB-シリアル変換アダプタ

超小型USBシリアル変換モジュール (秋月電子通商) @ FT234X
http://akizukidenshi.com/catalog/g/gM-08461/

を用いて、USBシリアルポートが認識&出力できることは確認していた。

・認識されない

同様に、
まず、近藤科学のページの通り
sudo modprobe ftdi_sio vendor=0x165C product=0007
を発行した。

Dual USBアダプターHSをさし込むが、シリアル・ポートして認識されない。

USB接続された機器を調べる
lsusb
というコマンドを使うと、社名不明で認識されていることがわかった。

しかし、ベンダーIDこそ0x165Cであるが、プロダクトIDが0008であった。
(これは、先ほどのページの最後の方に記載されている。)

「ああ、これが原因か」と思い、
sudo modprobe ftdi_sio vendor=0x165C product=0008
を発行するも、やはり認識されない。

近藤科学のページの通り、dmesgコマンドを実行すると、
どうやら、USB機器としては認識されているが、FTDIの機器として認識されていないことがわかった。

さらにログをたどると、なにやら変なメッセージが。
FTDIのドライバが
「vendorなんてオプションはない、拒否する」(意訳)
「productなんてオプションはない、拒否する」(意訳)
とエラーを吐いているのだ。

タイミング的に、sudo modprobe ftdi_sio vendor=0x165C product=0008を
打ち込んだ結果らしい。

どうも、ftdi_sio vendor=0x165C product=0008という形式のコマンドは
そもそもサポートされていないようだ。

「近藤科学のページに嘘が書かれていたのか?」
と思い検索してみると、どうもこのページが書かれたのは2009年の話。
現在は2015年。

これは怪しいぞ、と思い検索してみると、案の定英語のフォーラムで話があった。

modprobe ftdi_sio errors / Kernel & Hardware / Arch Linux Forums

[SOLVED] ttyUSB not showing up, modprobe unknown parameter 'vendor' & 'product'

どうやら、FTDIのこのコマンドは、デバッグ用か何かだったらしく、
すでに使用できなくなっているとのこと。

対処法は
echo vvvv pppp > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
のように、/sys/bus/usb-serial/drivers/ftdi_sio/new_idに
ベンダーIDとプロダクトIDを書き込んでやることらしい。

もちろん、suでなければならない。

今回の近藤科学のUSBアダプターをRaspberry Piに接続するには以下のようにする。

$ sudo su
# modprobe ftdi-sio 
# echo 165C 0008 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
# exit

これで再度dmesgすると、FTDIドライバの認識メッセージが表示されるだろう。
ls /etc/ttyUSB* をすればどの番号に接続されたかわかるはずだ。

近藤科学のすべてのUSBアダプターを使用するには、以下のようにすればよいだろう。

$ sudo su
# modprobe ftdi-sio 
# echo 165C 0001 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
# echo 165C 0002 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
# echo 165C 0006 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
# echo 165C 0007 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
# echo 165C 0008 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
# exit

ちなみに、このままだと再起動等すると接続できなくなるので
/etc/rc.localなどに追記しておくと良い。

以上、参考になれば幸いである。

1 件のコメント:

  1. 同様の現象で困っていたので
    たいへん助かりました!
    ありがとうございました。

    返信削除