我正在尝试与 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
。
对于i2cdump
和i2cget
,看起来您必须指定总线编号/名称以及总线上的地址,以使它们执行任何有用的操作。
在您的情况下,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: -- -- -- -- -- -- -- --
这将列出似乎响应总线上的简单命令的总线地址值。有了有效地址和总线命令的列表,您就可以开始探测总线上的各个设备。