Аппаратный «watchdog» или незаменимый помощник в борьбе с зависанием
В одной компании было много терминалов, и одна из неблагодарных задач для техподдержки — ездить по точкам и перезапускать операционную систему внутри терминалов. Было решено бросить вызов этой проблеме в виде разработки аппаратного сторожевого таймера.В итоге мы получили устройство, которое подключается к расширительному спаренному USB-разъему на материнской плате.
Данное устройство имеет следующие возможности:
Имитация нажатия кнопок POWER и RESET; Управление питанием USB-устройством (при условии, что у него нет отдельного источника); Управление гальванически развязанной контактной группой (реле). Можно поставить в разрез цепи питания; Индикаторные светодиоды (одним можно управлять, второй показывает режимы работы). Алгоритм работы прост: внутри находятся два настраиваемых таймера, которые постоянно отсчитывают заданное время, по истечению которого имитируется нажатие соответствующих кнопок (POWER и RESET). Чтобы предотвратить случайную перезагрузку, необходимо периодически послать команду сброса таймера.
Лучше, чтобы за процедуру сброса таймеров отвечало целевое приложение, а не стороннее или системное (Cron, служба расписаний) по причине того, что вероятность сбоя в системе меньше, чем в приложении (хотя, у кого как).Обмен информацией аналогичен консольному.
Система команд:
команда Описание Пример help Краткая справка по командам help LED1 Управление светодиодом, по умолчанию выключен LED1 ONLED1 OFF RELAY Управление реле, по умолчанию включено RELAY ONRELAY OFF KEY1 Имитация нажатия кнопки 1, по умолчанию не нажата KEY1 ONKEY1 OFF KEY2 Имитация нажатия кнопки 2, по умолчанию не нажата KEY2 ONKEY2 OFF C1 Управление таймером 1, связанным с кнопкой 1.Установка времени в секундах, максимальное значение 32767.Для отключения функции таймера, необходимо задать время равное 0. C1 RESC1 SET 60C1 SET 0 C2 Управление таймером 2, связанным с кнопкой 2.Установка времени в секундах, максимальное значение 32767.Для отключения функции таймера, необходимо задать время равное 0. C2 RESC2 SET 60C2 SET 0 USB Управление питанием USB, по умолчанию включено USB ONUSB OFF В случае удачного выполнения команды возвращает «OK».В случае некорректных данных возвращает «ERROR».Признаком конца строки служит символ возврата каретки »\r». Также поддерживается режим »\r\n».
Устройство выполнено на базе контроллера STM32F103CA с аппаратной поддержкой USB. Библиотека работы с USB версии V4.0.0. Напряжение работы 3.3В получаем с помощью линейного стабилизатора из 5В на USB. Во всех управляющих цепях используются транзисторы в ключевом режиме. Также не забываем про защитный диод от токов самоиндукции в катушки реле (в моем случае он оказался встроенным).
Вот и все — просто и сердито =).
GitHub
[embedded content]