Watch Dog Timer -- друг оверклокера :)

для раздела Блоги


Сторожевой таймер -- друг оверклокера.



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

В ходе обсуждения одной из моих предыдущих статей было высказано мнение, что производители часто не афишируют всех возможностей выпускаемого ими железа. Почему -- не совсем понятно. В этой статье речь пойдет как раз об одной такой завуалированной фишке. Владельцы многих материнских плат не только не знают, но даже и не догадываются о ее существовании. Имя этой фишке Watch Dog Timer (WDT). Он присутствует практически во всех современных микросхемах Super I/O (и не только).

    N.B. Последнее время слово WatchDog стало довольно популярно. Под WD обычно понимают класс устройств или программм, в обязанности которым вменяется слежение за значениями какого-либо параметра (или сразу нескольких). При выходе значений параметра за допустимые пределы, устройство/программма должна произвести какие-либо действия: включение/отключение каких-либо дополнительных устройств, звуковой/световой/прочей сигнализации.
В этой статье я хотел бы рассмотреть более узкий класс устройств: WatchDog Timer. В переводе на русский: "сторожевой таймер". Это довольно примитивное аппаратное устройство, состоящее как минимум из:

  • счетчика
  • управляющей части (УЧ)


      N.B. Необходимо сразу сделать важное замечание: WDT функционирует независимо от центрального процессора. Поэтому WDT продолжает работать даже при зависании CPU !

    Алгоритм работы:

    • В счетчик программым образом может быть записано некоторое число.
    • Сразу же содержимое счетчика начинает уменьшаться.
    • В момент, когда оно станет равным нулю, управляющее устройство производит некоторые действия, например, ресетит компьютер.
    Таким образом, чтобы предотвратить перезагрузку, программа должна переодически обновлять содержимое счетчика. Если она этого не сможет сделать (например, если компьютер завис), то по истечении некоторого времени, когда содержимое счетчика достигнет нуля, WDT перезагрузит систему.

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

    В случае использования доп. регистра возможно использование счетчика, ведущего прямой отсчет. В этом случае его содержимое постоянно сравнивается устройством управления с содержимым доп.регистра. Если значения совпадают, то УУ производит соответствующие действия (ресет).

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

    В общем, конкретная реализация WDT зависит от фантазии разработчика и задач, которые предполагается решать.

    Настало время перейти к практике.

    Рассмотрим работу WDT, являющегося неотъемлемой частью микросхемы IT8712F (Super I/O от фирмы ITE). Эта микросхема встречается на огромном количестве материнских плат таких фирм, как Gigabyte, EliteGroup и др. В то же время она отсутствует практически на всех материнских платах фирмы EPoX.

      N.B. Напомню, что уточнить, какая микросхема установлена на той или иной материнской плате, можно на официальном сайте MBM.
      Узнать, какая микросхема стоит в вашей материнской плате, можно еще проще. Запустите SpeedFan (он умеет определять этот чип) и в окне отчета увидите нечто похожее:

      Linked ISA BUS at $0290
      
      Scanning ISA BUS at $0290...
      IT8712F/IT8705F found on ISA at $290
      SuperIO Chip=IT8712F

    В данном случае строение WDT несколько отличается от рассмотренного выше в сторону расширения возможностей за счет некоторого усложнения. Его основные составные части:

  • счетчик
  • управляющее устройство
  • дополнительный регистр
  • конфигурационный регистр
  • регистр статуса



    Назначение этих составных частей станет понятно из описания алгоритма функционирования WDT:

  • Программа заносит в дополнительный регистр ненулевое значение временного интервала.
  • Сразу же УУ инициализирует счетчик (в счетчик переносится значение этого доп. регистра) и он начинает свой обратный отсчет.
  • Если отсчет дошел до нуля, то WDT может выполнить следующие действия:
      - выдать сигнал через KRST
      - выдать сигнал через PWROK1/2

      Через конфигурационный регистр можно запретить или разрешить эти два варианта. Лучше не спрашивайте меня, что собственно они означают Главное, что выбор первого из них (KRST) позволяет ребутить компьютер.

      - изменить состояние регистра статуса

  • Счетчик каждый раз инициализируется значением дополнительного регистра в тот момент, когда:
      -программа заносит в доп регистр какое-либо значение, отличное от 0;
      -когда пользователь нажимает на какую-либо клавишу клавиатуры;
      -когда пользователь двигает мышью (если в ОС установлен драйвер мыши);
      -когда происходит обмен данными через GamePort;
      -когда происходит обмен данными через инфракрасный порт (CIR)
    Реакцию WDT на каждое из последних четырех собыий можно как разрешить, так и запретить (через конфигурационный регистр).

    Если вас заинтересовали возможности, предоставляемые сторожевым таймером, то могу предложить вашему вниманию небольшую программу, позволяющую управлять параметрами его работы. Рекомендации по использованию утилиты находятся в файле ReadMe.RUS.txt.

    Успехов!

    Вадим Карпов
    2004 г.

    PS: Как я уже писал, WDT есть практически в каждой современной микросхеме ввода-вывода (SuperIO). Мне довелось повозиться с W83697HF, W83627(T)HF/W83637HF от винбонда. Но заставить WDT этих чипов перезагружать компьютер мне [пока?] не удалось. Весьма вероятно, что такую функцию возможно реализовать путем небольшой доработки материнской платы при помощи паяльника.

    PPS: Некоторые замечания касательно работы WDT на IT8712F:

      1) Замечено, что не всегда задаваемый временной интервал точно соответствует действительному. Например, если таймер настраивался на 60 секунд, то сработать он может только через 80 секунд. Т.е. имеет место некоторая погрешность. Эта погрешность линейно растет с увеличением временного интервала, так что при необходимости ее нетрудно учесть.

      2) В отличие от WDT других фирм, WDT в чипах SuperIO от ITE не отображают текущего значения счетчика. Поэтому существует лишь единственная возможность судить о его состоянии -- по регистру WDT Status Reg.

      3) При обращении софта к COM-портам компьютера таймер отключается. Причина: перевод микросхемы из расширенного режима в обычный. Как бороться ? Пока не знаю. Проще смириться с этим или отключить порты


    Дополнение от 22-03-2005 (почти по теме):

    Программа управления WatchDogTimer'ом микросхемы Attansic ATXP1 от HASW (hasw@hasw.net , автора утилиты 8RDA_Vcore).

    Понравилась краткость описания принципа действия WDT (цитата из README):
    цитата:
    What is a watchdog timer?

    A "watchdog" is a piece of hardware that counts down a timer.
    If the timer reaches zero, it hard-resets the computer (like pushing
    the reset button). So the software must reset this timer too avoid
    rebooting.
    The good thing is: If the computer hangs, the software
    can't reset the timer and it (should) reboot automatically.

    Текущая версия v.0.2: 8rdawdt-0.2.tar.bz2 (увы, только под юниксы )

    ---
    Обсудить эту и другие статьи/записи с моей персональной страницы можно в соответствующей ветке конференции.
    Telegram-канал @overclockers_news - это удобный способ следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
  • Возможно вас заинтересует

    Популярные новости

    Сейчас обсуждают