Watch dog timer - один оверклокера)

В ході обговорення однієї з моїх попередніх статей було висловлено думку, що виробники часто не афішують всіх можливостей випускається ними заліза. Чому - не зовсім зрозуміло. У цій статті мова піде саме про одну таку завуальованій фішці. Власники багатьох материнських плат не тільки не знають, але навіть і не здогадуються про її існування. Ім'я цієї фішці Watch Dog Timer (WDT). Він присутній практично у всіх сучасних мікросхемах Super I / O (і не тільки).

    N.B. Останнім часом слово WatchDog стало досить популярно. Під WD зазвичай розуміють клас пристроїв або программма, в обов'язки яких ставиться стеження за значеннями будь-якого параметра (або відразу декілька). При виході значень параметра за допустимі межі, пристрій / программма повинна провести які-небудь дії: включення / відключення будь-яких додаткових пристроїв, звуковий / світловий / іншої сигналізації.
У цій статті я хотів би розглянути більш вузький клас пристроїв: WatchDog Timer. У перекладі на українську: "сторожовий таймер". Це досить примітивне апаратний пристрій, що складається як мінімум з:
  • лічильника
  • керуючої частини (УЧ)

    Watch dog timer - один оверклокера)

      N.B. Необхідно відразу зробити важливе зауваження: WDT функціонує незалежно від центрального процесора. Тому WDT продовжує працювати навіть при зависанні CPU!

    Алгоритм роботи:
    • У лічильник програми чином може бути записано деяке число.
    • Відразу ж вміст лічильника починає зменшуватися.
    • У момент, коли воно стане рівним нулю, керуючий пристрій виробляє деякі дії, наприклад, ресета комп'ютер.
    Таким чином, щоб запобігти перезавантаження, програма повинна періодично оновлювати вміст лічильника. Якщо вона цього не зможе зробити (наприклад, якщо комп'ютер завис), то після закінчення деякого часу, коли вміст лічильника досягне нуля, WDT перезавантажить систему.

    Конкретні реалізація WDT може трохи відрізнятися від описаної вище.
    Наприклад, сам лічильник може бути недоступний програмі для безпосереднього зміни. Замість цього вона заносить значення в додатковий регістр, вміст якого пристрій управління відразу ж переносить в лічильник, і лічильник починає зворотний відлік.

    У разі використання доп. регістра можливе використання лічильника, провідного прямий відлік. В цьому випадку його вміст постійно порівнюється пристроєм управління з вмістом доп.регістра. Якщо значення збігаються, то УУ виробляє відповідні дії (ресет).

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

    Загалом, конкретна реалізація WDT залежить від фантазії розробника і завдань, які передбачається вирішувати.


    Настав час перейти до практики.

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

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


  • В даному випадку будова WDT дещо відрізняється від розглянутого вище в сторону розширення можливостей за рахунок деякого ускладнення. Його основні складові частини:
  • лічильник
  • керуючий пристрій
  • додатковий регістр
  • конфігураційний регістр
  • регістр статусу

    Watch dog timer - один оверклокера)

    Призначення цих складових частин стане зрозуміло з опису алгоритму функціонування WDT:

  • Програма заносить в додатковий регістр нульове значення тимчасового інтервалу.
  • Відразу ж УУ инициализирует лічильник (в лічильник переноситься значення цього доп. Регістра) і він починає свій зворотний відлік.
  • Якщо відлік дійшов до нуля, то WDT може виконати наступні дії:
      - видати сигнал через KRST
      - видати сигнал через PWROK1 / 2

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

    - змінити стан регістра статусу

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

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

    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-портів комп'ютера таймер відключається. Причина: переклад мікросхеми з розширеного режиму в звичайний. Як боротися. Поки не знаю. Простіше змиритися з цим або відключити порти

  • Сподобалася стислість опису принципу дії 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 not reset the timer and it (should) reboot automatically.
    Поточна версія v.0.2: 8rdawdt-0.2.tar.bz2 (на жаль, тільки під Юнікси)

    ---
    Обговорити цю та інші статті / запису з моєї персональної сторінки можна в відповідній гілці конференції.