¿Hay solo un SMBus en las placas base de PC?

8

He conectado dos cables al reloj SMBus y a las líneas de datos de mi placa base (soldada manualmente a través de cables, porque no hay encabezado). Deseo conectar este bus a mi microcontrolador.

Los conecté a mi alcance y muestran los 3.3V correctos o por ahí (esto me parece que los cables se han conectado ya que hay un pullup).

Puedo leer y escribir en este SMBus a través de python-smbus en linux. El mismo SMBus incluso recoge los eeproms SPD en los módulos de memoria, por lo que ESTE smbus definitivamente funciona. Pero no puedo ver nada de esta actividad en mi alcance.

¿Hay solo un SMBus en las placas base de PC? ¿O hay varios, por lo que estoy conectando mis cables a los lugares equivocados?

Mi placa base es una ASRock X58 Extreme 6 (Southbridge es ICH10R)

cksa361
fuente
2
¿Qué chipset tienes? La respuesta depende de su South Bridge IC. SMBUS e I²C son tan fáciles de implementar que no es imposible tener varios. Desde el punto de vista del usuario, todas las placas base de PC son prácticamente iguales. Sin embargo, a un nivel bajo, las cosas son drásticamente diferentes. El conjunto de chips resume muchas de las complejidades incluso a nivel de hardware.
Alexios
Southbridge es ICH10R
cksa361

Respuestas:

4

Eche un vistazo a la hoja de datos de la familia ICH10 .

En la página 214, describe el SMBus. Solo hay una interfaz SMBus integrada para controlar / sondear dispositivos de placa base, pero hay un SMBus esclavo adicional , a través del cual un dispositivo maestro externo puede enviar eventos al ICH10. No hay forma de usar esto programáticamente desde el lado de la computadora. La Sección 5.20.7 en la página 222 describe cómo funciona esto y qué puede hacer. Parece que se usa para la administración de luces apagadas, perros guardianes externos, telemetría de sensores, etc.

Bien podría ser que hayas conectado a esa interfaz esclava, por lo que no estás viendo tráfico. Los pull-ups en esos pines probablemente estén ahí para proteger las entradas de alta impedancia.

Alexios
fuente
0

La cantidad de buses que hay depende del sistema.

Actualmente (2017) muchas placas base de socket de procesador único usan el controlador SMBus único en el puente sur. Este bus se puede conectar a AMBOS pines SMBus en las ranuras PCIe y se usa para cosas como leer la información de configuración DRAM de eeprom. Los procesadores que usan sockets con más pines, como los procesadores Intel Xeon E5, tienen múltiples buses I2C adicionales para comunicarse con los eeproms de memoria, así que no comparta un solo bus I2C entre las ranuras y los dispositivos de la placa base.

Si una tarjeta en una ranura tiene una dirección en conflicto, o pone señales falsas en el bus, el resultado puede ser que el sistema no arranque (no puede leer los parámetros DIMM para inicializar los controladores DRAM) o puede tener problemas operativos con la placa base I2C dispositivos como los monitores de temperatura / voltaje.

Desafortunadamente, el estándar SMBus actualmente no requiere dispositivos para evitar direcciones I2C muy comunes, como 0x50-0x57 (eeproms DIMM SPD), por lo que se han creado tarjetas que funcionan bien en servidores de alta gama con múltiples buses pero no funcionan en baja servidores finales con un bus compartido. Las direcciones que se usan en un diseño de bus compartido dependerán del diseño de la placa base y de las ranuras de memoria que se llenen. Es posible que tenga un sistema con 4 ranuras de memoria, 2 de las cuales están ocupadas, y una tarjeta controladora PCIe que utiliza SMBus y todo funciona bien. Cuando va a agregar 2 DIMM más, el sistema no se inicia y la razón es porque la dirección SMBus de la tarjeta controladora entra en conflicto con la dirección I2C de los nuevos DIMM. El problema es la tarjeta controladora, no la memoria.

Las soluciones incluyen: colocar cinta en los pines SMBus de la tarjeta controladora (consulte el artículo de Wikipedia en PCIe para obtener los pines correctos), o algunas placas base tienen un puente para controlar si el SMBus se enruta a las ranuras.

Una solución a largo plazo sería cambiar las especificaciones de SMBus para reflejar esta realidad de las computadoras SMBus / I2C compartidas, y hacer que las direcciones 0x50-0x57 y cualquier otra dirección comúnmente utilizada para sensores térmicos y similares, estén prohibidas para agregar en tarjetas. La especificación DIMM Serial Presence Detect (SPD) también podría aclararse para explicar cómo los dispositivos en los buses I2C compartidos pueden entrar en conflicto, y tal vez justificar que tomar medidas para evitar conflictos de direcciones sea una buena idea. La especificación Micron SPD que he visto habla sobre patrones de bits y debe leer cuidadosamente para darse cuenta de qué direcciones I2C se consumirán.

Jan Bottorff
fuente