Conexión de fuentes de alimentación controladas, sensores y relés a las placas base del servidor. Sin arduino

Conexión de varios sensores, sensores, relés, expansores GPIO y otras instalaciones "Arduino" a través del bus I²C directamente a las placas base del servidor a través de la interfaz IPMI del controlador a bordo (BMC). Ejemplos prácticos de dispositivos I²C y trabajar con ellos desde la utilidad de línea de comandos ipmitool. SMBus, PMBus y gestión de fuentes de alimentación. Restricciones y problemas de seguridad poco documentados. Exponiendo la propiedad .

Después de instalar el servidor en un diseño improvisado, a veces desea conectarle algo más: por ejemplo, sensores de temperatura, presión, humedad, pantallas LCD o incluso controladores de motor PWM. Hay dispositivos externos con fallas que se deben restablecer de forma remota y completa mediante relés, no niveles, mientras que todo el servidor. ¿O tal vez el lector solo quería un peine GPIO con una guirnalda de LED? Si no se trata de una Raspberry Pi de placa única, sino de un servidor de tamaño completo, debe colgar el microcontrolador y meterse con él: escribir firmware, probar, establecer una unión con el host, etc. A veces esto es interesante en sí mismo, pero sucede al revés: sería más rápido escribir un script y ejecutarlo, finalmente, si solo funcionara.

Los conectores inusuales en el hierro siempre despertaron sentimientos encontrados de picazón técnico-técnica y fetichismo ventilatorio en el autor. Estos conectores entretenidos se analizan aquí.

Descargo de responsabilidad


Si está leyendo este artículo en algún lugar fuera del portal Geektimes, le recomiendo que busque un enlace auténtico en una o dos semanas . El hecho es que los comentarios más interesantes de los lectores aparecerán allí (es decir, aquí) en las inserciones, no estoy hablando de eliminar defectos y errores. Sucede que los residentes enojados de un club literalmente rompen en pedazos un artículo malo, al mismo tiempo que envían al autor a un abismo kármico. En otras palabras, si un enlace auténtico no se abre, entonces no debe leer más allá de este lugar.

El autor envía sus saludos al Lejano Oriente (directamente desde el cielo sobre el Atlántico Norte), y también se disculpa con los reporteros de marcas respetadas: no necesitan tanta publicidad que les invento nombres cómicos. Por lo tanto, el artículo es aplicable a los productos Super Miron, pero el autor tiene pocas dudas sobre la presencia de mecanismos similares en los productos de Kharlampiy-Pankrat, Ivan Bral Maryu, Iltan, Dolyan y otros: los conectores entretenidos se pueden encontrar con mayor frecuencia en fuentes de alimentación y cestas de discos. Al mismo tiempo, intentaremos exponer el elogiado Enlace Kobzar.

Estimados expertos en plataformas de servidores, IPMI, I²C, SMBus y PMBus, corrija si algo sale mal. Por lo general, el autor expresa gratitud a los lectores creativos con puntos kármicos, pero se disculpa con aquellos residentes del club para quienes la gratitud ya se ha escrito, simplemente el OVNI no ordena hacer esto dos veces. Te deseo una lectura agradable.

De lo que era


El autor no se avergüenza de comprar placas base de servidor usadas por un centavo y darles una segunda vida. Los viejos y ruidosos mecanismos del servidor (con fuentes de alimentación) se envían a la chatarra y se reemplazan con nuevos productos, aunque de clase de consumo, pero de alta calidad y silenciosos. Pero incluso con las series Super Miron X8 y X9 antiguas, todavía obtienes un NAS simplemente increíble para las pequeñas empresas que combinan funciones empresariales, una "máquina del tiempo" de archivos contra troyanos de ransomware y replicación de red ...

Burlándose del programa amarillo
FreeNAS Windows-, USB-. , 1 -, . Linux? - , . , - 1 — (, ). USB jail VirtualBox ...

En general, hace unos 20 años, para la granja colectiva como GPIO, los artesanos usaban un puerto paralelo para la impresora, pero intentan encontrarlo ahora. El mundo ha cambiado, en cuanto a mí, para mejor :)

Inspección visual


Ya tengo un producto X9SCM-F (Intel C204 Express) casi fósil pero bastante funcional, más su hermano menor X9SCL-F (C202) ha estado trabajando durante un par de años en una instalación cercana. Si gira el producto, como en la documentación, con el conector de alimentación ATX de 24 pines hacia el norte, los puertos SATA estarán en algún lugar del área de Khabarovsk. Al este, como Petropavlovsk-Kamchatsky, hay un par de conectores T-SGPIO 1 y 2 que llaman la atención con la combinación de las letras "GPIO". El autor activó esta combinación, pero los reflejos del geólogo-investigador de la electrónica fósil resultaron ser falsos. En realidad, la palabra clave aquí es SGPIO, es un bus de señalización dúplex por división de tiempo que usa tramas de longitud constante. El bus a su vez transmite tres bits para cada puerto SATA: en el HBA, el estado de la cesta, y en la cesta, el estado de los discos (activo, fallido, localizador). Esta es una tecnología anticuada; las cestas modernas usan I²C. No profundicé mucho, pero parece que 6 puertos SATA a bordo se dividieron en grupos de dos del norte y cuatro del sur, y cada grupo colgó su propio peine T-SGPIO. Engorroso, incómodo, pero para la agricultura colectivaTambién inútil. Adelante, hay un pequeño conector JWF1 en el área de Yuzhno-Sakhalinsk, pero solo tiene una potencia de 5V para el disco SATA DOM, que no tengo. En el Lejano Oriente no hay nada más que hacer. A lo largo de las fronteras del sur se extiende una serie completa de conectores USB de 9 pines y un segundo puerto RS232, todo está claro con ellos. En el noroeste de COM2, se descubrieron un par de puentes JI2C1 / JI2C2, lo que permite el acceso a dispositivos PCIe. Este kit de herramientas ha sido un misterio para mí hasta ahora, pero estoy bastante seguro de que, de hecho, JI2C1 / JI2C2 son las salidas en vivo de SCL y SDA, que simplemente están separadas de la fuente de alimentación de 3,3 V y la tierra, que ya están en PCIe. Déjalo por ahora. El conector JTPM es dolorosamente sofisticado, esto es una emergencia. Y solo el LED UID se puede extraer del conector del panel frontal JF1 conectándolo al opto-relé. Por cierto, esto es m. incluso conveniente: una resistencia de terminación ya está integrada en el circuito,Encendió el LED UID - abrió (cerró) el relé. Para reinicio remotoquizás un dispositivo externo sea ​​suficiente. Lo principal es que el operador, después de ingresar a la interfaz web de BMC un año después, no enciende el LED UID de esa manera, al mismo tiempo que reinicia el dispositivo externo . Bien, estamos regresando al servidor extremo norte, está allí, cerca de la potencia ATX, y se encuentra el conector JPI2C.

Debo decir que la documentación sobre JPI2C es bastante optimista. Se deduce que esta es la salida del bus I²C para monitorear el estado de la fuente de alimentación "nativa". Físicamente, el JPI2C es un conector SL tipo Molex de 5 pines con un paso de 0.1 "(2.54 mm) y una llave tonta con polaridad invertida, presumiblemente el código de catálogo 70543-0004. La parte de respuesta (en la imagen en la parte inferior izquierda) es Molex 70066-0179 para engarzar Engarzadora (aka BL-05F) Sospecho que en todas las placas base Super Miron, el bus I²C se usa para controlar el estado de la fuente de alimentación del servidor y se deriva del conector Molex SL de 5 pines ( BL-05M ). Mirando hacia el futuro, diré que algunos usuarios han tenido éxito en la ingeniería inversa y han encontrado una forma de eliminar todo tipo de utilidades, como la temperatura y los voltios con amperios de sus fuentes de alimentación nativas de Super Miron, continúe leyendo.

Fuente de alimentación Conector I²C

Fuente de alimentación El conector I²C, ubicado en JPI2C, monitorea el estado de la fuente de alimentación, el ventilador y la temperatura del sistema. Consulte la tabla de la derecha para ver las definiciones de los pines.

El conector JPI2C vacío se burló abiertamente con los pines de bus I²C estándar: SCL, SDA, GND y VCC. En el medio está la alarma de falla de la fuente de alimentación. Mirando hacia el futuro, me atrevo a sugerir que este Power Fail es la única forma de activar una alarma para un evento externo sin usar un microcontrolador externo. Luego encontramos el artículo ID de preguntas frecuentes 9492 con fecha del 30 de marzo de 2010, que claramente insinuaba la posibilidad de sondear el bus I²C directamente desde la línea de comando. Dado que BMC está claramente involucrado en el monitoreo del estado de la fuente de alimentación, y el equipo es ipmitoolclaramente capaz de "hablar" con el bus I²C con fuentes de alimentación, nada debería interferir con la conexión de algo más a JPI2C.

¿Qué conector: BL o BLS?
MP3, 4- , CD- . , BLS-4, CD- , . , , BL-04F, . MP3 , ...

¿Por qué soy yo? Además, el conector JPI2C en las placas Super Miron se ve exactamente como el conector de audio en una unidad de CD antigua, solo tiene 5 pines en lugar de 4. JPI2C incluirá un BLS-5 simple de una fila , pero es mejor tener un conector con una clave de polaridad física tipo BL-05F , cuando trabaje con una placa base ya instalada en la carcasa, será demasiado fácil cometer un error. Ahorra tu tiempo.

Lazo universal
«» 40- , . , , .. . BLS-1 M-F, M-M F-F. aliexpress: «dupont cable».

Trabajando con dispositivos I²C desde la línea de comando


Conecté un sensor BMP180, una vez comprado en aliexpress, a JPI2C. Al principio, nada salió de eso. El direccionamiento en su conjunto también estaba perplejo, y el argumento de buselegir un autobús no está claro de cuántos. Pero luego hice un script para iterar (escanear) los buses y comparar el resultado de su trabajo antes de conectar el BMP180 y después. Con el X9SCM-F, el sensor se detectó inmediatamente en el bus n. ° 3 en las direcciones 0xeey 0xef(vea el comentario a continuación). Será necesario reorganizar el JI2C1 / JI2C2 a la posición ENABLE y ver si de repente las tarjetas PCIe responden ...

ipmiscan.sh
, - progress bar , (0, 1, 2 3). bash 3.0+.
#!/bin/bash

for bus in 0 1 2 3; do
        echo Bus $bus
        for i in {16..238..2}; do
                printf -v args "i2c bus=%d 0x%02x 0x01" $bus $i
                printf " 0x%02x" $i
                ipmitool $args 2>/dev/null && echo "(bus $bus)"
        done
        echo
done

El script enumera solo las direcciones pares y no toca las reservadas . En I²C, el bit menos significativo es un signo de lectura-escritura: cada dispositivo parece ocupar dos direcciones (lectura impar, escritura par). Artículo ID pregunta frecuente 9492 me confundió, porque las encuestas solo par. Pero en el caso de ipmitoolleer o escribir, no está determinado por la dirección, sino por el contexto del comando, ¿verdad? La importante especificación IPMI 2.0 pone todo en su lugar: el bit menos significativo de la dirección en el comando Master Read-Write ( 0x06 0x52) generalmente está reservado y debe restablecerse (igual a cero).

El sensor BMP180, conectado al JPI2C en el X9SCM-F, respondió a (bus = 3) en la dirección 0xee(y 0xefaunque esto es lo mismo). Es decir la dirección lógica del dispositivo resultó ser0x77, como debería estar en la hoja de datos (Bosch tomó la dirección superior de 8 bits). Mi error inicial fue buscar el BMP180 en una dirección IPMI sin procesar 0x77, esto no es cierto, para IPMI solo necesita multiplicar la dirección lógica I²C por dos (desplazar un bit a la izquierda). Cuando se trabaja con I²C, este es el error más común.

El autobús I²C que cuelga así no es interesante en el aire, mucho menos en un vacío esférico. Una plataforma conocida a pedido del "sensor i2c" ofrecerá a un lector respetado una amplia gama de sensores ya vinculados a minitarjetas. Por lo general, todo lo que queda es soldar el peine de contacto, para esto hay suficiente deseo y un soldador de 30W con soldadura y fundente, no se requieren habilidades. Para probar la teoría, decidí medir la temperatura con el sensor BMP180, pero resultó ser un poco más complicado de lo que pensaba: el sensor es un ejemplo de un dispositivo con estado complejo, y sería más correcto decir "extraer lecturas de temperatura y presión de un medidor de precisión teniendo en cuenta los coeficientes de calibración". Pero primero, todavía rendimos homenaje al vendedor respetado.

Fuentes de alimentación de telemetría
, .. , , : , , , , . IPMI, . DIY .

Andrew Grekhov , , . , , . , ipmitool , -H, -U -P, raw 0x06 0x52 0x07 i2c bus=3, «» , . Master Read-Write IPMI.

Andrew Grekhov, ( ) . , PMBus, . . PMBus SMBus , SMBus, , I²C. , PMBus. PMBus , : ? , .

, , (), , , PMBus rev 1.1. , www.pmbus.org, PMBus Specification Part II Rev. 1.1. , . 26 APPENDIX I. Command Summary. , , - 0x78 (STATUS_BYTE), 0x88 (READ_VIN), 0x89 (READ_IIN), 0x95 (READ_FREQUENCY) : , . 26, (Read Byte Read Word) . , byte word?

: I²C 0x30 (COEFFICIENTS), SMBus? , - , .. , SMBus 0x30 2, (0x88 READ_VIN) , . 1 + 5 + 1 m, B R, . — , — PEC ( ). .. , SMBus I²C, , :

ipmitool i2c bus=3 0x70 0x07 0x30 0x02 0x88 0x01

0x30 0x02 0x88 0x01 0x70, №3, 7 ( , , PEC). ( 0x78, — ), 7 6 ( PEC). - , , production, :) , , .

Medición de temperatura con BMP180
BMP180 . , IPMI- 0xee . BMP180 stateful-, .. ( .. ). BMP180 BMP085, — BMP280, .
, , . 0x2e 0xf4:

ipmitool i2c bus=3 0xee 0x00 0xf4 0x2e

0x00 , 0xee, . 4.5 16- UT (« ») 0xf6 :

ipmitool i2c bus=3 0xee 0x02 0xf6

0xf6 0xee (.. 0x77, BMP180), . IPMI Master Write-Read stateful-.

UT 0x6a 0x48, 27208 (.. - 27°C «» , BMP180, , ). UT 0x8000, , .

: AC5, AC6, MC MD 0xb2, 0xb4, 0xbc 0xbe, , (, !).

X1=(UTAC6)·AC5/215


X2=MC·211/(X1+MD)


B5=X1+X2


T=(B5+8)/24/10



10, .. . , , 15 11 . , , 0xf4. ? , :)

41j .

GPIO
, , , . BMP180 I²C 8- GPIO PCF8574AT.
, PCF8574A ( PCF8574) 0x38 ( PCF8574 0x20), . , , - 8 , . 8 , 64 GPIO. , . I²C .

I²C Switch
, BMP180, 0x77 (.. 0xee) ? , (), TCA9548A - , . () 8 , . , GPIO, . : - I²C SDA SCL, . , , 8 BMP180, c A0-A2 0x70 (. 0xe0 ipmitool). A0=A1=A2=1 0x77, , , BMP180. , TCA9548A, I²C 56 -. , . , , .

Limitaciones


ipmitool(1)Realicé todos los experimentos usando el comando v1.8.15 trabajando a través de la interfaz de host (kernel) de FreeBSD 10. Si usa este comando en scripts, tendrá que analizar su salida, además, stderr, no stdout. Evito específicamente los analizadores en este artículo. Estaría agradecido si alguno de los lectores compartiera bibliotecas probadas para trabajar con IPMI a través de la interfaz de host en lenguajes de script populares (perl, Python), al menos en modo de comando sin procesar.

Aunqueipmitool(1)y puede funcionar a través de una red (623 / tcp), cuando el host en el JPI2C está apagado, no hay energía en espera, el bus está desenergizado. No intenté alimentar los sensores por separado e interrogarlos a través de la interfaz de red IPMI con el host apagado. Pero si necesita sensores autónomos conectados a la red, es mejor usar un dispositivo de placa única, por ejemplo, el mismo Raspberry Prog (lo siento, llamé a Raspberry Pi en mi artículo sobre cómo proteger las tarjetas microSD del desgaste prematuro al cambiar al sistema de archivos de solo lectura).

Como ya se mencionó, el método descrito aquí sin un microcontrolador externo prácticamente elimina la reacción a las interrupciones por eventos externos, a excepción de la señal "falla de la fuente de alimentación". Teóricamente, una señal de falla de energía puede generar un evento SNMP, pero no lo he probado. Y aquí nuevamente quiero decir: si se necesitan interrupciones de los sensores, entonces necesitamos un microcontrolador o, en el peor de los casos, una placa única dedicada. César es César.

Manejo de conflictos I²C


Si no hay una fuente de alimentación "nativa" en el bus I²C, gracias a Dios hay menos problemas. Pero si aparece una fuente de alimentación "nativa" con una interfaz I²C en el sistema, en teoría no está prohibido conectar otros dispositivos en paralelo, después de haber montado el adaptador correspondiente. ¿Qué pasará en este caso? Si todos los dispositivos están ubicados en sus direcciones, no debería ocurrir nada malo hasta que el host decida controlar estrictamente la fuente de alimentación. Si no sabe lo que está haciendo, limítese a leer. A juzgar por la ID de pregunta frecuente 9492 , las fuentes de alimentación (simple, doble, triple) se encuentran en direcciones lógicas 0x38, 0x39, 0x3a, ...(son direcciones IPMI divididas por la mitad).

Tengo una teoría con respecto a IPMI y su papel en el acceso a I²C: si todos los comandos de escritura solo seleccionan un registro para la lectura posterior, entonces cada interacción con el dispositivo encaja en un comando de escritura-lectura maestro de IPMI. Desde la muy pesada especificación de IPMI 2.0, le recomiendo que lea el párrafo 22.11, que describe este comando. Según tengo entendido, una operación en el bus I²C es leer o escribir una secuencia de bytes en una sola dirección. Pero la especificación IPMI con el comando Master Write-Read introduce algo más: un par de operaciones de escritura-lectura, conveniente para los sensores, se asemeja a una transacción completaAdemás, IPMI estipula la longitud máxima del búfer (aproximadamente 30 bytes). También supongo que (a) el BMC es siempre el dispositivo principal en el bus I²C y (b) el BMC tiene un mecanismo de bloqueo incorporado, es decir él no intentará tomar el autobús de sí mismo en medio de la transacción.

Asumiendo que el comando IPMI Master Write-Read (de dos operaciones) es de hecho una transacción indivisible, el BMC hace más que solo mostrar I²C: es un complemento transaccionalsobre I²C, además con un host o interfaz de red. En otras palabras, resulta ser algo así como una pila de protocolos primitivos de 4 niveles para trabajar con sensores I²C a través de la interfaz IPMI, que me atreví a dibujar. Si a un lector respetado no le gustó la imagen, imagine que soy un artista y veo el mundo así, tenga en cuenta esencialmente, por favor :)

Por cierto, el bus SMBus, además de contactos adicionales, difiere de I²C precisamente en modo por lotes, y la operación de escritura / lectura se define en él Bloque Pero esto ya es parte del protocolo del bus SMBus en sí, IPMI en este caso desempeñaría el papel de un simple contenedor operativo, en lugar de un complemento transaccional. Sin embargo, las longitudes máximas de bloque en las especificaciones IPMI y SMBus son tan similares que supongo una conexión directa entre ellas, sin siquiera profundizar en el tema.

Seguridad


Un BMC conectado a una red informática es un servidor y es potencialmente vulnerable. Es por eso que, por ejemplo, es necesario fortalecer las medidas de seguridad en la consola del sistema operativo "local", que a través del KVM virtual está de hecho expuesto a la red. El firmware antiguo de los controladores BMC Super Miron contiene una vulnerabilidad desagradable , por lo que la operación debería comenzar con la actualización del firmware BMC (además del BIOS).

Control de clima con retroalimentación


Algunos fabricantes traen la idea colgante, por así decirlo, en el aire de enfriamiento con retroalimentación directamente al culto, bastante en polvo por el marketing con un velo de secreto:

Culto de Kobzar
, , :
In some ways, Corsair Link is one of our best kept secrets. It had a very rocky start, but continued and continuing development has turned it into an extremely useful combination of hardware and software. It allows you to connect several products within our ecosystem to a software-based control panel, but there's so much more to it than that.

, , , , , . , .

, Corsair Link Commander Mini USB HID, SMBus, «» PMBus, . SMBus, 0x98 (PMBUS_REVISION). , . PMBus . , , ( ) .

, «» community- , . , , .. . , , .

Mientras tanto, la comunidad no permanece:

Recetas populares
Kevin Horton FreeNAS Perl. . , -, , X10 . , SMART. , . .

X9 (socket 1155) : X9SCL/X9SCM «» «» BIOS (). , IPMI ...


UPD:

Alternativas a IPMI I²C - Convertidores de interfaz


, I²C ? USB- I²C/SMBus, USB HID.

x893 -: CP2112 - Silicon Labs MCP2221A - Microchip. , «A» 460 115. , CP2112EK $40, ADM00559 MCP2221 . , / , .

, , USB , USB HID . : , HID, , CDC, .. COM-. USB HID . , , Python. USB HID, Microchip Linux, . , :)



  • I²C, IPMI.
  • « » I²C- (, , GPIO), .
  • , I²C- , IPMI.
  • BMC-, IPMI, I²C Master Write-Read, .
  • , - .
  • PMBus, I²C/SMBus.

Intelligent Platform Management Interface Specification v2.0
www.intel.com/content/dam/www/public/us/en/documents/product-briefs/second-gen-interface-spec-v2.pdf

IPMItool
sourceforge.net/projects/ipmitool

I²C Bus ( telos)
www.i2c-bus.org

System Management Bus (SMBus) description
www.smbus.org/specs/smbdef.htm

PMBus, Power Management Bus
pmbus.org

FreeNAS, Enterprise-Grade Features, Open Source, BSD Licensed
www.freenas.org

SGPIO, Serial General Purpose Input/Output
www.wikipedia.org/wiki/SGPIO

SuperMicro FAQ ID 9242, Monitoring of PSU using IPMITool
www.supermicro.com/support/faqs/faq.cfm?faq=9492

LM25056, System Power Measurement IC with PMBus
www.ti.com/product/LM25056

PCF8574A, Remote 8-Bit I/O Expander for I2C-Bus
www.ti.com/product/PCF8574A

TCA9548A, Low-Voltage 8-Channel I2C Switch With Reset
www.ti.com/product/TCA9548A

BMP180, Barometric Pressure Sensor
www.bosch-sensortec.com/bst/products/all_products/bmp180

, BMP180 Barometric Pressure Sensor
41j.com/blog/2015/01/bmp180-barometric-pressure-sensor

, . SuperMicro ( X8)
3nity.ru/viewtopic.php?p=135736#p135736

FreeNAS, Script to control fan speed in response to hard drive temperatures
forums.freenas.org/index.php?threads/script-to-control-fan-speed-in-response-to-hard-drive-temperatures.41294

Computer Cheese, IPMI Messaging Support commands,
computercheese.blogspot.com/2013/05/ipmi-messaging-support-commands.html

Corsair Link
www.corsair.com/en/support/faqs/corsair-link

EEVblog Electronics Community Forum
www.eevblog.com/forum/chat/corsair-link

Source: https://habr.com/ru/post/es400729/


All Articles