Подключение различных сенсоров, датчиков, реле, GPIO-расширителей и прочего «ардуиновского» хозяйства по шине I?C напрямую к серверным материнским платам через IPMI-интерфейс бортового контроллера (BMC). Практические примеры I?C-устройств и работа с ними из командной строки утилитой ipmitool
. SMBus, PMBus и управление блоками питания. Не очень документированные ограничения и вопросы безопасности. Разоблачение проприетарщины.
После установки сервера в самодельную конструкцию порой хочется подключить к нему ещё чего-нибудь: например, датчики температуры, давления, влажности, ЖК-экранчики или даже ШИМ-драйверы моторчиков. Бывают глючные внешние устройства, которые приходится удалённо и жёстко сбрасывать с помощью реле, не уровнив при этом весь сервер целиком. А может, читателю просто захотелось гребёнку GPIO с гирляндой светодиодов? Если это не одноплатник типа Raspberry Pi, а полноразмерный сервер, приходится навешивать микроконтроллер и возиться с ним: писать прошивку, тестировать, налаживать стык с хостом и т.д. Иногда это интересно само по себе, но бывает и наоборот: скорей бы скриптину написать да запустить, наконец, лишь бы работало.
Необычные разъёмы на железе всегда вызывали у автора смешанные чувства инженерно-технического зуда и вентиляторного фетишизма. Об этих занимательных разъёмах здесь и речь.
DISCLAIMER
Если вы читаете эту статью где-то за пределами портала Geektimes, рекомендую через недельку-другую заглянуть по аутентичной ссылке. Дело в том, что наиболее интересные комментарии читателей появятся там (т.е. тут) во врезках, я уже не говорю об устранении недочётов и ляпов. Бывает, что плохую статью рассерженные резиденты клуба буквально рвут на клочки, попутно отправляя автора в кармическую бездну. Другими словами, если аутентичная ссылка не открывается, то не стоит и читать дальше этого места.
Автор передаёт привет Дальнему Востоку (прямо из неба над Северной Атлантикой), а также приносит извинения вдалельцам уважаемых торговых знаков: они настолько не нуждаются в рекламе, что я придумываю им шуточные названия. Таким образом, статья применима к изделиям Супер Мирон, но автор практически не сомневается в наличии аналогичных механизмов на изделиях Харлампий-Панкрат, Иван Брал Марью, Ильтан, Долян и других: занимательные коннекторы чаще всего можно встретить на блоках питания и дисковых корзинах. Заодно попытаемся разоблачить и хвалёный Кобзарь Линк.
Уважаемые специалисты по серверным платформам, IPMI, I?C, SMBus и PMBus, поправляйте, если что не так. Обычно автор выражает признательность креативным читателям кармическими баллами, но приносит извинения тем резидентам клуба, кому благодарность уже была выписана ранее, просто НЛО не велит делать это дважды. Желаю приятного прочтения.
Из того, что было
Автор не стыдится покупать за копейки серверные материнские платы б/у и давать им вторую жизнь. Старая, шумная серверная механика (с блоками питания) отправляется в утиль и заменяется на новые изделия, хоть и потребительского класса, но качественные и тихие. Зато даже из винтажных серий Супер Мирон X8 и X9 до сих получаются просто офигенские NAS для малого бизнеса, сочетающие enterpise-функции, файловую «машину времени» против троянов-вымогателей и репликацию по сети…
jail
и VirtualBox чего стоит...Вообще, лет 20 назад для колхозинга в качестве GPIO умельцы использовали параллельный порт для принтера, но попробуйте сейчас его найти. Мир изменился, как по мне — так в лучшую сторону:)
Визуальный осмотр
У меня уже почти ископаемое, но вполне рабочее изделие X9SCM-F (Intel C204 Express), плюс на соседнем объекте уже пару лет трудится его младший брат X9SCL-F (C202). Если повернуть изделие, как в документации, 24-контактным разъёмом питания ATX к северу, то SATA-порты окажутся где-то в районе Хабаровска. Ещё восточнее, подобно Петропавловску-Камчатскому, находится пара разъёмов T-SGPIO 1 и 2, привлекающих внимание сочетанием букв «GPIO». На это сочетание автор и повёлся, но рефлексы геолога-исследователя ископаемой электроники оказались ложные. На самом деле ключевое слово здесь SGPIO, это дуплексная сигнальная шина с разделением каналов по времени, использующая кадры постоянной длины. Шина по очереди передаёт по три бита для каждого SATA-порта: на HBA — состояние корзины, а на корзину — состояние дисков (активен, отказал, локатор). Это устаревшая технология, современные корзины используют I?C. Я не копал очень глубоко, но похоже, что 6 бортовых SATA-портов разделили на группы из двух северных и четырёх южных, и каждой группе повесили свою гребёнку T-SGPIO. Громоздко, неуклюже, а для колхозинга ещё и бесполезно. Идём дальше, есть маленький разъёмчик JWF1 в районе Южно-Сахалинска, но это просто питание 5В для накопителя SATA DOM, которого у меня нет. На Дальнем Востоке больше делать нечего. Вдоль южных границ раскинулась целая гряда парных 9-контактных разъёмов USB и второй порт RS232, с ними всё понятно. На Северо-Западе от COM2 обнаружилась пара перемычек JI2C1/JI2C2, открывающих доступ к устройствам PCIe. Этот инструментарий для меня пока остался загадкой, но я почти уверен, что по факту JI2C1/JI2C2 суть живые выводы SCL и SDA, просто отделённые от питания 3.3В и «земли», которые и так есть в PCIe. Оставим пока. Коннектор JTPM больно мудрёный, это на крайний случай. А от коннектора передней панели JF1 можно отжать разве что UID LED, подключив его к оптореле. Кстати, это м.б. даже удобно: ограничительный резистор уже встроен в цепь, включил UID LED — открыл (закрыл) реле. Для удалённого сброса внешнего устройства, пожалуй, хватит. Главное, чтобы оператор, зайдя спустя год в веб-интерфейс BMC, не включил UID LED просто так, заодно сбросив и внешнее устройство. Ладно, возвращаемся на крайний
Надо сказать, что документация по поводу JPI2C довольно оптимистична. Из неё следует, что это выход шины I?C для мониторинга здоровья «родного» блока питания. Физически JPI2C суть 5-контактный разъём Molex типа SL с шагом 0.1" (2.54мм) и ключём защиты от
Power Supply I?C Connector
Power Supply I?C Connector, located at JPI2C, monitors the status of the power supply, fan and system temperature. See the table on the right for pin definitions.
Пустой разъём JPI2C откровенно дразнил стандартными контактами шины I?C: SCL, SDA, GND и VCC. Посередине — аварийный сигнал отказа блока питания. Забегая вперёд, рискну предположить, что этот Power Fail — единственный способ поднять тревогу по внешнему событию, не используя внешний микроконтроллер. Затем нашлась и статья FAQ ID 9492 от 30 марта 2010г, явно намекающая на возможность опрашивать шину I?C прямо из командной строки. Раз уж BMC явно участвует в мониторинге здоровья блока питания, а команда
ipmitool
явно способна «разговаривать» по шине I?C с блоками питания, ничто не должно мешать подключить к JPI2C ещё что-нибудь эдакое. К чему я? К тому, что разъём JPI2C на платах Супер Мирон выглядит точно так же, как аудио-разъём на старом CD-приводе, только имеет 5 контактов вместо 4. В JPI2C вполне войдёт простой однорядный
Работа с устройствами по I?C из командной строки
Я подключил к JPI2C купленный когда-то на aliexpress сенсор BMP180. Сперва ничего не вышло. Недоумение вызвала и адресация в целом, и аргумент
bus
, выбирающий одну шину непонятно из скольких. Но затем я просто сделал скрипт для перебора (сканирования) шин и сравнил результат его работы до подключения BMP180 и после. С платой X9SCM-F датчик тут же обнаружился на шине №3 по адресам 0xee
и 0xef
(см. комментарий ниже). Надо будет переставить JI2C1/JI2C2 в положение ENABLE и посмотреть, вдруг ещё и платы PCIe отзовутся…#!/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
Скрипт перебирает только чётные адреса и не трогает зарезервированные. В I?C самый младший бит является признаком чтения-записи: каждое устройство как бы занимает два адреса (чтение по нечётным, запись — по чётным). Статья FAQ ID 9492 меня запутала, потому что опрашивает только чётные. Но ведь в случае
ipmitool
чтение или запись определяются не адресом, но контекстом команды, верно? Увесистая спецификация IPMI 2.0 поставила всё на места: младший бит адреса в команде Master Read-Write (0x06 0x52
) вообще зарезервирован и должен быть сброшен (равняться нулю).Датчик BMP180, подключенный к JPI2C на плате X9SCM-F, отозвался по (bus=3) на адресе
0xee
(и 0xef
, хотя это то же самое). Т.е. логический адрес устройства оказался 0x77
, как и положено по datasheet (Bosch отхватил самый верхний 8-битный адрес). Моей изначальной ошибкой было искать BMP180 на «сыром» IPMI-адресе 0x77
, это неверно, для IPMI надо просто умножить логический I?C-адрес на два (сдвинуть на один бит влево). При работе с I?C это, кстати, самая распространённая ошибка.Висящая просто так шина I?C неинтересна ни в воздухе, ни тем более в сферическом вакууме. Известная площадка по запросу «i2c sensor» предложит уважаемому читателю широкий ассортимент датчиков, уже обвязанных на мини-платах. Обычно остаётся только контактную гребёнку припаять, для этого достаточно желания и паяльника на 30Вт с припоем и флюсом, навыки не требуются. Для проверки теории я решил померить температуру датчиком BMP180, но это оказалось несколько сложнее, чем я думал: датчик является примером сложного stateful-устройства, и правильнее будет сказать «извлечь показания температуры и давления из прецизионного измерителя с учётом калибровочных коэффициентов». Но сперва всё-таки отдадим должное уважаемому вендору.
Пользователь 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, ибо я за последствия не ручаюсь:) Если все предположения верны, можно получать весьма подробную картину непосредственно из блока питания, параметров там просто тьма.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
, соответственно, после чего использовать нехитрый набор действий (ура, тут редактор формул!).Последний результат делим на 10, т.к. изначально он в десятых долях градусов Цельсия. Если уважаемый читатель не согласен с характеристикой нехитрый набор действий, рекомендую обратить внимание на измерение давления, которое вычисляется уже в 15 приёмов и с использованием всех 11 калибровочных констант. Кстати, калибровочные константы можно прочитать один раз, а затем запускать измерения снова и снова записью кода в регистр
0xf4
. Мудрёно? Да ладно, датчик как датчик:)Стоит поблагодарить пользователя 41j за материал.
Обратите внимание, микросхема PCF8574A (в отличие от PCF8574) использует адреса с базой
0x38
(у PCF8574 база 0x20
), потенциально конфликтуя с родными блоками питания Супер Мирон. К счастью, адрес программируется, мини-плата идёт с тремя перемычками на 8 адресов, от блоков питания можно уйти на более старшие адреса. Всего на пустую шину можно повесить до 8 устройств, получив до 64 контактов GPIO. Если этого мало, см. описание коммутатора I?C в следующем спойлере.0x77
(т.е. 0xee
) зашит жёстко? Для этого и есть такая штуковина, как коммутатор (мультиплексор), его можно собрать самому на базе TCA9548A или купить в виде мини-платы там же, где и всё остальное. Коммутировать (переключать) можно до 8 устройств, обращаться придётся по очереди. По условиям данной статьи мы не используем микроконтроллеры, поэтому управлять самим коммутатором придётся посредством того же расширителя GPIO, от которого нужно три вывода. Обратите внимание на рисунок: мини-плата коммутирует только сигнальные линии I?C SDA и SCL, питание устройств придётся организовать отдельно. Если нужно больше 8 одинаковых устройств, берём несколько коммутаторов и делаем каскад.Ограничения
Все эксперименты я проводил с помощью команды
ipmitool(1)
v1.8.15, работающей через хостовый (ядерный) интерфейс FreeBSD 10. Если использовать эту команду в скриптах, придётся парсить её вывод, причём stderr, а не stdout. Я специально избегаю парсеры в этой статье. Буду признателен, если кто-либо из читателей поделится проверенными библиотеками для работы с IPMI через хостовый интерфейс на популярных скриптовых языках (perl, Python), хотя бы в режиме raw-команд.Хотя
ipmitool(1)
и может работать по сети (623/tcp), при выключенном хосте на JPI2C дежурного питания нет, шина обесточена. Запитывать сенсоры отдельно и опрашивать их через сетевой интерфейс IPMI при выключенном хосте не пробовал. Но если нужны автономные сенсоры, подключенные к сети, лучше уж задействовать одноплатник, например, тот же Малиновый Прог (простите, так я обозвал Raspberry Pi в своей статье про защиту microSD-карточек от преждевременного износа путём перехода на файловую систему read-only).Как уже говорилось, описанный здесь способ без внешнего микроконтроллера практически исключает реакцию на прерывания по внешним событиям, кроме сигнала «отказ блока питания». Теоретически, по сигналу Power Fail можно сгенерировать SNMP-событие, но я не пробовал. И тут снова хочется сказать: если нужны прерывания от сенсоров, то нужен микроконтроллер или, на худой конец, выделенный одноплатник. Кесарю — кесарево.
Конфликтология I?C
Если «родного» блока питания на I?C-шине нет, то и слава богу, меньше проблем. Но если же в системе таки появится «родной» блок питания с I?C-интерфейсом, в теории не возбраняется подключить другие устройства параллельно, сколхозив соответствующий переходник. Что в этом случае произойдёт? Если все устройства сидят на своих адресах, ничего страшного произойти не должно до тех пор, пока хост не вздумает жёстко поуправлять блоком питания. Если не знаете, что делаете, то ограничивайтесь считыванием. Судя по FAQ ID 9492, блоки питания (одинарные, двойные, тройные) располагаются на логических адресах
0x38, 0x39, 0x3a, ...
(это адреса IPMI, делённые пополам).У меня появилась теория относительно IPMI и его роли в доступе к I?C: если все команды записи только выбирают регистр для последующего чтения, то каждое взаимодействие с устройством укладывается в одну команду Master Write-Read протокола IPMI. Из весьма увесистой спецификации IPMI 2.0 я рекомендую ознакомиться с параграфом 22.11, который эту команду описывает. В моём понимании, операция по шине I?C — это либо чтение, либо запись последовательности байт по одному адресу. Но спецификация IPMI командой Master Write-Read вводит нечто большее: удобная для сенсоров пара операций «запись-чтение» напоминает полноценную транзакцию, причём IPMI оговаривает максимальные длины буферов (порядка 30 байт). Я также исхожу из того, что (а) BMC всегда является главным устройством на шине I?C и (б) BMC имеет встроенный механизм блокировок, т.е. он не попытается отобрать шину у самого себя посередине транзакции.
Если исходить из того, что команда IPMI Master Write-Read (из двух операций) действительно является неделимой транзакцией, то BMC выполняет нечто большее, чем просто отображение I?C: он является транзакционной надстройкой над I?C, причём с хостовым или сетевым интерфейсом. Другими словами, получается что-то вроде примитивного 4-уровневого стека протоколов для работы с I?C-сенсорами через интерфейс IPMI, который я и рискнул нарисовать. Если уважаемому читателю не понравилась картина, представьте, что я художник, и вижу мир именно так, возражайте по существу, пожалуйста:)
Кстати, шина SMBus, помимо дополнительных контактов, отличается от I?C именно пакетным режимом, и в ней определена операция Write/Read Block. Но это уже часть протокола самой шины SMBus, IPMI в этом случае сыграл бы роль простой операционной обёртки, а не транзакционной надстройки. Впрочем, максимальные длины блоков в спецификациях IPMI и SMBus настолько схожи, что я предполагаю между ними прямую связь, даже не погружаясь глубоко в тему.
Безопасность
BMC-контроллер, подключенный к вычислительной сети, является сервером и потенциально уязвим. Именно поэтому, например, следует усиливать меры безопасности на «локальной» консоли ОС, которая через виртуальный KVM де-факто экспонируется в сеть. Старые прошивки BMC-контроллеров Супер Мирон содержат неприятную уязвимость, поэтому эксплуатацию стоит начинать и с обновления прошивки BMC (помимо BIOS).
Климат-контроль с обратной связью
Некоторые производители доводят висящую, так сказать, в воздухе идею охлаждения с обратной связью прямо-таки до культа, изрядно припудренного маркетингом c завесой тайны:
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-проектов через социальные сети, со свободным обменом скриптами. У меня ощущение, что выросло бы количество чеков, т.е. продаж блоков питания. Но маркетологам, конечно, виднее.
Тем временем, community не остаёт:
Но у меня на более старой плате Супер Мирон серии X9 (socket 1155) это не работает. Там установлен бортовой контроллер Nuvoton WPCM450, который, к сожалению, ШИМ управлять не умеет. Более того, на мат. платах X9SCL/X9SCL у меня не получалось даже переключать режим работы климата с «лёгкого» на «полный» без полной перезагрузки системы. Увы...
UPD:
Альтернативы IPMI I?C — преобразователи интерфейсов
А что, если замечательных разъёмов с 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
Комментарии (36)
hokum13
01.02.2017 10:05+1А после обнаружения во FreeNAS признаков виртуализации автор затолкал туда же и Windows-машину
Без обид, но отделите мух от котлет. Proxmox (подставьте свою версию «взрослой» виртуалки) без проблем решит вопрос виртуализации. А поверх можно поставить и FreeNAS, и 1с-ку, и все что душе угодно (у меня особо цинично было воткнуто 10 ключей от ЕГАИСа без windows).
Из-за драйверов ККМ, конечно.
Простите, а зачем ККМ в сервере? Разве не на кассе должен быть?teleghost
01.02.2017 15:59специально для Вас, уважаемый читатель, абзац только что ушёл в спойлер;)
хоть там и есть слова «отдельная история» со ссылкой на неопубликованную статью, но мне не жалко
Продолжим оффтоп. Я последовательный адепт FreeNAS из-за реализации ZFS под FreeBSD, но оглядеться никогда не мешает. За Proxmox спасибо. Честно говоря, увидев у него загрузку с USB-флэшек в виде зеркала ZFS, я уже обрадовался, но потом вспомнил, что это Linux, а не FreeBSD, и сразу остыл. Вы с одинарной флэшки загружаетесь? Просто я с двойной, так сон крепче. А издевательству над ZFS хочу уделить внимание в той статье, которая ещё не вышла. Только это ни в коем случае не наезд на Linuх, просто его ZFS считаю сырым. И справедливости ради: виртуализация во FreeNAS — это сущий адъ:)
Простите, а зачем ККМ в сервере? Разве не на кассе должен быть?
Хотел ККМ к 1С прицепить, но пока руки не дошли.
Я вообще не в этой теме, но, в крайнем случае, будет два туннеля© :))hokum13
02.02.2017 11:42Статья классная, хоть я и не сторонник столь «плотных» комбайнов.
специально для Вас
Спасибо, не стоило :)
Вы с одинарной флэшки загружаетесь?
Я играю в чуть более дорогой лиге. У меня 2 SATA в аппаратном RAID-е. Сами виртуалки на GlusterFS, на тех же серверах что и ProxmoxVE, но на другом RAID-е. Секса по началу с этой схемой тоже не мало было.
виртуализация во FreeNAS — это сущий адъ:)
Ну на УАЗе 120 по трассе тоже страшно, это не значит что машина плохая, это значит что просто не ее стихия.Хотел ККМ к 1С прицепить, но пока руки не дошли.
Вы про этот ККМ? Если да, то зачем он на сервере? У Вас же не сервер чеки печатает, а оператор (кассир). Поставьте ККМ на его комп и толстого клиента (он заслужил :) ). А вот стоит ли желтую программу ставить на linux, это большой вопрос ибо с производительностью там все НЕ ОЧЕНЬ интересно (в смысле *опа), несмотря на то что используется собственная (1С-а) сборка PostgreSQL. Зато на сэкономленные деньги можно прибавить пару планок оперативы. Короче говоря сложный выбор.teleghost
04.02.2017 22:48У меня 2 SATA в аппаратном RAID-е...
Вопрос в том, с какой скоростью Вы узнаете об отказе первого диска в загрузочном массиве? Я не имею в виду теоретически достижимую, а реально действующую в данный момент.
Сами виртуалки на GlusterFS… на другом RAID-е
Да, второй RAID — это более дорогая лига, но с моими объёмами и этого будет мало. Для FreeNAS аппаратный RAID не подходит совершенно, т.е. понадобился бы (1) загрузочный массив, (2) массив с VM и (3) JBOD для ZFS. Даже если объединить (1) и (2), громоздко. У меня это просто на одном копеечном контроллере с JBOD.
Насколько GlusterFS стабильна? С какой скоростью реконструируется, например, зеркало 4Тб, если диск пропал не навсегда, а на несколько часов? Если ничего не путаю, какие вообще преимущества у GlusterFS перед классическими файловыми системами *при использовании на одном хосте* в Вашем случае? Я интересуюсь, потому что считаю обязанным рассматривать альтернативы в возможной публикации.
спасибоhokum13
07.02.2017 08:31Вопрос в том, с какой скоростью Вы узнаете об отказе первого диска в загрузочном массиве?
Ну либо при перезагрузке, либо smartctl в помощь. В конце концов аптайм длится месяцами.
У меня это просто на одном копеечном контроллере с JBOD.
Ну на это у меня не может быть аргументов.
Насколько GlusterFS стабильна?
Не ломалась (если не считать «учений»).
С какой скоростью реконструируется, например, зеркало 4Тб, если диск пропал не навсегда, а на несколько часов?
Сложный вопрос, не так много крутится. Надо будет на тестовом попробовать.
*при использовании на одном хосте*
GlusterFS это вообще не про один хост! Преимуществ ровно 0. Ну и смысл как бы в отказоустойчивости без поднятия из бэкапа в случае смерти ноды proxmox-кластера.teleghost
07.02.2017 08:57Вопрос в том, с какой скоростью Вы узнаете об отказе первого диска в загрузочном массиве?
Ну либо при перезагрузке, либо smartctl в помощь.
Вы уж простите, что я докопался на эту тему, но как smartctl работает с аппаратным RAID? Мне почему-то казалось, что нужны проприетарные утилиты, может, и не для всех чипсетов.
Если у Вас работает smartctl (или ну хоть что-нибудь, но без перезагрузки), поделитесь, пожалуйста спецификацией, я возьму на заметку. Или это просто fakeRAID?
В конце концов аптайм длится месяцами.
Я где-то читал статью про отказы массивов, где была статистика на тему незамеченных (незаменённых вовремя) дисков. На объектах бываю редко, вручную на системы почти никогда не заглядываю, поэтому мне нужно, чтоб в случае чего сразу сообщение на смартфон:)
*при использовании на одном хосте*
GlusterFS это вообще не про один хост! Преимуществ ровно 0. Ну и смысл как бы в отказоустойчивости без поднятия из бэкапа в случае смерти ноды proxmox-кластера.
Так я потому и выделил фразу, что воспринимаю GlusterFS как некую среду для многоузловых (в т.ч. гиперконвергентных) систем более серъёзного уровня, чем одиночный «офисный» комбайн с 1С, где GlusterFS просто не раскрывается. Подтвердили, спасибо. Но я тогда не понимаю, зачем он тогда Вам, просто на перспективу? Не похоже, чтобы у Вас трудилась многоузловая ферма:)hokum13
07.02.2017 09:28+1Если у Вас работает smartctl
Тыц
Ну а если честно, то мониторинг на smart не был прикручен (сейчас может и исправили). Всегда есть еще нода, которая потерпит пока поднимается первая.
Не похоже, чтобы у Вас трудилась многоузловая ферма:)
Сейчас да (сменил работу). 2 года назад поднимал эту схему на 2-х серверах (хотя изначально говорили про 3) для нового торгового центра. Сервера распиханы в разные концы торговика (на случай пожара/потопа/идиотов/...). На момент установки админа в этом городе у нас вообще не было и собеседования не вдохновляли на результат, поэтому нужна была схема с ОЧЕНЬ медленной реакцией ТП (порядка суток, без смерти сервисов).
Alexeyslav
07.02.2017 10:00Сообщение может не прийти по множеству причин, поэтому регламентные работы должны быть запланированы и выполняться. Например, хотябы раз в месяц убеждаться что всё в порядке, никаких негативных тенденций нет и система оповещения работает, бэкапы делаются и делаются без ошибок(однажды потеряли данные за последние 7 дней из-за маленького нечитаемого участка плёнки) а бесперебойник в исправном состоянии.
Godless
01.02.2017 10:28> Долян
дааа, Долян 310 — огонь))))
Спасибо за статью, надо поковырять свой старый «Иван Брал Марью Х систем 3200 M2». А то на новом месте жительства ему как раз не хватает внутрикорпусного датчика влажности…
Barma2012
01.02.2017 13:18+1Очень трудно было читать начало статьи… какое-то хаотичное построение фраз.
Дальше, где уже пошли технические подробности — там нормально ))teleghost
01.02.2017 16:01спасибо за комментарий, до какого момента примерно длится хаос?
я просто пишу в разных состояниях сознания, а потом глаз замыливается
dee3mon
01.02.2017 15:59В главе
Визуальный осмотр
категорически не хватает карты Дальнего востокаteleghost
01.02.2017 16:24Не сочтите за выпендрёж, но я этот параграф готовил на борту авиалайнера. Там даже был Интернет, но он по воздушному тарифу, поэтому пришлось задействовать развлекательный терминал. Это тот, который с бронебойный сенсорным экраном на спинке кресла впереди, и когда пытаешься продавить сенсор, то палец чувствует сидящий впереди пассажир. К счастью, нашлось и приложение с глобусом, хоть он и проворачивался со скоростью примерно два оборота в минуту, полминуты от Атлантики до Дальнего Востока. Но это гораздо лучше, чем по пачке Беломора :)))
http://maps.yandex.ru
http://maps.google.com
Vanellope
01.02.2017 16:24Иван Брал Марью
А можно перевод брендов для неместных? Только НР угадывается (и Делл вроде бы).teleghost
01.02.2017 16:29Позвольте, ну а как же Иван Брал Марью? И если угадали Делл: Долян, Ильтан — никакой ассоциативной связи? Про Супер Мирон даже не говорю.
Vanellope
01.02.2017 16:43ОК, Ильтан — Интел?
Супер Мирон — неужели Sun?teleghost
01.02.2017 16:46Хорошо, Супермирон — так лучше? :))
Vanellope
01.02.2017 16:52Гугль помог, но все равно первый раз слышу. В нашей деревне таких еще не было.
teleghost
01.02.2017 19:09Материнские платы Супермирон весьма распространены в государственных учреждениях стран бывшего СССР, например, внутри всячески сертифицированных серверов (не буду указывать, каких конкретно). Так что даже в Ваших краях их может быть гораздо больше, чем кажется:)
x893
01.02.2017 16:36Мне проще было взять CP2112 (просто потому, что присылают бесплатно — хотя есть других 100500) и через USB общаться с I2C.
teleghost
01.02.2017 16:45спасибо, а почему присылают бесплатно? и что там с софтом под Linux, FreeBSD?
может, он даже стандартными утилитами через /dev/uhid управляется?x893
01.02.2017 17:45Присылают образцы бесплатно — потому что широкой души люди.
С хоста как HID, под Linux наверняка есть. Я под Windows из C# читаю/пишу.
Библиотека у них есть на сайте и примеры.
Такие же есть MCP2221Ateleghost
01.02.2017 19:19давайте сверимся на всякий случай:
CP2112 — это готовый адаптер пр-ва Silicon Labs
MCP2221A — это микросхема пр-ва Microchip
всё верно?x893
01.02.2017 19:25частично верно — обе микросхемы. Но обе дают бесплатно по 3 штуки. Но CP2112 приходит в Россию, а MCP2221A не приходит.
teleghost
02.02.2017 07:19Спасибо, Вы навели меня на изделие ADM00559, для работы с сенсорами 100кБит обычно достаточно, можно обойтись и без запрещённых «A». Родные библиотеки-драйверы под Linux есть, это хорошо дополняет HID. Попробую, наверное.
Поправьте, но к CP2112 требуются уже навыки пайки QFN, фен на 400°C, плата, разъём, рассыпуха и прочее…x893
02.02.2017 10:56+1Если самому делать, то паяльник точно нужен. С феном удобнее кконечно, но можно и без него. Можно на взять макетку под QFN и на ней сделать.
Я таких сделал себе.
Krey
01.02.2017 19:21А есть распиновка 4-х пинового разъема Кобзаря?
teleghost
01.02.2017 20:19вижу, заинтриговал :) увы, у меня распиновки нет, а эти паразиты только через техподдержку информацию дают, да так, чтобы никто не догадался
как я понял, главное — понять, где VCC и GND, чтобы не испортить железку.
Земля «цифровая», он должна, по идее, быть в контакте с остальными «землями» на блоке (+5В и +12В).
Попробуйте прозвонить мультиметром выключенный блок питания.
С VCC сложнее. С блоком случайно не шла коробочка такая с USB, заменяющая их Commander Mini?
Если шла, подключите её к USB, включите машину и найдите, на какой пин выдаётся питание, и какое именно — +3.3В или +5В? Это можно сделать прямо с помощью проводка, который они должны давать в комплекте. Если найти GND и VCC, шансов что-то спалить гораздо меньше.
Если ничего нет, я рискну предположить что GND будет с одного краю, а VCC — с другого. Но если это окажется не так, заранее приношу извинения за испорченный блок питания и материнскую плату:))
Две оставшихся линии можно попробовать так и эдак, две комбинации всего. Я не думаю, что перепутанные SDA и SCL могут что-либо повредить, но ручаться тоже не могу, уж простите. Далее — скан по шине, надо найти адрес блока, считывая по одному байту со всех адресов подряд (кроме зарезервированных). В одном положении SDA/SCL блок должен отозваться, в другом — нет:)
Но это теория.
Я даже нашёл фотки Commander Mini без корпуса. Ряд из четырёх разъёмов PMBus на большинстве фотографий видно справа, но разобрать, что там, сложно.
Если найдёте, поделитесь, я добавлю врезку.Krey
02.02.2017 11:42Все руки не доходили разобраться и подключить, но раз тема появилась, попробую в пятницу. Все необходимое есть, включая SMBus-to-USB адаптер, который шел в комплекте к AX1200i, логический пробник, и какая-то платка, которой можно поснифать I2C пакетики.
teleghost
02.02.2017 16:20Супер, при наличии родного конвертера интерфейсов распиновка должна стать лёгкой прогулкой, а перехватчик I2C должен однозначно выдать адрес устройства. Остальное (я уверен) описано в спецификации PMBus. Обратите внимание на запись 0x98 по адресу устройства и его ответ, это (теоретически) должно быть где-то сначала.
Предлагаю пока уйти в личку и вернуться к аудитории уже с результатами (если будут). А если будет желание, сможете сами и опубликовать, но я предлагаю сделать у себя цветную иллюстрированную врезку. С указанием автора, само собой: публика должна знать своих героев:)
Rumlin
Можно I2C дисплей подключить для вывода чего-нибудь нужного.
Varkus
Ирония: можно i2c дисплей подключить к i2c в разъёме vga/DVI без костылей, велосипедов, регистрации и СМС.
teleghost
Если без иронии, то на промышленных системах на экранчик выводятся диагностические сообщения, полноразмерный монитор цеплять крайне неудобно.
Впрочем, Вы в курсе наверняка, это я так, для гостей клуба, кто редко заходит в серверные залы:)
Varkus
Ирония в том, что видеоустройство подключается к видеопорту, но общаются по интерфейсу не имеющему отношение к видеопотоку.