web-dev-qa-db-ja.com

DebianでI2Cを有効にする-i2cdetectはデバイスを表示しません

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

前もって感謝します、

マックス

1
Slidon

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:6001grepにも表示)を探すことができます(たとえば、google、またはlsusbカーネルソース)。 )、次にこのデバイスのカーネルドライバを見つけてみてください。

他の回答で言及されているbcm2708ドライバーは、まったく関係ありません。これは、I2Cバスのドライバーです。 Raspberry Pi用であり、ラップトップ用ではありません。

ただし、シリアルインターフェイスを提供するだけで、カーネルI2Cインフラストラクチャに接続されていない動作中のドライバがすでにあります。したがって、lmsensorsi2detectなどはすべて機能しません(追加のドライバーを作成または検索しない限り)。

コメントで言及した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
dirkt

2つのi2cカーネルモジュールがあります。

i2c-bcm2708 

そして

i2c-dev

両方を/etc/modulesに追加し、再起動します。

1
Roberto Paz