PC主板上只有一个SMBus吗?

电器工程 smbus
2022-01-26 14:52:22

我已经将两条线连接到主板的 SMBus 时钟和数据线(通过电线手动焊接,因为没有接头)。我希望将此总线连接到我的微控制器。

我将它们连接到我的示波器上,它们显示正确的 3.3V 或附近(在我看来,由于有上拉,电线已经连接)。

我可以通过 linux 上的 python-smbus 读写这个 SMBus。相同的 SMBus 甚至可以拾取内存模块上的 SPD eeprom,所以这个 smbus 绝对有效。但我在我的范围内看不到任何此类活动。

PC主板上只有一个SMBus吗?还是有多个,所以我将电线连接到错误的地方?

我的主板是华擎 X58 Extreme 6(南桥是 ICH10R)

2个回答

查看ICH10 系列的数据表

在第 214 页,它描述了 SMBus。板载只有一个 SMBus 接口用于控制/轮询主板设备,但还有一个额外的SMBus,外部主设备可以通过它向 ICH10 发送事件。没有办法从计算机端以编程方式使用它。第 222 页的第 5.20.7 节描述了它是如何工作的以及您可以做什么。它看起来像是用于熄灯管理、外部看门狗、传感器遥测等。

很可能您已连接到该从属接口,这就是您看不到流量的原因。这些引脚上的上拉电阻可能是为了保护高阻抗输入。

有多少总线取决于系统。

目前(2017 年)许多单处理器插槽主板在南桥中使用单个 SMBus 控制器。该总线可以连接到 PCIe 插槽上的两个 SMBus 引脚,用于从 eeprom 读取 DRAM 配置信息等。使用带有更多引脚的插槽的处理器(例如 Intel Xeon E5 处理器)具有多个额外的 I2C 总线来与内存 eeprom 通信,因此不要在插槽和主板设备之间共享单个 I2C 总线。

如果插槽中的卡有冲突的地址,或者在总线上放置虚假信号,结果是系统可能无法启动(它无法读取 DIMM 参数来初始化 DRAM 控制器)或主板 I2C 可能存在操作问题温度/电压监视器等设备。

不幸的是,SMBus 标准目前不要求设备避免使用非常常见的 I2C 地址,例如 0x50-0x57 (DIMM SPD eeproms),因此卡已经在具有多个总线的高端服务器上正常工作,但不能在较低的具有共享总线的终端服务器。共享总线设计中使用哪些地址取决于主板设计和填充的内存插槽。您的系统可能有 4 个内存插槽,其中 2 个已填充,还有一个使用 SMBus 的 PCIe 控制器卡,一切正常。当你再添加2个DIMM时,系统无法启动,原因是控制器卡SMBus地址与新DIMM的I2C地址冲突。问题是控制器卡,而不是内存。

解决方法包括:在控制器卡的 SMBus 引脚上贴胶带(有关正确的引脚,请参阅关于 PCIe 的 Wikipedia 文章),或者某些主板有一个跳线来控制 SMBus 是否路由到插槽。

一个长期的解决方案是更改 SMBus 规范以反映共享 SMBus/I2C 计算机的这一现实,并将地址 0x50-0x57 和任何其他常用地址用于热传感器等,禁止添加到卡上。还可以澄清 DIMM 串行存在检测 (SPD) 规范,以阐明共享 I2C 总线上的设备如何发生冲突,并可能说明采取措施避免地址冲突是一个好主意。我看到的美光 SPD 规范谈到了位模式,您必须仔细阅读才能了解将使用哪些 I2C 地址。