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

telcoM 答复后更新

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


对于i2cdumpi2cget,看起来您必须指定总线编号/名称以及总线上的地址,以使它们执行任何有用的操作。

在您的情况下,smbusi2c-4或总线号 4。默认情况下,工具可能会尝试使用总线号 0,即 i2c 而不是 SMBus - 并且该总线可能已经在 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: -- -- -- -- -- -- -- --       

这将列出似乎响应总线上的简单命令的总线地址值。有了有效地址和总线命令的列表,您就可以开始探测总线上的各个设备。

相关内容