ESP32 – Watchdog timer

watchdog timer destaque

Você já teve problemas com travamento do microcontrolador e teve que reiniciá-lo manualmente? Vamos ajudá-lo a resolver este problema e deixar seu sistema embarcado muito mais confiável e robusto para criação de protótipos e produtos que fiquem em locais de difícil acesso. Neste texto apresentamos sobre o Watchdog Timer, com aplicação no ESP32.

Watchdog timer
Figura 1 – Watchdog Timer.

Basicamente, um Watchdog Timer serve para seu sistema não permaneça travado caso ocorra alguma falha de software ou hardware e normalmente conta com um sistema independente de clock. Quase todos microcontroladores atuais contam com watchdog interno, mas para projetos e produtos mais robustos, pode ser necessário adição de watchdogs externos.

O ESP32 conta com 3 Hardware Watchdogs (HW WDT), um em cada grupo de timer e um no domínio RTC, sendo este o principal e único capaz de reiniciar completamente o ESP32.

  • 4 estágios com ações e tempos independentes.
  • Proteção contra escrita.
  • 32 bits.

Especificamente dentro do ecossistema da IDF (incluindo Arduino Core), há três tipos de watchdogs implementados (baseados nos HW WDT) que podemos configurar facilmente, que são:

Interrupt Watchdog: Watchdog dedicado para análise de interrupções, como por exemplo o Switch Context do FreeRTOS que é responsável pelo gerenciamento de quais tarefas serão executadas. Quando você desabilita as interrupções do sistema, é ele que poderá reiniciar o ESP32. É habilitado por padrão com timeout de 300 ms e baseado no HW WDT 1.

Task Watchdog: Watchdog dedicado para análise de tarefas do FreeRTOS, como por exemplo verificar se todas suas tarefas estão sendo executadas corretamente. Este watchdog é muito interessante, pois permite que nenhuma de suas tarefas fiquem travadas, garantindo que todas estejam sendo executadas com certa frequência. É habilitado por padrão nas IDLE_TASK com timeout de 5 seg e baseado no HW WDT 0. Também pode ser habilitado ou desabilitado (reconfigurado) durante a execução do seu código.

RTC Watchdog: Watchdog dedicado para análise completa do sistema, sendo capaz de reiniciar completamente todo o ESP32. Este watchdog contém seu próprio domínio e clock (RTC_SLOW_CLK) separados do domínio digital, por isso também pode ser utilizado em Deep Sleep. É habilitado por padrão com 9 seg apenas para monitoramento do bootloader (antes da execução do app_main()), entretanto, você pode configurá-lo para continuar ativo após o bootloader e utilizá-lo em seu código, sendo o mais confiável que há internamente do ESP32. É ativo logo nas primeiras instruções do código de bootloader, sendo ativado antes de 1us após a inserção de alimentação no sistema.

Nesse artigo, abordaremos sobre o uso do Task WDT e RTC WDT, vamos fazer alguns testes!

Task Watchdog timer

Este watchdog timer é dedicado para análise individual das tarefas do FreeRTOS, garantindo que todas tarefas monitoradas não travem por elas mesmas ou por outra de maior prioridade (starvation). Quando uma tarefa não o alimenta até o tempo limite, o “Panic Handler” é invocado, que por padrão, reinicia o ESP32.

Cada tarefa monitorada precisa alimentar o watchdog, ou seja, se qualquer uma das tarefas monitoradas não alimentá-lo no tempo limite, irá reiniciar o ESP32. Vamos testar!

Nesse código, há 2 tarefas em execução atribuídas ao Task WDT (t1 e t2) sendo que a “t2” não está alimentando corretamente o watchdog timer, ocasionando reinício do sistema. Observe na figura abaixo que é escrito qual tarefa ocasionou o reinício e quais estavam executando no momento do reinício.

Watchdog timer
Figura 2 – Task Watchdog reiniciando o sistema.

RTC Watchdog

Este watchdog timer é dedicado para análise completa do ESP32, garantindo que todo sistema não fique travado, como por exemplo através de ruídos de alimentação, falha de CPU e etc.

A IDF o utiliza (por padrão) apenas durante o bootloader e é desativado antes do app_main(), entretanto, nós podemos habilitá-lo para permitir controle do usuário. Para isso, basta ativá-lo em “menuconfig > bootloader config > Allows RTC WDT disable in user code”.

Watchdog timer
Figura 3 – Configurando o RTC WDT.

Habilitando esta opção, ele não é mais desabilitado antes do app_main() e continuará rodando, ou seja, se você não alimentá-lo, irá reiniciar completamente todo o ESP32.

 

O código acima efetua a alimentação do RTC WDT antes do seu tempo limite (1000 ms), porém, se você aumentar o delay ou comentar a linha de alimentação, causará o reinício do ESP32.

Conclusão

É sempre importante manter o watchdog timer habilitado em todos seus projetos. Há inúmeros métodos para implementar os watchdogs internos do ESP32 e garantir que seu projeto ou produto não ficará travado por falhas de software ou hardware, mas não se esqueça, ele não resolve a causa do problema, sendo utilizado apenas como uma emergência. Você sempre deve resolver a causa dos travamentos do seu sistema e não utilizar o watchdog como uma simples saída. 

Saiba mais sobre ESP32

ESP32 – conhecendo os pinos de Strapping

ESP32 – Segurança e proteção da flash

ESP32 – Analisando e corrigindo o ADC interno

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
5 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Gustavo Bomfim
Gustavo Bomfim
09/04/2021 17:49

Parabéns pelo post, eles são sempre relevantes.

Paulo Tarcísio Silva Junior
Paulo Tarcísio
10/06/2020 23:51

Muito Bom. Vou passar a utilizar o RTC.

Paulo Tarcísio Silva Junior
Paulo Tarcísio
10/06/2020 23:51

Muito Bom, vou passar a utilizar o RTC

Paulo Tarcísio Silva Junior
Paulo Tarcísio
10/06/2020 23:50

Muito útil. Vou passar a utilizar o RTC

Pedro Henrique Bertoleti
Membro
10/06/2020 14:07

José, artigo muito bom! Parabéns!

Talvez você goste:

Séries

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services