В итоге мы получили устройство, которое подключается к расширительному спаренному USB-разъему на материнской плате.
Данное устройство имеет следующие возможности:
- Имитация нажатия кнопок POWER и RESET;
- Управление питанием USB-устройством (при условии, что у него нет отдельного источника);
- Управление гальванически развязанной контактной группой (реле). Можно поставить в разрез цепи питания;
- Индикаторные светодиоды (одним можно управлять, второй показывает режимы работы).
Алгоритм работы прост: внутри находятся два настраиваемых таймера, которые постоянно отсчитывают заданное время, по истечению которого имитируется нажатие соответствующих кнопок (POWER и RESET). Чтобы предотвратить случайную перезагрузку, необходимо периодически послать команду сброса таймера.
Лучше, чтобы за процедуру сброса таймеров отвечало целевое приложение, а не стороннее или системное (Cron, служба расписаний) по причине того, что вероятность сбоя в системе меньше, чем в приложении (хотя, у кого как).
Обмен информацией аналогичен консольному.
Система команд:
команда | Описание | Пример |
---|---|---|
help | Краткая справка по командам | help |
LED1 | Управление светодиодом, по умолчанию выключен | LED1 ON LED1 OFF |
RELAY | Управление реле, по умолчанию включено | RELAY ON RELAY OFF |
KEY1 | Имитация нажатия кнопки 1, по умолчанию не нажата | KEY1 ON KEY1 OFF |
KEY2 | Имитация нажатия кнопки 2, по умолчанию не нажата | KEY2 ON KEY2 OFF |
C1 | Управление таймером 1, связанным с кнопкой 1. Установка времени в секундах, максимальное значение 32767. Для отключения функции таймера, необходимо задать время равное 0. |
C1 RES C1 SET 60 C1 SET 0 |
C2 | Управление таймером 2, связанным с кнопкой 2. Установка времени в секундах, максимальное значение 32767. Для отключения функции таймера, необходимо задать время равное 0. |
C2 RES C2 SET 60 C2 SET 0 |
USB | Управление питанием USB, по умолчанию включено | USB ON USB OFF |
В случае удачного выполнения команды возвращает «OK».
В случае некорректных данных возвращает «ERROR».
Признаком конца строки служит символ возврата каретки «\r». Также поддерживается режим «\r\n».
Устройство выполнено на базе контроллера STM32F103CA с аппаратной поддержкой USB. Библиотека работы с USB версии V4.0.0. Напряжение работы 3.3В получаем с помощью линейного стабилизатора из 5В на USB. Во всех управляющих цепях используются транзисторы в ключевом режиме. Также не забываем про защитный диод от токов самоиндукции в катушки реле (в моем случае он оказался встроенным).
Вот и все — просто и сердито =).
GitHub
Комментарии (34)
JerleShannara
08.04.2015 16:03+1Странно, на сегодняшний день почти во всех SuperIO чипах есть аппаратный watchdog. Если нет SIO, то обычно оный есть в чипсете.
homecreate
08.04.2015 17:29+1Это сейчас. Судя по тому, что автор говорит о большом ассортименте железа и терминальном применении, железо там совсем не момента «сейчас»
JerleShannara
09.04.2015 01:39Сейчас — это где-то с Pentium 2/3
homecreate
09.04.2015 21:29Не припомню, чтобы зависшая система на PII могла сама себя перезагрузить. Ссылкой не поделитесь?
JerleShannara
10.04.2015 00:44Посмотрите, что за SIO чипы стоят на платах P2/P3 эпохи. Winbond W83977TF к примеру возьмем — watchdog там числится.
Более того, встречал такое ещё на извращенных материнках под P1 и PPro.homecreate
10.04.2015 00:46Но был ли
мальчикдрайвер и управляющее ПО?JerleShannara
10.04.2015 01:15А вы его в современных платах где-то видели? В промавтоматике я в лучшем случае видел три странички ассемблера в конце user мануала про то, как этого пёсика включить и переодически сбрасывать и програмку пример как это типа сделать под виндами, обычно и того хуже — просто пара страниц мануала с кодом и всё. Ну да, ещё видел опцию включения его в самом биосе, но ПО/драйвер — do it yourself в полнейшем варианте.
Ivan_83
10.04.2015 02:44Вачдог нужно было настраивать, а не из коробки в каждой ОС.
Хотя вот тут: download.intel.com/design/chipsets/applnots/29227301.pdf на странице 16 написано что он был уже в ICH1, те примерно с i810, i820, i840, i815 чипсетов.
Что там у виа было в те времена — не знаю.
Похоже у интела под винду есть даже драйвер + сервис для вачдога, нужно только покопаться на их сайте.Krey
10.04.2015 13:23Я копался. Нашел пример кода и все.
Ivan_83
10.04.2015 18:07downloadcenter.intel.com/download/7740/Embedded-Drivers-for-Windows-E7520-ESB-WINDOWS-ZIP-
или тут:
www.driversguru.com/driverdownload/Intel®%20Watchdog%20Timer%20Driver%20(Intel®%20WDT)-os-win764
я вторую ссылку смотрел, там в архиве: /AI_SuiteII_V20101_F2A85-V_PRO_XPVistaWin7_8/TurboV EVO/AppSetup/ICCWDTInstall/
Похоже сервиса там нет, придётся самому кодить, по доке: Intelwdtapi.pdf
OvO
08.04.2015 19:20+2А на самом контроллере stm32 watchdog не стали использовать. Оставили место для будущих разработок? )
barabanus
08.04.2015 20:02Мне одному кажется, что 32-битный контроллер для такой простой задачи избыточен? Такую задачу очень хорошо решил бы ATTiny25 + FTDI (или аналог) для общения через USB.
FishDude
08.04.2015 22:10Мне кажется, что авторы взяли stm-ку исключительно из-за простой работы с usb. На attiny25 эту схему собрать не выйдет: не хватает памяти ловить/обрабатывать usb-кадры. Нужен 45-й как минимум, а лучше 85-й. Могу ошибаться: сам не программирую пока, только мечтаю об этом; причем цель — в точности точно такое же устройство, как у автора.
tachcard Автор
09.04.2015 10:49Самый первый вариант такой и был, но экономически он вышел дороже чем на STM32 + места больше занимает
spot62
09.04.2015 08:37пока в терминалы ставят бытовые комплектующие, эта тема не умрет) делали 7 лет назад gprs модем со встроенным WD)
AMDmi3
На интеловских чипсетах есть встроенный watchdog timer. Не знаю насколько он по факту распространён, но я за последние лет 10 материнок без него не встречал.
Antti
Очень полезная штука, к сожалению о нем мало кто знает и поэтому городят такие велосипеды.
tachcard Автор
есть такие, но в наличии оборудование очень разное поэтому довольно сложно все это обслуживать, поэтому решили сделать универсальную штуку, + можно выполнить сброс периферии. Например перезагрузка системы не поможет в случае зависании сенсорной панели, а девайс позволяет это сделать.
ayakovlev
Офигенно полезная. У меня раз в неделю ноутбук вылетает в синий экран с надписью про watchdog timer.
Я бы предпочел видеть истинную причину, если она не в самом таймере.
wrewolf
ловил такую ошибку только в 10 винде, при том в предпоследней сборке
Krey
Есть подозрение что это не тот watchdog а какой то свой программный. При включении аппаратного watchdog в биосе комп будет ресетится с заданным интервалом времени, поскольку Windows ничего про чипсетный watchdog не знает и не сигнализирует ему о том что все работает.
Хотя может какие-то ноуты с установленной виндой имеют нужный драйвер.
FishDude
Окей, положим он есть. А как его использовать?
tachcard Автор
на *nix у ядра должна быть его поддержка, и периодически выполнять команду сброса его таймера, если в течении установленного времени сброса не было, то комп перезагружается. Время устанавливается в биосе.
AMDmi3
Во FreeBSD, например, это драйвер ichwd и демон watchdogd. В Linux наверняка есть что-то похожее.
homecreate
В линуксе есть демон watchdog, который умеет не только общаться с /dev/watchdog, но ещё и следить за нагрузкой на систему — этакий мини-мониторинг
Ivan_83
Под виндой, полагаю нужно написать драйвер (а ещё потом подписать его валидной ЭЦП для кода) или найти готовый.
Это не плаг-адн-плей устройство.
Может современный виндовс сам его использует для каких то целей.
Сам по себе драйвер вачдога обычно простой: там таймер обратного отсчёта, если не успел программно его сбросить он ресетит систему.
Сама большая сложность в написании такого драйвера под BSD — это правильно преобразовать время на входе от вачдог демона. :)
В некоторых устройствах (типа роутеров и прочий арм/мипс) вачдог используют для программного сброса, обычно на таких девайсах ресет больше никак не делается :)
В железе AMD тоже есть вачдог.
Krey
Да и под *nix все прекрасно работает. А вот Windows про него ничего не знает и драйвер я так и не нашел.