我这里有一张适合 PCIe 插槽的卡,上面有一些 SMBus 可控芯片。该卡是自行布局的,可以在一些较旧的主板上正常工作。在较新的主板(ASUS PRIME Z370-A)中,它无法正常工作。
该卡未使用 PCIe 接口,仅使用 PCIe 插槽。PRSNT1 和 2 之间没有连接,也没有连接到差分数据线。PCIe 插槽仅用于供电(引脚 A9、A19、B8 (+3.3V) - A4、A12、A15、A18、B4、B7、B13、B26、B18(GND))和 SMBus 接口(B5 (SMCLK ), B6 (SMDAT))。
不工作我的意思是我不能通过 SMBus 与它交谈。我正在尝试使用 i2c-dev 内核模块。i2cdetect -l 的输出是:(缩短,我去掉了nvidia卡的i2c devs)
i2c-3 i2c i915 gmbus dpd I2C adapter
i2c-1 i2c i915 gmbus dpc I2C adapteradapter
i2c-4 i2c DPDDC-B I2C adapter
i2c-2 i2c i915 gmbus dpb I2C adapter
i2c-0 smbus SMBus I801 adapter at f040 SMBus adapter
在我看来,i2c-0 设备是正确的。当我在接口 0 上运行 i2cdetect 时,检测到了一些芯片,但没有检测到正确的芯片(它们有 addr 0x70 和 0x72)。总而言之,我试图通过 Intel 200 PCH 中的 SMBus 主控与我的 SMBus 从属芯片进行通信。
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 31 -- -- 34 35 -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- 53 -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
我也尝试了 1-4 号巴士,但结果相同。在另一块主板上,检测工作正常,如下所示。
此外,我用示波器测量了 PCIe 连接器的引脚 B5 和 B6。新主板上的这些引脚之一上没有时钟或数据信号。
我想我必须以某种方式配置它还尝试与 PCIe 插槽上的 SMBus 设备通信的内核模块。也许有人可以给我一个提示。
尽管没有出现关于内存区域重叠的警告,但我设置了内核选项 acpi_enforce_resources=lax 以确保没有 ACPI 内存绑定与 SMBus 控制器发生冲突。
一些输出
dmesg modprobe i2c-i801(内核模块的输出,抽象英特尔 SMBus 控制器)
[ 81.667581] i801_smbus 0000:00:1f.4: SPD Write Disable is set
[ 81.667639] i801_smbus 0000:00:1f.4: SMBus using PCI interrupt
i2cdetect 0(工作主板,i2c-0 上的 SMBus 控制器)
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- 72 -- -- -- -- --
unname -a
Linux XY 4.16.0-1-amd64 #1 SMP Debian 4.16.5-1