Как известно, современные персональные компьютеры имеют развитую подсистему
оптимизации энергопотребления и контроля жизненно важных параметров системы.
Сегодня практически все материнские платы поддерживают так называемый аппаратный
мониторинг, основные функции которого следующие:

  1. Измерение температуры процессора, микросхем чипсета и дополнительных
    контрольных точек.
  2. Измерение основных питающих напряжений.
  3. Измерение скорости вращения вентиляторов.
  4. Управление скоростью вращения вентиляторов в зависимости от нагрузки на
    компьютер. Остановка вентиляторов при переходе в режим пониженного
    энергопотребления.

Для всех измеряемых параметров обеспечивается возможность считывания их
значений посредством программно доступных регистров. Это использует BIOS, а
также диагностические утилиты, запускаемые в сеансе ОС. При выходе параметров за
установленные пределы, подсистема мониторинга сигнализирует об аварийной
ситуации. Обычно для этого используется прерывание SMI (System Management
Interrupt)
. Программное управление вентиляторами реализуется с помощью
регистров, записывая значения в которые, можно устанавливать скорость работы
вентилятора или остановить его. Некоторые современные платформы поддерживают
режим, при котором подсистема мониторинга автоматически изменяет обороты
заданного вентилятора при изменении температуры заданной контрольной точки, не
"отвлекая" центральный процессор на выполнение операций считывания температур и
установки скорости вращения вентиляторов.

Вопросы перегрева и охлаждения компонентов компьютера вызывают немало споров
и эмоций, как у пользователей, так и у профессионалов. Попробуем их рассмотреть
детально, на уровне схемотехники и ассемблера.

 

А в чем угроза?

Как было сказано выше, одной из функций подсистемы аппаратного мониторинга
является управление скоростью вращения вентиляторов. Таким образом, существует
банальная возможность программно выключить вентилятор, что очевидно вызовет
перегрев компонентов компьютера. Данная тема уже затрагивалась в ранее
опубликованной статье "Программно-аппаратные
угрозы или хрупкий мир глазами "железячника" № 1
и
2" . В предлагаемом
материале мы пошагово рассмотрим действия, которые должна выполнить программа
для остановки вентилятора процессора и промоделируем последствия такого
действия. К статье прилагается пример программы с исходными текстами на
ассемблере.

 

Архитектура подсистемы аппаратного мониторинга

Функциональный состав подсистемы аппаратного мониторинга достаточно очевидно
следует из списка ее обязанностей, приведенного в начале статьи. Для измерения
температуры используются термодатчики, расположенные на плате, а также в
кристалле процессора и микросхем чипсета. Результатом работы термодатчиков
являются аналоговые величины (значения напряжений), которые подаются на
аналого-цифровые преобразователи (АЦП). Результат работы АЦП – цифровой код,
пропорциональный значению температуры, доступен для считывания посредством
программно-доступных регистров. Значения напряжений питания измеряются по такой
же схеме.

Для измерения скорости вращения вентиляторов, используются датчики,
генерирующие импульсы при каждом обороте вентилятора с последующим цифровым
измерением длительности паузы между двумя импульсами. Результат также
считывается посредством программно доступных регистров. Для программного
включения и выключения вентиляторов, они подключены к напряжению питания +12V
через транзисторные ключи, открытием и закрытием которых управляют
программно-доступные регистры. Для обеспечения плавного управления скоростью
вентиляторов, используется широтно-импульсная модуляция (ШИМ). При этом
указанные транзисторные ключи открываются и закрываются с определенной частотой.
Изменяя соотношение длительностей открытого и закрытого состояния ключей, можно
управлять средним значением напряжения на двигателе вентилятора и,
следовательно, скоростью его вращения. Код для управления скоростью записывает
программа. Генерация периодического сигнала ШИМ выполняется аппаратно.

 

Реализация аппаратного мониторинга на основе микросхемы IT8705F

В отличие от архитектуры таких устройств материнской платы, как системный
таймер, контроллер прерываний, контроллер прямого доступа к памяти, архитектура
подсистемы аппаратного мониторинга не стандартизована. Поэтому адреса регистров
и назначение битов в регистрах этой подсистемы различны для различных
материнских плат. Рассмотрение всех вариантов реализации выходит за рамки данной
статьи. Таких вариантов более сотни и не все из них хорошо документированы.
Поэтому, рассмотрим один из примеров – подсистему аппаратного мониторинга
(Environment Controller или EC) входящую в состав микросхемы MIO (Multi
Input-Output) IT8705F.

Данная микросхема отвечает за ряд интерфейсов на материнской плате,
аппаратный мониторинг не является ее единственной или основной функцией. Она
содержит следующие устройства: контроллер гибких дисков, два последовательных
порта, параллельный порт, контроллер аппаратного мониторинга, блок
многофункционального ввода-вывода, игровой порт, порт для инфракрасного
интерфейса и порт MIDI.

Каждому из перечисленных устройств соответствует свой номер LDN (Logical
Device Number) и блок конфигурационных регистров, посредством которого
устройству назначаются системные ресурсы (адреса портов и памяти, номер
прерывания, номер канала DMA). Для подсистемы аппаратного мониторинга LDN=4. Для
доступа к конфигурационным регистрам используются порты с адресами 002Eh, 002Fh,
работающие как порт индекса конфигурации и порт данных конфигурации. При
обращении к регистру, в порт индекса записывается его номер, затем через порт
данных считывается или записывается значение регистра.

Каждое логическое устройство, в том числе рассматриваемый контроллер
аппаратного мониторинга, также имеет набор регистров, обеспечивающих выполнение
"прямых обязанностей" данного устройства. Для контроллера аппаратного
мониторинга такими функциями являются считывание значений температур,
напряжений, скоростей вращения вентиляторов, а также управления вентиляторами.
Здесь также используются порты индекса и данных, но их адреса программно
настраиваемые (посредством выше упомянутых конфигурационных регистров).

Порт индекса контроллера аппаратного мониторинга находится по адресу X+5,
порт данных – по адресу X+6. Значение базового адреса X задается посредством
конфигурационных регистров. Отметим, что в большинстве платформ (хотя не во
всех) порт индекса расположен по адресу 0295h, порт данных – по адресу 0296h.
Контроллер мониторинга содержит 256 регистров, адресуемых по выше описанной
индексной схеме (не все из возможных 256 адресов регистров используются).

Конфигурационные регистры микросхемы IT8705F описаны в [2]. Блок регистров
контроллера аппаратного мониторинга описан в [3]. Ниже, при описании
ассемблерного примера, работа с указанными регистрами рассмотрена детально.
Архитектура конфигурационных регистров микросхемы MIO и принцип ее разделения на
логические устройства, во многом сходны с принципами построения устройств ISA
PnP.

 

Меры предосторожности при экспериментах

Ниже мы рассмотрим программу, останавливающую вентилятор процессора. Меры
предосторожности, необходимые при отладке такой программы, очевидны: следует
визуально контролировать вращение вентилятора и не допускать его останова более
чем на 30-40 секунд. Благодаря теплоемкости радиатора, за такой интервал времени
процессор не нагреется до опасной температуры. Если по каким-либо причинам,
программа не запустила вентилятор после останова, или зависла, нажимайте RESET.
Повторю уже ставшее привычным для данного цикла статей предупреждение:
категорически не рекомендуется проводить эксперименты на основном рабочем
компьютере, лучше собрать стенд, используя, например, старую плату, оставшуюся
после апгрейда.

Напомним, что все современные процессоры и материнские платы поддерживают
эффективные механизмы защиты процессора от перегрева, поэтому до "дыма и огня"
дело, скорее всего не дойдет, даже если экспериментатор сам захочет этого
добиться. Процессоры Intel (начиная от Pentium 4) и AMD (начиная от Athlon 64)
поддерживают двухступенчатую температурную защиту. При достижении первого
порогового значения происходит замедление процессора путем снижения тактовой
частоты (точнее говоря, выполняется периодический пропуск определенного
количества тактов при неизменной длительности такта). Второй порог достигается,
если замедление процессора не привело к его остыванию, и он нагрелся до
температуры, при которой существует опасность физического разрушения. В этом
случае выполняется аварийное выключение питания. Эта операция не может быть
блокирована программно. Значения температур для первого и второго порогов
зависят от модели процессора. Например, для процессоров класса Intel Pentium 4 с
ядром Prescott типовые значения порогов соответственно 70 и 90 градусов Цельсия
(рекомендуется уточнять эту информацию, используя Data Sheet на конкретный
процессор).

Более старые процессоры, например процессоры классов Intel Socket 370 и AMD
Socket A (он же Socket 462) не имеют собственных стандартизованных средств
температурной защиты, несмотря на наличие термодатчика. Производители
материнских плат в ряде случаев компенсировали этот недостаток установкой
дополнительных схем. Если таковые отсутствуют, угроза выхода процессора из строя
при остановке вентилятора более реальна.

В любом случае, систематически повторяющийся перегрев может существенно
снизить долговечность работы процессора, даже если благодаря схемам защиты отказ
не произошел сразу.

 

Замечания по совместимости

Рассмотренная ниже процедура, использует непосредственный доступ к
конфигурационным регистрам микросхемы MIO и блоку регистров контроллера
аппаратного мониторинга, входящего в ее состав. Как было сказано выше,
архитектура указанных ресурсов не стандартизована, и различается у плат
различных моделей. Даже между платами, использующими одинаковые контроллеры
мониторинга, могут быть программно-видимые различия, обусловленные различным
включением измерительных и управляющих цепей контроллера. Поэтому, для создания
универсальной программы потребуется обширная база данных, содержащая процедуры
поддержки под каждую модель материнской платы. Теоретически, обеспечить
универсальный протокол доступа к подсистеме аппаратного мониторинга может
интерфейс ACPI, но на большинстве платформ он реализован достаточно ограниченно,
что препятствует его использованию для решения рассматриваемой задачи.
Подробности в [1].

Поэтому, автор решил написать программу управления вентилятором для частного
случая, а именно для контроллеров аппаратного мониторинга, входящих в состав
микросхем MIO IT8705 и IT8712 фирмы ITE. Подробности в [2-7]. Программа
проверена на следующих материнских платах: Gigabyte GA-K8VT800 (AMD Socket 754,
чипсет VIA K8T800, MIO ITE IT8705F) и Gigabyte GA-8I915PL-G (Intel Socket 775,
чипсет Intel 915, MIO ITE8712F).

Используя предлагаемый пример как образец, заинтересованный читатель может
реализовать поддержку других контроллеров. Отметим, что контроллер аппаратного
мониторинга не всегда реализован в составе микросхемы Multi Input-Output (MIO).
На некоторых платформах он присутствует в виде отдельной микросхемы, пример
такого контроллера описан в [12]. Иногда он реализован в составе "южного моста"
чипсета, пример в [15-16]. Платформы для серверов и рабочих станций могут
содержать несколько контроллеров. Также отметим, что современные процессоры
имеют внутренние схемы для измерения и программного считывания температуры (в
том числе раздельно для каждого ядра), что дополняет возможности аппаратного
мониторинга.

Ну и, наконец, напомним о том, что в некоторых компьютерах, вентилятор
процессора подключен не к материнской плате, а непосредственно к разъему от
блока питания. Разумеется, в этом случае возможность программно выключить
вентилятор отсутствует.

(Продолжение следует)

 

Источники информации

Электронные документы, доступные на сайте
acpi.info.

1) Advanced Configuration and Power Interface Specification. Hewlett-Packard
Corporation, Intel Corporation, Microsoft Corporation, Phoenix Technologies
Ltd., Toshiba Corporation. Revision 3.0.

Электронные документы, доступные на сайте
ite.com.tw.

2) IT8705F/IT8705AF Simple Low Pin Count Input/Output (Simple LPC I/O)
Preliminary Specification V0.4.
3) IT8705F Preliminary Environment Controller (EC) Programming Guide V0.3.
4) Errata V0.1 for IT8705F/IT8705AF V0.4. Document Number: ITPM-ER01-IT8705.
5) IT8705F Application Circuit. Document Number: IT-8705-CG-S01 V2.0.
6) IT8712F Environment Control – Low Pin Count Input/Output (EC-LPC I/O)
Preliminary Specification V0.9.1.
7) IT8712F Preliminary Environment Controller (EC) Programming Guide V0.2.
8) IT8718F Environment Control – Low Pin Count Input/Output (EC-LPC I/O)
Preliminary Specification V0.3.

Электронные документы, доступные на сайте
winbond.com.tw.

9) W83627HF/F, W83627HG/G Winbond LPC I/O. Revision: A1.
10) Winbond LPC I/O W83627THF. Revision 1.0.
11) Winbond LPC I/O W83697HF, W83697HG. Revision: A1.
12) W83781D Winbond H/W Monitoring IC.

Электронные документы, доступные на сайте
smsc.com.

13) LPC47M10x Preliminary. 100 Pin Enhanced Super I/O Controller with LPC
Interface for Consumer Applications.
14) SMSC LPC47M10x Reference Design ASSY 6097 Rev. A1. Document Number: 6097.

Электронные документы, доступные на сайте
datasheetarchive.com.

(Информация на данном сайте более полная, чем на "родных" сайтах
производителей указанных микросхем.)

15) VIA VT82C686A South Bridge Datasheet. Revision 1.54. Для поиска документа
набирать строку "VT82C686".
16) VIA VT82C686B South Bridge Datasheet. Revision 1.71. Для поиска документа
набирать строку "VT82C686".

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии