SMBus通信が機能しません。 smbus.hがありません

SMBus通信が機能しません。 smbus.hがありません

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 4SMBusアダプタがサポートするコマンドを確認してください。出力は次のとおりです。

# 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: -- -- -- -- -- -- -- --       

これは、バスの単純なコマンドに応答するように見えるバスアドレス値をリストします。有効なアドレスおよびバスコマンドのリストを使用して、バスの個々のデバイス検索を開始できます。

関連情報