Conectando fontes de alimentação, sensores e relés controlados às placas-mãe do servidor. Sem arduino

Conectando vários sensores, sensores, relés, expansores GPIO e outras instalações “Arduino” através do barramento I²C diretamente às placas-mãe dos servidores através da interface IPMI do controlador on-board (BMC). Exemplos práticos de dispositivos I²C e trabalhando com eles no utilitário de linha de comando ipmitool. Gerenciamento de SMBus, PMBus e fonte de alimentação. Restrições não muito documentadas e problemas de segurança. Expondo a propriedade .

Depois de instalar o servidor em um design improvisado, às vezes você deseja conectar outra coisa a ele: por exemplo, temperatura, pressão, sensores de umidade, telas de LCD ou mesmo drivers de motor PWM. Existem dispositivos externos defeituosos que precisam ser redefinidos remotamente e com hardware, usando relés, não níveis, enquanto todo o servidor. Ou talvez o leitor só quisesse um pente GPIO com uma guirlanda de LEDs? Se esse não é um Raspberry Pi de placa única, mas um servidor de tamanho normal, você precisa desligar o microcontrolador e mexer com ele: escreva firmware, teste, estabeleça uma ligação com o host etc. Às vezes isso é interessante por si só, mas acontece o contrário: seria mais rápido escrever um script e executá-lo, finalmente, se apenas funcionar.

Os conectores incomuns no ferro sempre suscitavam sentimentos contraditórios de prurido técnico de engenharia e fetichismo ventilatório no autor. Esses conectores divertidos são discutidos aqui.

AVISO LEGAL


Se você estiver lendo este artigo em algum lugar fora do portal Geektimes, recomendo que procure um link autêntico em uma semana ou duas . O fato é que os comentários mais interessantes dos leitores aparecerão lá (ou seja, aqui) nas inserções, não estou falando em eliminar deficiências e erros. Acontece que os moradores irritados de um clube literalmente rasgam pedaços de um artigo ruim, enviando simultaneamente o autor a um abismo cármico. Em outras palavras, se um link autêntico não abrir, você não deve ler mais além deste local.

O autor envia seus cumprimentos para o Extremo Oriente (diretamente do céu sobre o Atlântico Norte) e também pede desculpas aos repórteres por marcas comerciais respeitadas: eles não precisam tanto de publicidade que eu forneço nomes cômicos para eles. Assim, o artigo é aplicável aos produtos Super Miron, mas o autor tem poucas dúvidas sobre a presença de mecanismos semelhantes nos produtos de Kharlampiy-Pankrat, Ivan Bral Maryu, Iltan, Dolyan e outros: conectores divertidos podem ser encontrados com mais frequência em fontes de alimentação e cestas de discos. Ao mesmo tempo, tentaremos expor o muito elogiado Kobzar Link.

Caros especialistas em plataforma de servidor, IPMI, I²C, SMBus e PMBus, corrija se algo der errado. Normalmente, o autor expressa gratidão aos leitores criativos com pontos cármicos, mas pede desculpas aos moradores do clube por quem a gratidão já foi escrita, mas o OVNI não ordena que faça isso duas vezes. Desejo-lhe uma leitura agradável.

Do que era


O autor não tem vergonha de comprar placas-mãe de servidores usadas por um centavo e dar a elas uma segunda vida. Mecânicas antigas e barulhentas de servidor (com fontes de alimentação) são enviadas para o refugo e substituídas por novos produtos, embora de classe de consumidor, mas de alta qualidade e tranquilidade. Mas até as séries Super Miron X8 e X9 vintage ainda produzem NAS impressionantes para pequenas empresas que combinam funções de empresa, uma “máquina do tempo” de arquivo contra Trojans de ransomware e replicação de rede ...

Zombando do programa amarelo
FreeNAS Windows-, USB-. , 1 -, . Linux? - , . , - 1 — (, ). USB jail VirtualBox ...

Em geral, há cerca de 20 anos, para a fazenda coletiva como GPIO, os artesãos usavam uma porta paralela para a impressora, mas tentam encontrá-la agora. O mundo mudou, quanto a mim - para melhor :)

Inspeção visual


Eu já tenho um produto quase fóssil, mas bastante funcional, X9SCM-F (Intel C204 Express), e seu irmão mais novo, X9SCL-F (C202), trabalha há alguns anos em uma instalação próxima. Se você ligar o produto, como na documentação, com o conector de alimentação ATX de 24 pinos ao norte, as portas SATA estarão em algum lugar na área de Khabarovsk. A leste, como Petropavlovsk-Kamchatsky, há um par de conectores T-SGPIO 1 e 2 que chamam a atenção com a combinação das letras "GPIO". O autor ativou essa combinação, mas os reflexos do geólogo-pesquisador da eletrônica fóssil se mostraram falsos. Na verdade, a palavra-chave aqui é SGPIO, é um barramento de sinalização duplex por divisão de tempo usando quadros de comprimento constante. O barramento, por sua vez, transmite três bits para cada porta SATA: no HBA - o estado da cesta e na cesta - o estado dos discos (ativo, com falha, localizador). Esta é uma tecnologia ultrapassada: cestas modernas usam I²C. Eu não me aprofundava muito, mas parece que seis portas SATA a bordo foram divididas em grupos de dois do norte e quatro do sul, e cada grupo pendurou seu próprio pente T-SGPIO. Pesado, desajeitado, mas para a agricultura coletivatambém inútil. Vá em frente, há um pequeno conector JWF1 na área de Yuzhno-Sakhalinsk, mas é apenas 5V de energia para a unidade SATA DOM, que eu não tenho. No Extremo Oriente, não há mais nada a fazer. Ao longo das fronteiras do sul se estende por toda uma série de conectores USB de 9 pinos e uma segunda porta RS232, tudo fica claro com eles. No noroeste do COM2, um par de jumpers JI2C1 / JI2C2 foi descoberto, permitindo o acesso a dispositivos PCIe. Este kit de ferramentas permaneceu um mistério para mim até agora, mas tenho certeza de que, de fato, JI2C1 / JI2C2 são as saídas ao vivo do SCL e SDA, que são simplesmente separadas da fonte de alimentação e do terra de 3,3V, que já estão no PCIe. Deixe por enquanto. O conector JTPM é extremamente sofisticado, é uma emergência. E apenas o LED UID pode ser extraído do conector JF1 do painel frontal, conectando-o ao opto-relé. A propósito, isso é m. até conveniente: um resistor de terminação já está integrado no circuito,acendeu o LED do UID - abriu (fechado) o relé. Para redefinição remotatalvez um dispositivo externo seja suficiente. O principal é que o operador, depois de entrar na interface da Web do BMC um ano depois, não acende o LED UID exatamente assim, ao mesmo tempo em que reinicia o dispositivo externo . Ok, estamos retornando ao extremo servidor norte, ele está lá, próximo à potência ATX e o conector JPI2C está localizado.

Devo dizer que a documentação sobre JPI2C é bastante otimista. Daqui resulta que esta é a saída do barramento I²C para monitorar a saúde da fonte de alimentação “nativa”. Fisicamente, o JPI2C é um conector SL do tipo Molex de 5 pinos com passo de 0,1 "(2,54 mm) e uma chave tola com polaridade invertida, presumivelmente o código de catálogo 70543-0004. A parte da resposta (na imagem no canto inferior esquerdo) é Molex 70066-0179 para crimpagem Crimper (também conhecido como BL-05F) Suspeito que em todas as placas-mãe Super Miron o barramento I²C seja usado para monitorar a saúde da fonte de alimentação do servidor e esteja conectado a um conector Molex SL de 5 pinos ( BL-05M ). Olhando para o futuro, direi que alguns usuários conseguiram engenharia reversa e encontraram uma maneira de remover todos os tipos de utilitários, como temperatura e volts com amperes, de suas fontes de alimentação Super Miron nativas, continue lendo.

Conector da fonte de alimentação I²C

O conector I²C da fonte de alimentação, localizado em JPI2C, monitora o status da fonte de alimentação, da ventoinha e da temperatura do sistema. Veja a tabela à direita para definições de pinos.

O conector JPI2C vazio provocou abertamente os pinos do barramento I²C padrão: SCL, SDA, GND e VCC. No meio está o alarme de falha da fonte de alimentação. Olhando para o futuro, atrevo-me a sugerir que essa falha de energia é a única maneira de acionar um alarme para um evento externo sem usar um microcontrolador externo. Em seguida, encontramos o artigo FAQ ID 9492, de 30 de março de 2010, que sugeria claramente a possibilidade de pesquisar o barramento I²C diretamente da linha de comando. Como a BMC está claramente envolvida no monitoramento da saúde da fonte de alimentação e a equipe é ipmitoolclaramente capaz de "conversar" com o barramento I²C com fontes de alimentação, nada deve interferir na conexão de outra coisa à JPI2C.

Qual conector: BL ou BLS?
MP3, 4- , CD- . , BLS-4, CD- , . , , BL-04F, . MP3 , ...

Por que eu estou? Além disso, o conector JPI2C nas placas Super Miron se parece exatamente com o conector de áudio em uma unidade de CD antiga; ele possui apenas 5 pinos em vez de 4. O JPI2C incluirá um BLS-5 simples de uma linha , mas é melhor ter um conector com uma chave de polaridade física tipo BL-05F , ao trabalhar com uma placa-mãe já instalada no gabinete, será muito fácil cometer um erro. Economize seu tempo.

Laço universal
«» 40- , . , , .. . BLS-1 M-F, M-M F-F. aliexpress: «dupont cable».

Trabalhando com dispositivos I²C na linha de comando


Conectei um sensor BMP180, uma vez comprado no aliexpress, ao JPI2C. No começo, nada aconteceu. O endereçamento como um todo também ficou confuso, e o argumento de busescolher um barramento não é claro de quantos. Porém, acabei de criar um script para iterar (digitalizar) os barramentos e comparar o resultado do seu trabalho antes de conectar o BMP180 e depois. Com o X9SCM-F, o sensor foi detectado imediatamente no barramento n ° 3 nos endereços 0xeee 0xef(veja o comentário abaixo). Será necessário reorganizar o JI2C1 / JI2C2 na posição ENABLE e verificar se de repente as placas PCIe respondem ...

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

O script enumera apenas endereços pares e não toca nos reservados . Em I²C, o bit menos significativo é um sinal de leitura e gravação: cada dispositivo parece ocupar dois endereços (leia em ímpar, escreva em par). Artigo FAQ ID 9492 me confundiu, porque as enquetes apenas ainda. Mas no caso de ipmitooller ou escrever, não é determinado pelo endereço, mas pelo contexto do comando, certo? A especificação pesada do IPMI 2.0 coloca tudo no lugar: o bit menos significativo do endereço no comando Master Read-Write ( 0x06 0x52) é geralmente reservado e deve ser redefinido (igual a zero).

O sensor BMP180, conectado ao JPI2C no X9SCM-F, respondeu a (barramento = 3) no endereço 0xee(e 0xefembora seja o mesmo). I.e. o endereço lógico do dispositivo acabou sendo0x77, como deveria estar na folha de dados (a Bosch pegou o endereço de 8 bits superior). Meu erro inicial foi procurar o BMP180 em um endereço IPMI "bruto" 0x77, isso não é verdade. Para IPMI, basta multiplicar o endereço lógico de I²C por dois (desloque um bit para a esquerda). Ao trabalhar com I²C, esse é o erro mais comum.

O ônibus I²C pendurado assim é desinteressante no ar, muito menos em um vácuo esférico. Uma plataforma bem conhecida, a pedido do "sensor i2c", oferecerá a um leitor respeitado uma ampla gama de sensores já vinculados a miniplacas. Normalmente, tudo o que resta é soldar o pente de contato, para isso há desejo suficiente e um ferro de solda de 30W com solda e fluxo, habilidades não são necessárias. Para testar a teoria, decidi medir a temperatura com o sensor BMP180, mas acabou sendo um pouco mais complicado do que eu pensava: o sensor é um exemplo de um dispositivo stateful complexo e seria mais correto dizer “extrair leituras de temperatura e pressão de um medidor de precisão, considerando os coeficientes de calibração”. Mas primeiro, ainda prestamos homenagem ao respeitado fornecedor.

Fontes de alimentação para telemetria
, .. , , : , , , , . 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, :) , , .

Medição de temperatura com 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 .

Interruptor I²C
, 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 -. , . , , .

Limitações


ipmitool(1)Conduzi todos os experimentos usando o comando v1.8.15, que funciona através da interface do host do FreeBSD 10. Se você usar esse comando em scripts, terá que analisar sua saída, além disso, stderr, não stdout. Eu evito especificamente analisadores neste artigo. Ficaria agradecido se algum dos leitores compartilharia bibliotecas comprovadas por trabalhar com IPMI por meio da interface do host em linguagens de script populares (perl, Python), pelo menos no modo de comando bruto.

Emboraipmitool(1)e pode funcionar em uma rede (623 / tcp), quando o host no JPI2C está desligado, não há energia em espera, o barramento é desenergizado. Não tentei ligar os sensores separadamente e interrogá-los através da interface de rede IPMI com o host desligado. Mas se você precisar de sensores autônomos conectados à rede, é melhor usar um dispositivo de placa única, por exemplo, o mesmo Raspberry Prog (desculpe, liguei para o Raspberry Pi no meu artigo sobre a proteção de cartões microSD contra desgaste prematuro, mudando para o sistema de arquivos somente leitura).

Como já mencionado, o método descrito aqui sem um microcontrolador externo praticamente elimina a reação a interrupções por eventos externos, exceto pelo sinal "falha na fonte de alimentação". Teoricamente, um sinal de falha de energia pode gerar um evento SNMP, mas eu não tentei. E aqui novamente quero dizer: se forem necessárias interrupções nos sensores, precisamos de um microcontrolador ou, na pior das hipóteses, de uma placa única dedicada. César é César.

Gerenciamento de Conflitos I²C


Se não houver uma fonte de alimentação "nativa" no barramento I²C, graças a Deus há menos problemas. Mas se uma fonte de alimentação “nativa” com uma interface I²C aparecer no sistema, em teoria, não é proibido conectar outros dispositivos em paralelo, após a montagem do adaptador correspondente. O que acontecerá neste caso? Se todos os dispositivos estiverem em seus endereços, nada de ruim deve acontecer até que o host decida controlar rigidamente a fonte de alimentação. Se você não sabe o que está fazendo, limite-se à leitura. A julgar pelo FAQ ID 9492 , as fontes de alimentação (simples, duplas, triplas) estão localizadas em endereços lógicos 0x38, 0x39, 0x3a, ...(são endereços IPMI divididos ao meio).

Eu tenho uma teoria sobre o IPMI e seu papel no acesso ao I²C: se todos os comandos de gravação selecionam apenas um registro para leitura subseqüente, cada interação com o dispositivo se encaixa em um comando IPMI Master Write-Read. A partir da especificação IPMI 2.0, muito pesada , eu recomendo que você leia o parágrafo 22.11, que descreve este comando. No meu entendimento, uma operação no barramento I²C está lendo ou gravando uma sequência de bytes em um único endereço. Mas a especificação IPMI com o comando Master Write-Read introduz algo mais: um par de operações de gravação / leitura, conveniente para sensores, assemelha-se a uma transação completaAlém disso, o IPMI estipula comprimentos máximos de buffer (cerca de 30 bytes). Também presumo que (a) o BMC é sempre o dispositivo principal no barramento I²C e (b) o BMC possui um mecanismo de travamento interno, ou seja, ele não tentará pegar o ônibus dele no meio da transação.

Supondo que o comando IPMI Master Write-Read (de duas operações) seja realmente uma transação indivisível, o BMC faz mais do que apenas exibir I²C: é um suplemento transacionalacima de I²C, além disso, com um host ou interface de rede. Em outras palavras, acaba sendo uma pilha de protocolos primitiva de 4 níveis para trabalhar com sensores de I²C por meio da interface IPMI, que ousei desenhar. Se um leitor respeitado não gostou da imagem, imagine que eu sou um artista e veja o mundo assim, lembre-se essencialmente, por favor :)

Aliás, o barramento SMBus, além de contatos adicionais, difere do I²C precisamente no modo batch, e a operação Write / Read é definida nele. Bloquear Mas isso já faz parte do protocolo do barramento SMBus, o IPMI nesse caso desempenharia o papel de um wrapper operacional simples, em vez de um suplemento transacional. No entanto, os comprimentos máximos de bloco nas especificações IPMI e SMBus são tão semelhantes que eu assumo uma conexão direta entre eles, sem sequer mergulhar fundo no assunto.

Segurança


Um BMC conectado a uma rede de computadores é um servidor e é potencialmente vulnerável. É por isso que, por exemplo, é necessário fortalecer as medidas de segurança no console do sistema operacional "local", que através do KVM virtual é de fato exposto à rede. O firmware antigo dos controladores BMC Super Miron contém uma vulnerabilidade desagradável ; portanto, a operação deve começar com a atualização do firmware BMC (além do BIOS).

Controle climático com feedback


Alguns fabricantes trazem a idéia do enforcamento, por assim dizer, ao ar de resfriamento com feedback direto ao culto, bastante polvilhado pelo marketing com um véu de segredo:

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- , . , , .. . , , .

Enquanto isso, a comunidade não permanece:

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

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


UPD:

Alternativas ao IPMI I²C - Conversores de interface


, 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/pt400729/


All Articles