有多少总线取决于系统。
目前(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 地址。