USB-I2Cインターフェースを使用しているSRF02センサーとラップトップを通信させようとしています。私のラップトップはDebianJessieを実行しています。
問題:
実行するとSudo i2cdetect -y 0
デバイスがまったく表示されません。これはポート1でも同じですが、それを超えると、多くのデバイスがランダムな場所に表示されます(たとえば、ポート4はほぼ完全なテーブルを示しています)。 3未満のポートでは、デバイスのデフォルトの場所であるEX70が使用されません。
起動時にi2c-devを自動ロードしようとしましたが、問題は解決しません。モジュールのドキュメントには、FTDI VCPドライバーが必要であると記載されていますが、これはLinuxカーネルに含まれている必要があります。
Windows 8を実行しているコンピューターからまったく同じデバイスとセットアップを使用してデータを取得できたため、これはソフトウェアの問題であると確信しています。
これについてはすでに多くの投稿がありますが、それらはすべて特にRaspberry Piベースであり、USBの代わりにRaspbianピンとGPIOピンを使用しています。
編集:これは、デバイスを接続した直後のdmesg出力へのリンクです。ログが大きすぎてここに投稿できません:P http://pasted.co/38dc9292
前もって感謝します、
マックス
dmesg
からの関連行は次のとおりです。
[ 518.172735] usb 1-3: new full-speed USB device number 4 using xhci_hcd
[ 518.306677] usb 1-3: New USB device found, idVendor=0403, idProduct=6001
[ 518.306686] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 518.306689] usb 1-3: Product: FT232R USB UART
[ 518.306692] usb 1-3: Manufacturer: FTDI
[ 518.306695] usb 1-3: SerialNumber: AK04P01W
[ 518.309382] ftdi_sio 1-3:1.0: FTDI USB Serial Device converter detected
[ 518.309442] usb 1-3: Detected FT232RL
[ 518.309445] usb 1-3: Number of endpoints 2
[ 518.309448] usb 1-3: Endpoint 1 MaxPacketSize 64
[ 518.309450] usb 1-3: Endpoint 2 MaxPacketSize 64
[ 518.309453] usb 1-3: Setting MaxPacketSize 64
[ 518.309771] usb 1-3: FTDI USB Serial Device converter now attached to ttyUSB0
これらは関連する行です。タイムスタンプによって、デバイスをプラグインしたときに発生することへの反応として一緒に属し、ブートメッセージの後で十分に長く発生するため、接続がありません。
ご覧のとおり、新しいUSBデバイスが検出され、デバイスの詳細が表示されます。これに応じて、モジュールftdi_sio
が読み込まれ、特別なデバイスファイル/dev/ttyUSB0
が提供されます。カーネルドライバがロードされていない場合は、ベンダーと製品の組み合わせ(0403:6001
、grep
にも表示)を探すことができます(たとえば、google、またはlsusb
カーネルソース)。 )、次にこのデバイスのカーネルドライバを見つけてみてください。
他の回答で言及されているbcm2708
ドライバーは、まったく関係ありません。これは、I2Cバスのドライバーです。 Raspberry Pi用であり、ラップトップ用ではありません。
ただし、シリアルインターフェイスを提供するだけで、カーネルI2Cインフラストラクチャに接続されていない動作中のドライバがすでにあります。したがって、lmsensors
、i2detect
などはすべて機能しません(追加のドライバーを作成または検索しない限り)。
コメントで言及したUSB-I2Cコンバーターの website は、シリアルリンクを介して使用するプロトコルを説明しています。バイトのシーケンスを送信し、オプションでバイトのシーケンスを応答として受信します。コマンドシーケンスは次のようになります
<command-byte> <address> <register (0-2 bytes)> <data byte count (0-1 bytes)> <write data>
また、 SRF 02 のWebページでは、センサーチップのレジスタがどのように見えるかを説明しています。読み取り可能な6つのレジスタ、書き込み可能な1つのコマンドレジスタ。
したがって、たとえば、バージョンを読み取るには、レジスタ01
から00
バイトを読み取る必要があります。デフォルトのチップアドレスは、E0
であり、LSBはR/Wビットです。アドレスとしてE1
を使用し、USB-I2Cアダプターに必要なコマンドは55
です。したがって、シリアルで送信する完全なシーケンスは55 E1 00 01
であり、1バイトを回答として読み取ります。
コマンドラインからそれを行うことができます:
$ printf '\x55\xE1\x00\x01' > /dev/ttyUSB0
$ hexdump -n 1 -e '"%02x \n"' < /dev/ttyUSB0
または、お好みの言語で/dev/ttyUSB0
を開き、その言語が提供するコマンドを使用してバイトを読み書きすることもできます。
2つのi2c
カーネルモジュールがあります。
i2c-bcm2708
そして
i2c-dev
両方を/etc/modules
に追加し、再起動します。