펌웨어 캐시 동기화 문제로 발생한 와치독 리셋 분석
(pazzk.net)ESP32 기반 펌웨어를 개발하면서,
플래시 암호화(Flash Encryption)와 PSRAM을 함께 사용하는 환경에서
Interrupt Watchdog Reset이 발생하는 문제를 겪었는데, 이 문제를 해결하는 과정을 정리한 글입니다.
ESP32는 IoT·임베디드 환경에서 널리 사용되는 MCU로,
RTOS 기반에서 TLS 네트워크 통신, 파일시스템, OTA 업데이트 등을 제공해
네트워크 연결이 필요한 임베디드 애플리케이션을 단일 칩으로 구현할 수 있습니다.
일부 하이엔드 MCU에서는 말씀하신 것처럼 MPU를 통해 접근 권한뿐 아니라 캐시 관련 속성까지 영역 단위로 설정할 수 있습니다. 다음의 ST 자료가 좋은 참고 자료일 것입니다: https://community.st.com/t5/stm32-mcus/…
다만 이 글에서 사용한 ESP32-S3에서는, 범용 CPU나 일부 MCU에서 제공하는 것처럼 메모리 영역별 cacheable / non-cacheable 속성을 MPU나 유사한 메커니즘으로 설정하는 방식이 제공되지 않습니다.
ESP32-S3의 경우, 외부 메모리(Flash/PSRAM)는 캐시/MMU를 경유해 접근하도록 설계되어 있으며 (TRM 4.3.3 External Memory), 접근 권한 제어는 PMS(Permission Management System)를 통해 이루어지지만 (TRM Chapter 15), 이 장치는 접근 보호를 위한 것으로 캐시 경유 여부나 접근 경로 자체를 변경하는 역할은 하지 않습니다.
TRM(Technical Reference Manual) 링크: https://documentation.espressif.com/esp32-s3_technical_reference_manua….
네 얘기하신 캐시 일관성 때문에 매번 cache invalidate 를 시켜줘야 할텐데 그냥 non cacheable 영역으로 쓰지 않는 이유가 궁금했습니다