7 puntos por pazzk 2025-12-30 | 7 comentarios | Compartir por WhatsApp

Mientras desarrollaba firmware basado en ESP32,
me encontré con un problema en el que ocurría un Interrupt Watchdog Reset
en un entorno que usaba simultáneamente cifrado de flash (Flash Encryption) y PSRAM, y este artículo resume el proceso para resolverlo.

El ESP32 es un MCU ampliamente utilizado en entornos de IoT y sistemas embebidos,
y sobre una base RTOS ofrece comunicación de red TLS, sistema de archivos, actualizaciones OTA, entre otros,
lo que permite implementar en un solo chip aplicaciones embebidas que requieren conectividad de red.

7 comentarios

 
pathfinder 2025-12-30

Lo leí con interés.
Pero, ¿cuál es la razón de usar caché también en el área DMA?
Parece que sería fácil que surgieran problemas ahí.

 
pazzk 2025-12-31

No es que el DMA use la caché directamente, sino que como es una memoria compartida tanto por el DMA como por la CPU, hay que considerar la coherencia de caché.

 
pathfinder 2026-01-01

No hay MMU, pero sí se pueden definir regiones de memoria y sus atributos con el MPU.
Creo que valdría la pena revisarlo.

 
pazzk 2026-01-02

En algunos MCU de gama alta, como menciona, es posible configurar por región no solo los permisos de acceso sino también los atributos relacionados con la caché mediante la MPU. El siguiente material de ST será una buena referencia: https://community.st.com/t5/stm32-mcus/…

Sin embargo, en el ESP32-S3 usado en este artículo no se ofrece un método para configurar atributos de memoria cacheable / non-cacheable por región mediante la MPU o un mecanismo similar, como sí ocurre en CPU de propósito general o en algunos MCU.

En el caso del ESP32-S3, la memoria externa (Flash/PSRAM) está diseñada para ser accedida a través de la caché/MMU (TRM 4.3.3 External Memory), y el control de permisos de acceso se realiza mediante el PMS (Permission Management System) (TRM Chapter 15), pero este mecanismo está pensado para la protección de acceso y no para cambiar si pasa por caché o la ruta de acceso en sí.

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

 
pathfinder 2026-01-02

Obviamente, yo estaba pensando equivocadamente que sería un núcleo ARM.
Gracias por la amable respuesta

 
pathfinder 2025-12-31

Entiendo; por la consistencia de caché que mencionaste, parecería que habría que hacer cache invalidate cada vez, así que me dio curiosidad por qué no simplemente usar una región no cacheable.

 
pazzk 2026-01-01

Ah, a diferencia de una computadora de propósito general, en un MCU como el ESP32 no se ofrece una MMU que permita cambiar en tiempo de ejecución los atributos de memoria a nivel de página, y si una región es cacheable o non-cacheable se determina por regiones de memoria predefinidas, así que como comentabas no es posible usarlo de esa manera (la SRAM interna está fijada por completo como non-cacheable y la PSRAM por completo como memoria cacheable).

¡Gracias por la buena pregunta!