有多少总线取决于系统。
当前(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总线上的设备如何发生冲突,并可能采取措施避免地址冲突是一个好主意。我见过的Micron SPD规范讨论了位模式,您必须仔细阅读以了解将消耗哪些I2C地址。