7 pontos por pazzk 2025-12-30 | 7 comentários | Compartilhar no WhatsApp

Ao desenvolver um firmware baseado em ESP32,
enfrentei um problema em que ocorria um Interrupt Watchdog Reset
em um ambiente que usava Flash Encryption e PSRAM ao mesmo tempo, e este texto organiza o processo de resolução desse problema.

O ESP32 é um MCU amplamente usado em ambientes de IoT e embarcados,
e, com base em RTOS, oferece comunicação de rede TLS, sistema de arquivos, atualizações OTA e outros recursos,
permitindo implementar em um único chip aplicações embarcadas que exigem conexão de rede.

7 comentários

 
pathfinder 2025-12-30

Conteúdo interessante, gostei bastante.
Mas por que a área de DMA também usa cache?
Parece que isso facilitaria o surgimento de problemas.

 
pazzk 2025-12-31

Não é que o DMA use o cache diretamente; como se trata de uma memória compartilhada entre o DMA e a CPU, é preciso considerar a coerência do cache.

 
pathfinder 2026-01-01

Não há MMU, mas é possível definir regiões de memória e suas propriedades com a MPU.
Acho que valeria a pena dar uma olhada.

 
pazzk 2026-01-02

Em alguns MCUs de alto desempenho, como você mencionou, é possível usar a MPU para configurar por região não apenas as permissões de acesso, mas também propriedades relacionadas ao cache. O material da ST a seguir é uma boa referência: https://community.st.com/t5/stm32-mcus/…

No entanto, no ESP32-S3 usado neste texto, não é oferecido um mecanismo como o de CPUs de uso geral ou de alguns MCUs, em que os atributos cacheable / non-cacheable podem ser configurados por região de memória via MPU ou algo semelhante.

No caso do ESP32-S3, a memória externa (Flash/PSRAM) foi projetada para ser acessada por meio do cache/MMU (TRM 4.3.3 External Memory), e o controle de permissões de acesso é feito pelo PMS (Permission Management System) (TRM Capítulo 15), mas esse recurso serve para proteção de acesso e não tem o papel de alterar se o acesso passa pelo cache nem o próprio caminho de acesso.

Link do TRM (Technical Reference Manual): https://documentation.espressif.com/esp32-s3_technical_reference_manua….

 
pathfinder 2026-01-02

Obviamente eu estava errado ao presumir que seria um core ARM.
Obrigado pela resposta atenciosa

 
pathfinder 2025-12-31

Entendi, por causa da consistência de cache que você mencionou, imagino que seria necessário fazer cache invalidate toda vez, então fiquei curioso para saber por que não usar simplesmente uma região não cacheável.

 
pazzk 2026-01-01

Ah, ao contrário de computadores de uso geral, em MCUs como o ESP32 não há uma MMU que permita alterar em tempo de execução os atributos da memória por página, e se a memória é cacheable ou non-cacheable é definido previamente por região de memória, então realmente não dá para usar da forma que você mencionou (a SRAM interna é fixa como memória non-cacheable, e a PSRAM fica inteiramente fixa como memória cacheable).

Obrigado pela ótima pergunta!