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

В итоге мы получили устройство, которое подключается к расширительному спаренному USB-разъему на материнской плате.




Данное устройство имеет следующие возможности:

  1. Имитация нажатия кнопок POWER и RESET;
  2. Управление питанием USB-устройством (при условии, что у него нет отдельного источника);
  3. Управление гальванически развязанной контактной группой (реле). Можно поставить в разрез цепи питания;
  4. Индикаторные светодиоды (одним можно управлять, второй показывает режимы работы).


Алгоритм работы прост: внутри находятся два настраиваемых таймера, которые постоянно отсчитывают заданное время, по истечению которого имитируется нажатие соответствующих кнопок (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)


  1. AMDmi3
    08.04.2015 15:10
    +8

    На интеловских чипсетах есть встроенный watchdog timer. Не знаю насколько он по факту распространён, но я за последние лет 10 материнок без него не встречал.


    1. Antti
      08.04.2015 15:49
      +9

      Очень полезная штука, к сожалению о нем мало кто знает и поэтому городят такие велосипеды.


    1. tachcard Автор
      08.04.2015 16:11
      +4

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


    1. ayakovlev
      08.04.2015 16:14
      +1

      Офигенно полезная. У меня раз в неделю ноутбук вылетает в синий экран с надписью про watchdog timer.
      Я бы предпочел видеть истинную причину, если она не в самом таймере.


      1. wrewolf
        08.04.2015 17:52

        ловил такую ошибку только в 10 винде, при том в предпоследней сборке


      1. Krey
        08.04.2015 18:58

        Есть подозрение что это не тот watchdog а какой то свой программный. При включении аппаратного watchdog в биосе комп будет ресетится с заданным интервалом времени, поскольку Windows ничего про чипсетный watchdog не знает и не сигнализирует ему о том что все работает.
        Хотя может какие-то ноуты с установленной виндой имеют нужный драйвер.


    1. FishDude
      08.04.2015 17:04

      Окей, положим он есть. А как его использовать?


      1. tachcard Автор
        08.04.2015 17:17

        на *nix у ядра должна быть его поддержка, и периодически выполнять команду сброса его таймера, если в течении установленного времени сброса не было, то комп перезагружается. Время устанавливается в биосе.


      1. AMDmi3
        08.04.2015 17:22

        Во FreeBSD, например, это драйвер ichwd и демон watchdogd. В Linux наверняка есть что-то похожее.


      1. homecreate
        08.04.2015 17:28
        +1

        В линуксе есть демон watchdog, который умеет не только общаться с /dev/watchdog, но ещё и следить за нагрузкой на систему — этакий мини-мониторинг


      1. Ivan_83
        09.04.2015 03:50

        Под виндой, полагаю нужно написать драйвер (а ещё потом подписать его валидной ЭЦП для кода) или найти готовый.
        Это не плаг-адн-плей устройство.
        Может современный виндовс сам его использует для каких то целей.

        Сам по себе драйвер вачдога обычно простой: там таймер обратного отсчёта, если не успел программно его сбросить он ресетит систему.
        Сама большая сложность в написании такого драйвера под BSD — это правильно преобразовать время на входе от вачдог демона. :)

        В некоторых устройствах (типа роутеров и прочий арм/мипс) вачдог используют для программного сброса, обычно на таких девайсах ресет больше никак не делается :)

        В железе AMD тоже есть вачдог.


    1. Krey
      08.04.2015 18:55

      Да и под *nix все прекрасно работает. А вот Windows про него ничего не знает и драйвер я так и не нашел.


  1. JerleShannara
    08.04.2015 16:03
    +1

    Странно, на сегодняшний день почти во всех SuperIO чипах есть аппаратный watchdog. Если нет SIO, то обычно оный есть в чипсете.


    1. homecreate
      08.04.2015 17:29
      +1

      Это сейчас. Судя по тому, что автор говорит о большом ассортименте железа и терминальном применении, железо там совсем не момента «сейчас»


      1. JerleShannara
        09.04.2015 01:39

        Сейчас — это где-то с Pentium 2/3


        1. homecreate
          09.04.2015 21:29

          Не припомню, чтобы зависшая система на PII могла сама себя перезагрузить. Ссылкой не поделитесь?


          1. JerleShannara
            10.04.2015 00:44

            Посмотрите, что за SIO чипы стоят на платах P2/P3 эпохи. Winbond W83977TF к примеру возьмем — watchdog там числится.
            Более того, встречал такое ещё на извращенных материнках под P1 и PPro.


            1. homecreate
              10.04.2015 00:46

              Но был ли мальчик драйвер и управляющее ПО?


              1. JerleShannara
                10.04.2015 01:15

                А вы его в современных платах где-то видели? В промавтоматике я в лучшем случае видел три странички ассемблера в конце user мануала про то, как этого пёсика включить и переодически сбрасывать и програмку пример как это типа сделать под виндами, обычно и того хуже — просто пара страниц мануала с кодом и всё. Ну да, ещё видел опцию включения его в самом биосе, но ПО/драйвер — do it yourself в полнейшем варианте.


          1. Ivan_83
            10.04.2015 02:44

            Вачдог нужно было настраивать, а не из коробки в каждой ОС.

            Хотя вот тут: download.intel.com/design/chipsets/applnots/29227301.pdf на странице 16 написано что он был уже в ICH1, те примерно с i810, i820, i840, i815 чипсетов.
            Что там у виа было в те времена — не знаю.

            Похоже у интела под винду есть даже драйвер + сервис для вачдога, нужно только покопаться на их сайте.


            1. Krey
              10.04.2015 13:23

              Я копался. Нашел пример кода и все.


              1. Ivan_83
                10.04.2015 18:07

                downloadcenter.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


                1. Krey
                  10.04.2015 19:00

                  По первой ссылке 32-битный, по второй что то пусто (No drivers here)


                  1. Ivan_83
                    10.04.2015 21:28

                    Руками ставить, или софтиной которая умеет насильно ставить не PnP дрова.


  1. OvO
    08.04.2015 19:20
    +2

    А на самом контроллере stm32 watchdog не стали использовать. Оставили место для будущих разработок? )


  1. barabanus
    08.04.2015 20:02

    Мне одному кажется, что 32-битный контроллер для такой простой задачи избыточен? Такую задачу очень хорошо решил бы ATTiny25 + FTDI (или аналог) для общения через USB.


    1. FishDude
      08.04.2015 22:10

      Мне кажется, что авторы взяли stm-ку исключительно из-за простой работы с usb. На attiny25 эту схему собрать не выйдет: не хватает памяти ловить/обрабатывать usb-кадры. Нужен 45-й как минимум, а лучше 85-й. Могу ошибаться: сам не программирую пока, только мечтаю об этом; причем цель — в точности точно такое же устройство, как у автора.


      1. barabanus
        08.04.2015 23:14

        Для обработки usb-кадров как раз и нужен FTDI (или аналог), превращающий USB в SPI.


        1. FishDude
          08.04.2015 23:41

          Так-то оно так, но ведь, кажется, смысл теряется — и в цене, и в размере.


      1. tachcard Автор
        09.04.2015 10:49

        Самый первый вариант такой и был, но экономически он вышел дороже чем на STM32 + места больше занимает


  1. Satyricon
    08.04.2015 23:28

    Вачдогов для терминалов существует с десяток видов. Зачем пришлось разрабатывать свой?


    1. tachcard Автор
      09.04.2015 10:52

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


  1. spot62
    09.04.2015 08:37

    пока в терминалы ставят бытовые комплектующие, эта тема не умрет) делали 7 лет назад gprs модем со встроенным WD)


  1. Doctorrr
    10.04.2015 00:03

    молодцы, респект :)