CentOS 8.0でSMBusデバイスと通信しようとしています。 i2c-toolsとlibi2cをインストールしました。行為
find / -name "smbus.h" 2>/dev/null
結果を返しません。走る
i2cdump
動作しません。
i2cdump 4 0x12 sp
"Error: Block read failed, return code -6"
注文する
i2cget
「エラー:読み取り失敗」を返します。
次のブロックから読み取るためにacプログラムを直接コンパイルしようとしています。このガイドしかし、コンパイルしようとすると、次のように表示されます。
"致命的なエラー:i2c / smbus.h:そのファイルまたはディレクトリはありません。"
yum whatprovides */smbus.h
kernel-develに関するいくつかの結果が表示されますが、インストールは役に立ちません。 smbus.h ファイルが空です。 SMBUSと通信するには?
i2cdetect -l
プログラム
i2c-3 i2c DPDDC-C I2C adapter
i2c-1 i2c i915 gmbus dpc I2C adapter
i2c-4 smbus SMBus I801 adapter at f040 SMBus adapter
i2c-2 i2c i915 gmbus misc I2C adapter
i2c-0 i2c i915 gmbus dpb I2C adapter
通信会社の回答後に更新
i2cDetect -F 4出力:
Functionalities implemented by /dev/i2c-4:
I2C no
SMBus Quick Command yes
SMBus Send Byte yes
SMBus Receive Byte yes
SMBus Write Byte yes
SMBus Read Byte yes
SMBus Write Word yes
SMBus Read Word yes
SMBus Process Call no
SMBus Block Write yes
SMBus Block Read yes
SMBus Block Process Call no
SMBus PEC yes
I2C Block Write yes
I2C Block Read yes
i2c検出4出力:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- 08 -- -- 0b -- -- -- --
10: 10 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
編集2: 私が読み取ろうとしたデバイスが0x0bであることがわかりました。以下を使用してi2cダンプを正常に実行できます。
i2cdump 4 0x0b
ただし、これはエラーチェック機能を備えたsmbusデバイスなので、正しいコマンドは次のとおりです。
i2cdump 4 0x0b sp
ただし、このコマンドを使用するとこのエラーが発生します。
エラー:戻りコード-74が原因でブロックの読み取りに失敗しました。
答え1
UnixとLinux StackExchangeへようこそ!
このライブラリパッケージを使用する独自のプログラムをコンパイルするには、その開発パッケージもインストールする必要がlibi2c
ありますlibi2c-devel
。
i2cdump
とのi2cget
場合、便利な操作を行うには、バス番号/名前とバスアドレスを指定する必要があるようです。
smbusi2c-4
またはバス番号4。デフォルトでは、ツールはバス番号0(SMBusの代わりにi2c)を使用しようとする可能性があり、そのバスはすでにi915 GPUドライバの制御を受けている可能性があります。他の理由かもしれません。
すべてのi2c / SMBusアダプターがすべてのコマンドをサポートしているわけではありません。まず、i2cdetect -F 4
SMBusアダプタがサポートするコマンドを確認してください。出力は次のとおりです。
# i2cdetect -F 4
Functionalities implemented by /dev/i2c-4:
I2C no
SMBus Quick Command yes
SMBus Send Byte yes
SMBus Receive Byte yes
SMBus Write Byte yes
SMBus Read Byte yes
SMBus Write Word yes
SMBus Read Word yes
SMBus Process Call no
SMBus Block Write yes
SMBus Block Read yes
SMBus Block Process Call no
SMBus PEC yes
I2C Block Write yes
I2C Block Read yes
次のようにバス上でデバイス検出を実行することもできます。
# i2cdetect 4
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-4.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- UU -- UU -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 31 -- -- 34 35 -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- 53 -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
これは、バスの単純なコマンドに応答するように見えるバスアドレス値をリストします。有効なアドレスおよびバスコマンドのリストを使用して、バスの個々のデバイス検索を開始できます。